Skip to content

Commit 69edb4d

Browse files
Merge pull request #30 from nfe/feat/additional-information
feat: add additional information block
2 parents 06385f5 + 0cf51ad commit 69edb4d

3 files changed

Lines changed: 62 additions & 18 deletions

File tree

DanfeSharp/Blocos/NFC/BlocoQrCodeNFC.cs

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using DanfeSharp.Modelo;
22
using org.pdfclown.documents;
33
using org.pdfclown.documents.contents.composition;
4+
using System;
45
using System.Drawing;
56
using System.Drawing.Imaging;
67
using System.IO;
@@ -11,27 +12,57 @@ internal class BlocoQrCodeNFC : ElementoBase
1112
{
1213
public BlocoQrCodeNFC(DanfeViewModel viewModel, Estilo estilo, PrimitiveComposer primitiveComposer, float y, Document context) : base(estilo)
1314
{
15+
Y_NFC = y + 10;
16+
1417
var result = new MemoryStream();
1518
primitiveComposer.BeginLocalState();
1619
primitiveComposer.SetFont(estilo.FonteCampoConteudo.FonteInterna, estilo.FonteCampoConteudo.Tamanho);
17-
primitiveComposer.ShowText("CONSULTA VIA LEITOR DE QR CODE", new PointF(140, y + 10), XAlignmentEnum.Center, YAlignmentEnum.Top, 0);
20+
primitiveComposer.ShowText("CONSULTA VIA LEITOR DE QR CODE", new PointF(140, Y_NFC), XAlignmentEnum.Center, YAlignmentEnum.Top, 0);
21+
Y_NFC += 10;
1822

1923
var bitmap = GerarQrCode.GerarQRCode(viewModel.QrCode);
2024
bitmap.Save(result, ImageFormat.Jpeg);
2125
result.Position = 0;
2226
org.pdfclown.documents.contents.entities.Image image = org.pdfclown.documents.contents.entities.Image.Get(result);
2327
org.pdfclown.documents.contents.xObjects.XObject imageXObject = image.ToXObject(context);
24-
25-
primitiveComposer.ShowXObject(imageXObject, new PointF(140, y + 20), new SizeF(150, 150), XAlignmentEnum.Center, YAlignmentEnum.Top, 0);
28+
primitiveComposer.ShowXObject(imageXObject, new PointF(140, Y_NFC), new SizeF(150, 150), XAlignmentEnum.Center, YAlignmentEnum.Top, 0);
29+
Y_NFC += 160;
2630

2731
if (viewModel.CalculoImposto.ValorAproximadoTributos > 0)
28-
// valor aproximado dos tributos
2932
{
3033
primitiveComposer.SetFont(estilo.FonteCampoConteudoNegrito.FonteInterna, 7);
3134

32-
primitiveComposer.ShowText($"CONFORME LEI 12.741/2012 o valor aproximado dos tributos é {viewModel.CalculoImposto.ValorAproximadoTributos.Formatar()}", new PointF(140, y + 180), XAlignmentEnum.Center, YAlignmentEnum.Middle, 0);
33-
primitiveComposer.ShowText($"O valor aproximado dos tributos Federais é {viewModel.CalculoImposto.ValorAproximadoTributosFederais.Formatar()}", new PointF(140, y + 190), XAlignmentEnum.Center, YAlignmentEnum.Middle, 0);
34-
primitiveComposer.ShowText($"O valor aproximado dos tributos Estaduais é {viewModel.CalculoImposto.ValorAproximadoTributosEstaduais.Formatar()}", new PointF(140, y + 200), XAlignmentEnum.Center, YAlignmentEnum.Middle, 0);
35+
primitiveComposer.ShowText($"CONFORME LEI 12.741/2012 o valor aproximado dos tributos é {viewModel.CalculoImposto.ValorAproximadoTributos.Formatar()}", new PointF(140, Y_NFC), XAlignmentEnum.Center, YAlignmentEnum.Middle, 0);
36+
Y_NFC += 10;
37+
38+
primitiveComposer.ShowText($"O valor aproximado dos tributos Federais é {viewModel.CalculoImposto.ValorAproximadoTributosFederais.Formatar()}", new PointF(140, Y_NFC), XAlignmentEnum.Center, YAlignmentEnum.Middle, 0);
39+
Y_NFC += 10;
40+
41+
primitiveComposer.ShowText($"O valor aproximado dos tributos Estaduais é {viewModel.CalculoImposto.ValorAproximadoTributosEstaduais.Formatar()}", new PointF(140, Y_NFC), XAlignmentEnum.Center, YAlignmentEnum.Middle, 0);
42+
Y_NFC += 10;
43+
}
44+
45+
if (!string.IsNullOrWhiteSpace(viewModel.InformacoesComplementares))
46+
{
47+
const int MaxLength = 80;
48+
49+
primitiveComposer.SetFont(estilo.FonteCampoConteudo.FonteInterna, 7);
50+
51+
if (viewModel.InformacoesComplementares.Length > MaxLength)
52+
{
53+
// Split content in two lines
54+
55+
primitiveComposer.ShowText(viewModel.InformacoesComplementares.Substring(0, MaxLength), new PointF(140, Y_NFC), XAlignmentEnum.Center, YAlignmentEnum.Middle, 0);
56+
Y_NFC += 10;
57+
58+
primitiveComposer.ShowText(viewModel.InformacoesComplementares.Substring(MaxLength, Math.Min(viewModel.InformacoesComplementares.Length - MaxLength, MaxLength)), new PointF(140, Y_NFC), XAlignmentEnum.Center, YAlignmentEnum.Middle, 0);
59+
Y_NFC += 10;
60+
}
61+
else
62+
{
63+
primitiveComposer.ShowText(viewModel.InformacoesComplementares, new PointF(140, Y_NFC), XAlignmentEnum.Center, YAlignmentEnum.Middle, 0);
64+
Y_NFC += 10;
65+
}
3566
}
3667
}
3768
}

