4 changed files with 86 additions and 77 deletions
-
77pytrustnfe/pdf/Danfe.py
-
74pytrustnfe/pdf/__init__.py
-
11pytrustnfe/test/test_danfe.py
-
1requirements.txt
@ -1,77 +0,0 @@ |
|||||
# -*- coding: utf-8 -*- |
|
||||
# © 2016 Danimar Ribeiro, Trustcode |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
|
||||
|
|
||||
from pytrustnfe.xml.DynamicXml import DynamicXml |
|
||||
from reportlab.platypus.tables import Table |
|
||||
from reportlab.lib.pagesizes import A4 |
|
||||
from reportlab.platypus.doctemplate import SimpleDocTemplate |
|
||||
from reportlab.lib import colors |
|
||||
from reportlab.platypus.paragraph import Paragraph |
|
||||
from reportlab.lib.styles import ParagraphStyle |
|
||||
|
|
||||
inch = 28.34 |
|
||||
|
|
||||
|
|
||||
class Danfe(object): |
|
||||
|
|
||||
objeto = None |
|
||||
|
|
||||
def __init__(self, objetoNFe): |
|
||||
assert isinstance(objetoNFe, DynamicXml),\ |
|
||||
'ObjetoNFe deve ser do tipo DynamicXml' |
|
||||
self.objeto = objetoNFe |
|
||||
|
|
||||
def _header(self): |
|
||||
data = [ |
|
||||
['Recebemos de verdesaine industria e comércio os produtos constantes na nota fiscal abaixo ', '', |
|
||||
'NF-e\nNº 000.000.001\nSérie 001'], |
|
||||
['Data de recebimento', |
|
||||
'Identificação e assinatura do recebedor', |
|
||||
''] |
|
||||
] |
|
||||
|
|
||||
estilo = [('SPAN', (0, 0), (1, 0)), |
|
||||
('SPAN', (2, 0), (2, 1)), |
|
||||
('FONTSIZE', (0, 0), (1, 1), 7.0), |
|
||||
('VALIGN', (0, 0), (1, 1), 'TOP'), |
|
||||
('ALIGN', (2, 0), (2, 1), 'CENTER'), |
|
||||
('TOPPADING', (0, 0), (1, 1), 6), |
|
||||
('GRID', (0, 0), (3, 1), 0.5, colors.black)] |
|
||||
colunas = [4 * inch, 12 * inch, 4 * inch] |
|
||||
linhas = [20,30] |
|
||||
table = Table(data, style=estilo, colWidths=colunas, rowHeights=linhas) |
|
||||
return table |
|
||||
|
|
||||
def _field(self, label, value): |
|
||||
estilo = ParagraphStyle('default') |
|
||||
return Paragraph('<font size="8">' + label + '</font>' + '<br />' + value, estilo) |
|
||||
|
|
||||
def _segundo_cabecalho(self): |
|
||||
data = [ |
|
||||
[self._field('Natureza da operação', 'Venda de produção do estabelecimento'), '', |
|
||||
self._field('Protocolo de autorização de uso', '12345678956665487')], |
|
||||
[self._field('Inscrição estadual', '156466487897'), |
|
||||
self._field('Inscrição estadual substituto tributário', '1456465456'), |
|
||||
self._field('CNPJ', '87.224.633/0001-61'), ] |
|
||||
] |
|
||||
|
|
||||
estilo = [('SPAN', (0, 0), (1, 0)), |
|
||||
('FONTSIZE', (0, 0), (1, 1), 7.0), |
|
||||
('GRID', (0, 0), (2, 1), 0.5, colors.black)] |
|
||||
colunas = [6 * inch, 7 * inch, 7 * inch] |
|
||||
table = Table(data, style=estilo, colWidths=colunas) |
|
||||
return table |
|
||||
|
|
||||
def gerar(self): |
|
||||
doc = SimpleDocTemplate( |
|
||||
'/home/danimar/projetos/pdfs/danfe.pdf', |
|
||||
pagesize=A4, leftMargin=0.5 * inch, rightMargin=0.5 * inch, |
|
||||
topMargin=0.5 * inch, bottomMargin=0.5 * inch) |
|
||||
|
|
||||
elementos = [] |
|
||||
|
|
||||
elementos.append(self._header()) |
|
||||
elementos.append(self._segundo_cabecalho()) |
|
||||
|
|
||||
doc.build(elementos) |
|
||||
@ -1,3 +1,77 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
# © 2016 Danimar Ribeiro, Trustcode |
# © 2016 Danimar Ribeiro, Trustcode |
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
|
from uuid import uuid4 |
||||
|
from reportlab.platypus.tables import Table |
||||
|
from reportlab.lib.pagesizes import A4 |
||||
|
from reportlab.platypus.doctemplate import SimpleDocTemplate |
||||
|
from reportlab.lib import colors |
||||
|
from reportlab.platypus.paragraph import Paragraph |
||||
|
from reportlab.lib.styles import ParagraphStyle |
||||
|
|
||||
|
inch = 28.34 |
||||
|
|
||||
|
|
||||
|
class Danfe(object): |
||||
|
|
||||
|
objeto = None |
||||
|
|
||||
|
def __init__(self, objetoNFe): |
||||
|
self.objeto = objetoNFe |
||||
|
|
||||
|
def _header(self): |
||||
|
data = [[ |
||||
|
'Recebemos de %s os produtos constantes na nota fiscal abaixo' % '', |
||||
|
'', 'NF-e\nNº %s\nSérie 001' |
||||
|
], [ |
||||
|
'Data de recebimento', |
||||
|
'Identificação e assinatura do recebedor', |
||||
|
'' |
||||
|
]] |
||||
|
|
||||
|
estilo = [('SPAN', (0, 0), (1, 0)), |
||||
|
('SPAN', (2, 0), (2, 1)), |
||||
|
('FONTSIZE', (0, 0), (1, 1), 7.0), |
||||
|
('VALIGN', (0, 0), (1, 1), 'TOP'), |
||||
|
('ALIGN', (2, 0), (2, 1), 'CENTER'), |
||||
|
('TOPPADING', (0, 0), (1, 1), 6), |
||||
|
('GRID', (0, 0), (3, 1), 0.5, colors.black)] |
||||
|
colunas = [4 * inch, 12 * inch, 4 * inch] |
||||
|
linhas = [20, 30] |
||||
|
table = Table(data, style=estilo, colWidths=colunas, rowHeights=linhas) |
||||
|
return table |
||||
|
|
||||
|
def _field(self, label, value): |
||||
|
estilo = ParagraphStyle('default') |
||||
|
return Paragraph( |
||||
|
'<font size="8">' + label + '</font>' + '<br />' + value, estilo) |
||||
|
|
||||
|
def _segundo_cabecalho(self): |
||||
|
data = [ |
||||
|
[self._field('Natureza da operação', 'Venda de produção do estabelecimento'), '', |
||||
|
self._field('Protocolo de autorização de uso', '12345678956665487')], |
||||
|
[self._field('Inscrição estadual', '156466487897'), |
||||
|
self._field('Inscrição estadual substituto tributário', '1456465456'), |
||||
|
self._field('CNPJ', '87.224.633/0001-61'), ] |
||||
|
] |
||||
|
|
||||
|
estilo = [('SPAN', (0, 0), (1, 0)), |
||||
|
('FONTSIZE', (0, 0), (1, 1), 7.0), |
||||
|
('GRID', (0, 0), (2, 1), 0.5, colors.black)] |
||||
|
colunas = [6 * inch, 7 * inch, 7 * inch] |
||||
|
table = Table(data, style=estilo, colWidths=colunas) |
||||
|
return table |
||||
|
|
||||
|
def gerar(self): |
||||
|
doc = SimpleDocTemplate( |
||||
|
'/tmp/' + uuid4().hex, |
||||
|
pagesize=A4, leftMargin=0.5 * inch, rightMargin=0.5 * inch, |
||||
|
topMargin=0.5 * inch, bottomMargin=0.5 * inch) |
||||
|
|
||||
|
elementos = [] |
||||
|
|
||||
|
elementos.append(self._header()) |
||||
|
elementos.append(self._segundo_cabecalho()) |
||||
|
|
||||
|
doc.build(elementos) |
||||
@ -0,0 +1,11 @@ |
|||||
|
# coding=utf-8 |
||||
|
|
||||
|
import unittest |
||||
|
from pytrustnfe.pdf import Danfe |
||||
|
|
||||
|
|
||||
|
class test_danfe(unittest.TestCase): |
||||
|
|
||||
|
def test_generate_danfe(self): |
||||
|
danfe = Danfe(None) |
||||
|
danfe.gerar() |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue