Skip to content

Commit 5a14414

Browse files
committed
[+] Adicionado a possibilidade de imprimir pedaços de texto com estilos diferentes.
[-] Criado interfaces para o ModoPagina. [*] Atualizado as dependências.
1 parent e32389e commit 5a14414

28 files changed

Lines changed: 890 additions & 155 deletions

src/OpenAC.Net.EscPos.Demo/Commom/Helpers.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,7 @@ public static string[] OpenFiles(string filters, string title = "Abrir")
2626
ofd.Filter = filters;
2727
ofd.Title = title;
2828

29-
if (ofd.ShowDialog().Equals(DialogResult.Cancel))
30-
return null;
31-
32-
return ofd.FileNames;
29+
return ofd.ShowDialog().Equals(DialogResult.Cancel) ? Array.Empty<string>() : ofd.FileNames;
3330
}
3431

3532
public static string SelectFolder()

src/OpenAC.Net.EscPos.Demo/Form1.cs

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
using NLog.Config;
66
using NLog.Targets;
77
using NLog.Windows.Forms;
8-
using OpenAC.Net.Core;
8+
using OpenAC.Net.Core.Extensions;
99
using OpenAC.Net.Devices;
10+
using OpenAC.Net.EscPos.Command;
1011
using OpenAC.Net.EscPos.Commom;
1112
using OpenAC.Net.EscPos.Demo.Commom;
12-
using OpenAC.Net.EscPos.Extensions;
1313

1414
namespace OpenAC.Net.EscPos.Demo
1515
{
@@ -242,22 +242,25 @@ private void btnTxt_Click(object sender, EventArgs e)
242242
posprinter.ImprimirTexto("ÁÉÍÓÚáéíóúçÇãõÃÕÊêÀà", CmdAlinhamento.Centro);
243243
posprinter.ImprimirTexto("TESTE NORMAL ESQUERDA", CmdAlinhamento.Esquerda);
244244
posprinter.ImprimirTexto("TESTE NORMAL DIREITA", CmdAlinhamento.Direita);
245-
posprinter.ImprimirLinha(48);
245+
posprinter.ImprimirLinha();
246246
posprinter.ImprimirTexto("TESTE EXPANDIDO", CmdFonte.Normal, CmdTamanhoFonte.Expandida, CmdAlinhamento.Esquerda, null);
247247
posprinter.ImprimirTexto("TESTE CONDENSADO", CmdFonte.Normal, CmdTamanhoFonte.Condensada, CmdAlinhamento.Esquerda, null);
248248
posprinter.ImprimirTexto("TESTE NORMAL", CmdFonte.Normal, CmdTamanhoFonte.Normal, CmdAlinhamento.Esquerda, null);
249-
posprinter.ImprimirLinha(48);
249+
posprinter.ImprimirLinha();
250250
posprinter.ImprimirTexto("TESTE DUPLO EXPANDIDO", CmdFonte.Normal, CmdTamanhoFonte.Expandida, CmdAlinhamento.Esquerda, CmdEstiloFonte.AlturaDupla);
251251
posprinter.ImprimirTexto("TESTE DUPLO CONDESADO", CmdFonte.Normal, CmdTamanhoFonte.Condensada, CmdAlinhamento.Esquerda, CmdEstiloFonte.AlturaDupla);
252252
posprinter.ImprimirTexto("TESTE DUPLO NORMAL", CmdFonte.Normal, CmdTamanhoFonte.Normal, CmdAlinhamento.Esquerda, CmdEstiloFonte.AlturaDupla);
253-
posprinter.ImprimirLinha(48);
253+
posprinter.ImprimirLinha();
254254
posprinter.ImprimirTexto("TESTE NEGRITO", CmdFonte.Normal, CmdTamanhoFonte.Normal, CmdAlinhamento.Esquerda, CmdEstiloFonte.Negrito);
255255
posprinter.ImprimirTexto("TESTE ITALICO", CmdFonte.Normal, CmdTamanhoFonte.Normal, CmdAlinhamento.Esquerda, CmdEstiloFonte.Italico);
256256
posprinter.ImprimirTexto("TESTE SUBLINHADO", CmdFonte.Normal, CmdTamanhoFonte.Normal, CmdAlinhamento.Esquerda, CmdEstiloFonte.Sublinhado);
257-
posprinter.ImprimirLinha(48);
257+
posprinter.ImprimirLinha();
258258
posprinter.ImprimirTexto("TESTE FONTE NORMAL", CmdFonte.Normal, CmdTamanhoFonte.Normal, CmdAlinhamento.Esquerda, null);
259259
posprinter.ImprimirTexto("TESTE FONTE A", CmdFonte.FonteA, CmdTamanhoFonte.Normal, CmdAlinhamento.Esquerda, null);
260260
posprinter.ImprimirTexto("TESTE FONTE B", CmdFonte.FonteB, CmdTamanhoFonte.Normal, CmdAlinhamento.Esquerda, null);
261+
posprinter.ImprimirLinha();
262+
263+
posprinter.ImprimirTexto(new TextSlice("Teste Texto: ", CmdEstiloFonte.Negrito), new TextSlice("Funcionou"));
261264

262265
posprinter.CortarPapel();
263266
posprinter.Imprimir();
@@ -272,11 +275,11 @@ private void btnCodBar_Click(object sender, EventArgs e)
272275
posprinter.Conectar();
273276

274277
posprinter.ImprimirBarcode("ABCDE12345", CmdBarcode.CODE39, CmdAlinhamento.Centro, CmdBarcodeText.Acima);
275-
posprinter.ImprimirLinha(48);
278+
posprinter.ImprimirLinha();
276279
posprinter.ImprimirBarcode("1234567890", CmdBarcode.Inter2of5, CmdAlinhamento.Centro, CmdBarcodeText.Ambos);
277-
posprinter.ImprimirLinha(48);
280+
posprinter.ImprimirLinha();
278281
posprinter.ImprimirBarcode("$-=+ABC123abc", CmdBarcode.CODE128, CmdAlinhamento.Centro, CmdBarcodeText.Abaixo);
279-
posprinter.ImprimirLinha(48);
282+
posprinter.ImprimirLinha();
280283
posprinter.ImprimirBarcode("3515071111111111111159", CmdBarcode.CODE128c, CmdAlinhamento.Centro, CmdBarcodeText.Abaixo);
281284

282285
posprinter.CortarPapel();
@@ -298,15 +301,15 @@ private void btnQrCode_Click(object sender, EventArgs e)
298301
// QrCode NFCe
299302
posprinter.ImprimirTexto("Exemplo QrCode NFCe.", CmdEstiloFonte.Negrito);
300303
posprinter.ImprimirQrCode(qrCode, tamanho: QrCodeModSize.Minusculo, aAlinhamento: CmdAlinhamento.Centro);
301-
posprinter.ImprimirLinha(48);
304+
posprinter.ImprimirLinha();
302305
posprinter.ImprimirQrCode(qrCode, tamanho: QrCodeModSize.Pequeno, aAlinhamento: CmdAlinhamento.Centro);
303-
posprinter.ImprimirLinha(48);
306+
posprinter.ImprimirLinha();
304307
posprinter.ImprimirQrCode(qrCode, tamanho: QrCodeModSize.Normal, aAlinhamento: CmdAlinhamento.Centro);
305-
posprinter.ImprimirLinha(48);
308+
posprinter.ImprimirLinha();
306309
posprinter.ImprimirQrCode(qrCode, tamanho: QrCodeModSize.Grande, aAlinhamento: CmdAlinhamento.Centro);
307-
posprinter.ImprimirLinha(48);
310+
posprinter.ImprimirLinha();
308311
posprinter.ImprimirQrCode(qrCode, tamanho: QrCodeModSize.ExtraGrande, aAlinhamento: CmdAlinhamento.Centro);
309-
posprinter.ImprimirLinha(48);
312+
posprinter.ImprimirLinha();
310313

311314
posprinter.PularLinhas(2);
312315

@@ -318,13 +321,13 @@ private void btnQrCode_Click(object sender, EventArgs e)
318321

319322
posprinter.ImprimirTexto("Exemplo QrCode SAT.", CmdEstiloFonte.Negrito);
320323
posprinter.ImprimirQrCode(qrCode, tamanho: QrCodeModSize.Minusculo, aAlinhamento: CmdAlinhamento.Centro);
321-
posprinter.ImprimirLinha(48);
324+
posprinter.ImprimirLinha();
322325
posprinter.ImprimirQrCode(qrCode, tamanho: QrCodeModSize.Pequeno, aAlinhamento: CmdAlinhamento.Centro);
323-
posprinter.ImprimirLinha(48);
326+
posprinter.ImprimirLinha();
324327
posprinter.ImprimirQrCode(qrCode, tamanho: QrCodeModSize.Normal, aAlinhamento: CmdAlinhamento.Centro);
325-
posprinter.ImprimirLinha(48);
328+
posprinter.ImprimirLinha();
326329
posprinter.ImprimirQrCode(qrCode, tamanho: QrCodeModSize.Grande, aAlinhamento: CmdAlinhamento.Centro);
327-
posprinter.ImprimirLinha(48);
330+
posprinter.ImprimirLinha();
328331
posprinter.ImprimirQrCode(qrCode, tamanho: QrCodeModSize.ExtraGrande, aAlinhamento: CmdAlinhamento.Centro);
329332

330333
posprinter.CortarPapel();

src/OpenAC.Net.EscPos.Demo/OpenAC.Net.EscPos.Demo.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
<ItemGroup>
1212
<PackageReference Include="NLog" Version="4.7.15" />
1313
<PackageReference Include="NLog.Windows.Forms" Version="4.5.0" />
14-
<PackageReference Include="OpenAC.Net.Devices" Version="1.5.0-preview.4" />
15-
<PackageReference Include="System.Text.Encoding.CodePages" Version="7.0.0-preview.2.22152.2" />
14+
<PackageReference Include="OpenAC.Net.Devices" Version="1.5.0" />
15+
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" />
1616
</ItemGroup>
1717

1818
<ItemGroup>

src/OpenAC.Net.EscPos/Command/ModoPaginaCommand.cs

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,18 @@
2929
// <summary></summary>
3030
// ***********************************************************************
3131

32+
using System;
3233
using System.Collections.Generic;
3334
using OpenAC.Net.EscPos.Commom;
3435
using OpenAC.Net.EscPos.Interpreter;
3536

3637
namespace OpenAC.Net.EscPos.Command;
3738

38-
public sealed class ModoPaginaCommand : PrintCommand<ModoPaginaCommand>
39+
public sealed class ModoPaginaCommand : PrintCommand<ModoPaginaCommand>, IModoPagina
3940
{
4041
#region Fields
4142

42-
protected List<ModoPaginaRegiao> regioes;
43+
private readonly List<ModoPaginaRegiao> regioes;
4344

4445
#endregion Fields
4546

@@ -59,15 +60,41 @@ public ModoPaginaCommand(EscPosInterpreter interpreter) : base(interpreter)
5960
/// </summary>
6061
public IReadOnlyList<ModoPaginaRegiao> Regioes => regioes;
6162

63+
IReadOnlyList<IRegiaoPagina> IModoPagina.Regioes => regioes;
64+
6265
/// <summary>
6366
/// Define/Obtém o espaço entre as linhas da impressão.
6467
/// </summary>
6568
public byte EspacoEntreLinhas { get; set; } = 0;
6669

6770
/// <summary>
68-
/// Define/Obtém as configurações padrão da gaveta.
71+
/// Define/Obtém a quantidade de coluna quando a fonte é normal.
72+
/// </summary>
73+
public int Colunas { get; set; } = 48;
74+
75+
/// <summary>
76+
/// Retorna a quantidade de colunas quando a fonte é expandida.
6977
/// </summary>
70-
public GavetaConfig Gaveta { get; set; } = new();
78+
public int ColunasExpandida
79+
{
80+
get
81+
{
82+
if (Interpreter == null) return 0;
83+
return (int)Math.Truncate(Colunas / Interpreter.RazaoColuna.Expandida);
84+
}
85+
}
86+
87+
/// <summary>
88+
/// Retorna a quantidade de colunas quando a fonte é concensada.
89+
/// </summary>
90+
public int ColunasCondensada
91+
{
92+
get
93+
{
94+
if (Interpreter == null) return 0;
95+
return (int)Math.Truncate(Colunas / Interpreter.RazaoColuna.Condensada);
96+
}
97+
}
7198

7299
/// <summary>
73100
/// Define/Obtém as configurações padrão do codigo de barras.
@@ -88,7 +115,7 @@ public ModoPaginaCommand(EscPosInterpreter interpreter) : base(interpreter)
88115

89116
#region Methods
90117

91-
public ModoPaginaRegiao NovaRegiao(int esqueda, int topo, int largura, int altura)
118+
public IRegiaoPagina NovaRegiao(int esqueda, int topo, int largura, int altura)
92119
{
93120
var regiao = new ModoPaginaRegiao(this, Interpreter)
94121
{
@@ -102,7 +129,7 @@ public ModoPaginaRegiao NovaRegiao(int esqueda, int topo, int largura, int altur
102129
return regiao;
103130
}
104131

105-
public void RemoverRegiao(ModoPaginaRegiao regiao) => regioes.Remove(regiao);
132+
public void RemoverRegiao(IRegiaoPagina regiao) => regioes.Remove(regiao as ModoPaginaRegiao);
106133

107134
#endregion Methods
108135
}

src/OpenAC.Net.EscPos/Command/ModoPaginaRegiao.cs

Lines changed: 69 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040
namespace OpenAC.Net.EscPos.Command;
4141

42-
public sealed class ModoPaginaRegiao : IOpenLog
42+
public sealed class ModoPaginaRegiao : IOpenLog, IRegiaoPagina
4343
{
4444
#region Fields
4545

@@ -107,29 +107,11 @@ public void PularLinhas(int aLinhas)
107107
/// </summary>
108108
/// <param name="tamanho"></param>
109109
/// <param name="dupla"></param>
110-
public void ImprimirLinha(int tamanho, bool dupla = false)
110+
public void ImprimirLinha(bool dupla = false)
111111
{
112112
var cmd = new PrintLineCommand(interpreter)
113113
{
114-
Tamanho = tamanho
115-
};
116-
117-
commands.Add(cmd);
118-
}
119-
120-
/// <summary>
121-
/// Adiciona o comando de abrir gaveta ao buffer de impressão da região.
122-
/// </summary>
123-
/// <param name="aGaveta"></param>
124-
public void AbrirGaveta(CmdGaveta aGaveta = CmdGaveta.GavetaUm)
125-
{
126-
this.Log().Debug($"{MethodBase.GetCurrentMethod()?.Name} {(byte)aGaveta}");
127-
128-
var cmd = new CashDrawerCommand(interpreter)
129-
{
130-
Gaveta = aGaveta,
131-
TempoON = parent.Gaveta.TempoON,
132-
TempoOFF = parent.Gaveta.TempoOFF
114+
Tamanho = parent.Colunas
133115
};
134116

135117
commands.Add(cmd);
@@ -259,9 +241,74 @@ public void ImprimirTexto(string aTexto, CmdFonte fonte, CmdTamanhoFonte tamanho
259241
Fonte = fonte,
260242
Tamanho = tamanho,
261243
Alinhamento = aAlinhamento,
262-
Estilo = aEstilo
244+
Estilo = aEstilo,
245+
};
246+
247+
commands.Add(cmd);
248+
}
249+
250+
/// <summary>
251+
/// Adiciona o comando de impressão de texto ao buffer.
252+
/// </summary>
253+
/// <param name="slices"></param>
254+
public void ImprimirTexto(params TextSlice[] slices)
255+
{
256+
ImprimirTexto(CmdFonte.Normal, CmdTamanhoFonte.Normal, CmdAlinhamento.Esquerda, slices);
257+
}
258+
259+
/// <summary>
260+
/// Adiciona o comando de impressão de texto ao buffer.
261+
/// </summary>
262+
/// <param name="aAlinhamento"></param>
263+
/// <param name="slices"></param>
264+
public void ImprimirTexto(CmdAlinhamento aAlinhamento, params TextSlice[] slices)
265+
{
266+
ImprimirTexto(CmdFonte.Normal, CmdTamanhoFonte.Normal, aAlinhamento, slices);
267+
}
268+
269+
/// <summary>
270+
/// Adiciona o comando de impressão de texto ao buffer.
271+
/// </summary>
272+
/// <param name="fonte"></param>
273+
/// <param name="tamanho"></param>
274+
/// <param name="aAlinhamento"></param>
275+
/// <param name="slices"></param>
276+
public void ImprimirTexto(CmdTamanhoFonte tamanho, CmdAlinhamento aAlinhamento, params TextSlice[] slices)
277+
{
278+
ImprimirTexto(CmdFonte.Normal, tamanho, aAlinhamento, slices);
279+
}
280+
281+
/// <summary>
282+
/// Adiciona o comando de impressão de texto ao buffer.
283+
/// </summary>
284+
/// <param name="fonte"></param>
285+
/// <param name="aAlinhamento"></param>
286+
/// <param name="slices"></param>
287+
public void ImprimirTexto(CmdFonte fonte, CmdAlinhamento aAlinhamento, params TextSlice[] slices)
288+
{
289+
ImprimirTexto(fonte, CmdTamanhoFonte.Normal, aAlinhamento, slices);
290+
}
291+
292+
/// <summary>
293+
/// Adiciona o comando de impressão de texto ao buffer.
294+
/// </summary>
295+
/// <param name="fonte"></param>
296+
/// <param name="tamanho"></param>
297+
/// <param name="aAlinhamento"></param>
298+
/// <param name="slices"></param>
299+
public void ImprimirTexto(CmdFonte fonte, CmdTamanhoFonte tamanho, CmdAlinhamento aAlinhamento, params TextSlice[] slices)
300+
{
301+
this.Log().Debug($"{MethodBase.GetCurrentMethod()?.Name}");
302+
303+
var cmd = new TextSliceCommand(interpreter)
304+
{
305+
Fonte = fonte,
306+
Tamanho = tamanho,
307+
Alinhamento = aAlinhamento,
263308
};
264309

310+
foreach (var slice in slices)
311+
cmd.AddSlice(slice);
265312
commands.Add(cmd);
266313
}
267314

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// ***********************************************************************
2+
// Assembly : OpenAC.Net.EscPos
3+
// Author : Rafael Dias
4+
// Created : 17-03-2022
5+
//
6+
// Last Modified By : Rafael Dias
7+
// Last Modified On : 17-03-2022
8+
// ***********************************************************************
9+
// <copyright file="TextSlice.cs" company="OpenAC .Net">
10+
// The MIT License (MIT)
11+
// Copyright (c) 2014 - 2021 Projeto OpenAC .Net
12+
//
13+
// Permission is hereby granted, free of charge, to any person obtaining
14+
// a copy of this software and associated documentation files (the "Software"),
15+
// to deal in the Software without restriction, including without limitation
16+
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
17+
// and/or sell copies of the Software, and to permit persons to whom the
18+
// Software is furnished to do so, subject to the following conditions:
19+
// The above copyright notice and this permission notice shall be
20+
// included in all copies or substantial portions of the Software.
21+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22+
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23+
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
24+
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25+
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
26+
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27+
// DEALINGS IN THE SOFTWARE.
28+
// </copyright>
29+
// <summary></summary>
30+
// ***********************************************************************
31+
32+
using System;
33+
using OpenAC.Net.EscPos.Commom;
34+
35+
namespace OpenAC.Net.EscPos.Command;
36+
37+
public sealed class TextSlice
38+
{
39+
#region Constructors
40+
41+
public TextSlice(string aTexto, CmdEstiloFonte? estilo = null)
42+
{
43+
Texto = aTexto.Replace(Environment.NewLine, string.Empty);
44+
Estilo = estilo;
45+
}
46+
47+
#endregion Constructors
48+
49+
#region Properties
50+
51+
public string Texto { get; set; }
52+
53+
public CmdEstiloFonte? Estilo { get; set; }
54+
55+
#endregion Properties
56+
}

0 commit comments

Comments
 (0)