DanfeSharp/DanfeNFC.cs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,35 @@ public DanfeNFC(DanfeViewModel viewModel, string creditos = null, string metadat
3939
File = new File();
4040
PdfDocument = File.Document;
4141

42+
const float Width = 280;
43+
const float Height = 600;
44+
4245
if (viewModel.Produtos.Count <= 20)
43-
_size = new SizeF(280, viewModel.Produtos.Count * 30 + 600);
46+
_size = new SizeF(Width, Height + viewModel.Produtos.Count * 30);
4447
else if (viewModel.Produtos.Count <= 40)
45-
_size = new SizeF(280, viewModel.Produtos.Count * 14 + 600);
48+
_size = new SizeF(Width, Height + viewModel.Produtos.Count * 14);
4649
else if (viewModel.Produtos.Count <= 75)
47-
_size = new SizeF(280, viewModel.Produtos.Count * 20 + 600);
50+
_size = new SizeF(Width, Height + viewModel.Produtos.Count * 20);
4851
else if (viewModel.Produtos.Count <= 150)
49-
_size = new SizeF(280, viewModel.Produtos.Count * 11 + 600);
52+
_size = new SizeF(Width, Height + viewModel.Produtos.Count * 11);
5053
else if (viewModel.Produtos.Count <= 250)
51-
_size = new SizeF(280, viewModel.Produtos.Count * 10.5F + 600);
54+
_size = new SizeF(Width, Height + viewModel.Produtos.Count * 10.5F);
5255
else if (viewModel.Produtos.Count <= 400)
53-
_size = new SizeF(280, viewModel.Produtos.Count * 10.2F + 600);
56+
_size = new SizeF(Width, Height + viewModel.Produtos.Count * 10.2F);
5457
else if (viewModel.Produtos.Count <= 480)
55-
_size = new SizeF(280, viewModel.Produtos.Count * 10.1F + 600);
58+
_size = new SizeF(Width, Height + viewModel.Produtos.Count * 10.1F);
5659
else if (viewModel.Produtos.Count <= 700)
57-
_size = new SizeF(280, viewModel.Produtos.Count * 9.8F + 600);
60+
_size = new SizeF(Width, Height + viewModel.Produtos.Count * 9.8F);
61+
62+
if (viewModel.CalculoImposto.ValorAproximadoTributos > 0)
63+
{
64+
_size.Height += 30;
65+
}
66+
67+
if (!string.IsNullOrWhiteSpace(viewModel.InformacoesComplementares))
68+
{
69+
_size.Height += 20;
70+
}
5871

5972
// 1. Add the page to the document!
6073
_page = new Page(PdfDocument, _size); // Instantiates the page inside the document context.

DanfeSharp/Modelo/DanfeViewModelCreator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
using System;
1+
using DanfeSharp.Esquemas.NFe;
2+
using System;
23
using System.Collections.Generic;
34
using System.IO;
45
using System.Linq;
56
using System.Text;
67
using System.Xml;
78
using System.Xml.Serialization;
8-
using DanfeSharp.Esquemas.NFe;
99

1010
namespace DanfeSharp.Modelo
1111
{
@@ -378,9 +378,9 @@ public static DanfeViewModel CreateFromProcNFCe(ProcNFe procNfe)
378378

379379
// Divisão 9 - Mensagem de Interesse do Contribuinte
380380
model.CalculoImposto.ValorAproximadoTributos = infNfe.total.ICMSTot.vICMS + infNfe.total.ICMSTot.vST + infNfe.total.ICMSTot.vII + infNfe.total.ICMSTot.vIPI + infNfe.total.ICMSTot.vPIS + infNfe.total.ICMSTot.vCOFINS;
381-
382381
model.CalculoImposto.ValorAproximadoTributosEstaduais = infNfe.total.ICMSTot.vICMS + infNfe.total.ICMSTot.vST;
383382
model.CalculoImposto.ValorAproximadoTributosFederais = infNfe.total.ICMSTot.vII + infNfe.total.ICMSTot.vIPI + infNfe.total.ICMSTot.vPIS + infNfe.total.ICMSTot.vCOFINS;
383+
model.InformacoesComplementares = infNfe.infAdic?.infCpl;
384384

385385
return model;
386386
}

0 commit comments

Comments
 (0)