From 8e4cd58ae3cbe3b7e6e72257fb822b36e8f8499b Mon Sep 17 00:00:00 2001 From: Gomes Date: Mon, 25 Mar 2024 11:53:28 -0300 Subject: [PATCH 1/3] Recebimento dos dados de json Ajuste do programa para receber os dados a partir de um arquivo json --- formpdf.py | 43 +++++++++++++++++++++++++++++++++---------- receituario_1.pdf | Bin 210533 -> 210551 bytes teste.json | 25 +++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 teste.json diff --git a/formpdf.py b/formpdf.py index 283b1fe..68013e0 100644 --- a/formpdf.py +++ b/formpdf.py @@ -1,43 +1,66 @@ from fpdf import FPDF from fpdf.enums import XPos, YPos +import datetime +import json class PDF(FPDF): + #Conversão dos meses para extenso + meses = {'01': 'Janeiro', '02': 'Fevereiro', '03': 'Março', + '04': 'Abril', '05': 'Maio', '06': 'Junho', + '07': 'Julho', '08': 'Agosto', '09': 'Setembro', + '10': 'Outubro', '11': 'Novembro', '12': 'Dezembro'} + + def __init__(self, dados): + super().__init__('P', 'mm', 'A5') + self.dados = dados + + #Printa as informações do médico e paciente def header(self): self.image('oxemed.png', 10, 8, 60) self.set_y(14) self.set_font('helvetica', 'B', 12) - self.cell(0, 0, f'Dr. Fulano de Tal', align='R') + self.cell(0, 0, self.dados["medico"]["nome"], align='R') self.set_y(19) self.set_font('helvetica', '', 10) - self.cell(0, 0, 'CRM 00000', align='R') + self.cell(0, 0, self.dados["medico"]["crm"], align='R') self.ln(20) self.set_font('helvetica', 'B', 14) - self.cell(0,0, f'Fabril Doenço da Silva', align='C') + self.cell(0,0, self.dados["paciente"], align='C') self.ln(15) + + #Printa os itens presentes no receituário + def adicionar_receituario(self): + self.set_font('courier', '', 14) + for item in self.dados["receituario"]: + self.multi_cell(0, 5, f'{item}\n', new_x=XPos.LMARGIN, new_y=YPos.NEXT) + #Printa a data de emissão do receituário e a imagem do OxeMed def footer(self): self.image('oxemed_bg.png', -8, 78, 165) + data = datetime.datetime.now() + formatData = f'{data.strftime('%d')} de {self.meses[data.strftime('%m')]} de {data.strftime('%Y')}' + self.set_y(-15) self.set_x(-30) self.set_font('helvetica', '', 10) - self.cell(0, 0, '26 de dezembro de 2024', align='R') + self.cell(0, 0, formatData, align='R') -# Formulário em modo retrato, medido em milímetros, no tamanho de folha A5 -form = PDF('P', 'mm', 'A5') -form.set_auto_page_break(auto=True, margin = 35) +with open('teste.json', 'r', encoding='utf-8') as json_file: + dados = json.load(json_file) +# Formulário em modo retrato, medido em milímetros, no tamanho de folha A5 +form = PDF(dados) +form.set_auto_page_break(auto=True, margin = 35) form.add_page() form.set_font('courier', '', 14) -for i in range(1, 20): - form.multi_cell(0, 0, '- Dipirona 50g depois de toda refeição\n', new_x=XPos.LMARGIN, new_y=YPos.NEXT) - form.ln(2) +form.adicionar_receituario() form.output('receituario_1.pdf') \ No newline at end of file diff --git a/receituario_1.pdf b/receituario_1.pdf index 2d765fd3b14e814cb6c7df18244b06e36922de4b..3f8b1b2b810f44b805c9c1f1685dc5d9c748dbb4 100644 GIT binary patch delta 1067 zcmaF*hUfbmo(&C*^%h)qc3j0JMX8CoTorScPC4%?~(^aw0>ziDU_1{eG{u!j;btWVK!&2GxCR&kg#ZHEcVjtJ%7z#}DpS|UD zM0v*LXEJZ+KYsl)NU?^=;MinQ3*i&5Sa$rXj1B22Rqu4YIZvglFhwaxW9tmf!kKma zf0yleTh^{L@5Ac*Hp_*(etH->2_^6b*M#mruxS7L_C4MOHPK!>&i{QJanerw(S^Gu ze;?-8vD*qooNQHo`1^9*i5q3F>*}X&yPG$E;hw#&hqOf94#dh`daT}(sk3sWbAnDAv z+PLl$cj%{Njat3U_PU(4+g0q&?r?K|m8i7yx?-@o-<47+zRQyW!hWm$;4hhO)5|sa z7t`T-OJmeXnCR$t*g(MbyY12VLyLl|kCnaAo#LSo%5j3#M{0pa=9LSFCRX##*&@oT zGf`YQ^7H-qGtcjst+7dRpISI;+D-@QAg-g_d0i*jtb&)=gj5}y5S-wjlo%W+mD+rB z?Xf*a4?C_~_|tvfJ_`d$)@;+(hWez=?n?I)<)ty(Bf>P2YC9kOy=t0Xe{>whPYw2r483X6hG z4znFgo$_(Qq~c4zeP*8gdbIuDKj(lNu`Bbfi#HtM6FMO$mU{d7=8n5{99^QbCqFd* zGNb)K^8=Rl2P}+0%(VRh3v;zTuc@J-iJ7rkl%b)ziP`iF6Xxc63nK*s5Kzcd-~uxY z3@i;T(ZvjnEKD%Oj4jMC#7r!VF~m&GEzrd*3=JUW#Um^>G%>bBx7g6c(iqKRLo-Vw zOLJ5MjSMU;Obsx^EG>DMLZuISK72;G8 zbI=pW=xVyOjJICsdg{gO2Q6V)3E{W7y#t>~+h^Ys-Z4|)7LT2J^n;!WHUW2zEl?Kd z&pLRlSz=z8!S1vf+Y8KhY9vfE-k=~T;=M!bm%k7TZ{yY;MTdN$J-p*@5XlE>0jM|{cf!rH%p3cin_vZ%w5+?fdtqI%6!C**qgimFeDJo~!r-K|p2Y4aAh_(t#l=5_Cu$D38Dq3`$I zR(>(>z{k5jT#n7|(^UmG8Dw}X)Zb`W<;lYPB1Wk3aN-m{Re^LgKH!+9=%=<#A@=bAI-_2MxGV^HL@; zAE-CCK#7CY3BWjT-~q)!^r1!T-u^t9!mTRgq0ks;Pv1%G~ zdr!NczJK|SnFc#~+R|yS8t;RT6PcWA!(gr=QP%Srfp~&v2|_6H_`< zq%6bq@7o`IadVQCm5WZ2nJHuDQk^Csc6Cwyt%}^eH;+FRm7Dc#uTrPj|7r+KQ2 zB#o}vOaAM2*gT;`O}*U1p*CvA8vEB@7s)4ugjL`9$veF+|9tZ&miA99j6lq^{Symw zwLY(rp@or&sbQ3%g}RZ+^ePkP=6Z8W1p^RJ$W!0~GYkwY4b9NS42{e%#f;4?Fw~it znPP~Uni-&rSr}MA%!@}@Y-nO^VTh*C&;-LVhGv#V=#Dlru(U8XLe&ctvotrIe%qAU zHs098)WpEV+|k9w&C=D-(8b);z|_&g$jHUj#l+db)Wpt)po&;Xf=etasVGWK<1#Wd PFfcafQdM>JcjE#8gW8h} diff --git a/teste.json b/teste.json new file mode 100644 index 0000000..dad5649 --- /dev/null +++ b/teste.json @@ -0,0 +1,25 @@ +{ + "medico": { + "nome": "Dr. Fulano de Tal", + "crm": "CRM 12345" + }, + "paciente": "Fabril Doenço da Silva", + "receituario": [ + "- Dipirona 50g depois de toda refeição", + "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 8 horas", + "- ..." + ] + } + \ No newline at end of file From 9fc0fb3d4becb13f906111c727f7a64a5ce7383b Mon Sep 17 00:00:00 2001 From: Gomes Date: Mon, 25 Mar 2024 12:05:04 -0300 Subject: [PATCH 2/3] Update formpdf.py --- formpdf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/formpdf.py b/formpdf.py index 68013e0..de96462 100644 --- a/formpdf.py +++ b/formpdf.py @@ -50,7 +50,7 @@ def footer(self): self.set_font('helvetica', '', 10) self.cell(0, 0, formatData, align='R') - +# Inicializa o json (neste caso, do arquivo teste.json) with open('teste.json', 'r', encoding='utf-8') as json_file: dados = json.load(json_file) From 9ab47a80bdb42e2bc15f8583a2dba2fb95d3e966 Mon Sep 17 00:00:00 2001 From: Gomes Date: Mon, 25 Mar 2024 18:52:08 -0300 Subject: [PATCH 3/3] =?UTF-8?q?Integra=C3=A7=C3=A3o=20com=20Flask?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flaskpdf.py | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++ teste.json | 2 +- 2 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 flaskpdf.py diff --git a/flaskpdf.py b/flaskpdf.py new file mode 100644 index 0000000..615072e --- /dev/null +++ b/flaskpdf.py @@ -0,0 +1,101 @@ +from flask import Flask, render_template, request, send_file +from fpdf import FPDF +from datetime import datetime + +app = Flask(__name__) + +class PDF(FPDF): + #Conversão dos meses para extenso + meses = {'01': 'Janeiro', '02': 'Fevereiro', '03': 'Março', + '04': 'Abril', '05': 'Maio', '06': 'Junho', + '07': 'Julho', '08': 'Agosto', '09': 'Setembro', + '10': 'Outubro', '11': 'Novembro', '12': 'Dezembro'} + + def __init__(self, dados): + super().__init__('P', 'mm', 'A5') + self.dados = dados + + #Printa as informações do médico e paciente + def header(self): + self.image('oxemed.png', 10, 8, 60) + + self.set_y(14) + self.set_font('helvetica', 'B', 12) + self.cell(0, 0, self.dados["medico"]["nome"], align='R') + + self.set_y(19) + self.set_font('helvetica', '', 10) + self.cell(0, 0, self.dados["medico"]["crm"], align='R') + + self.ln(20) + + self.set_font('helvetica', 'B', 14) + self.cell(0,0, self.dados["paciente"], align='C') + self.ln(15) + + #Printa os itens presentes no receituário + def adicionar_receituario(self): + self.set_font('courier', '', 14) + for item in self.dados["receituario"]: + self.multi_cell(0, 5, f'{item}\n', new_x=XPos.LMARGIN, new_y=YPos.NEXT) + + #Printa a data de emissão do receituário e a imagem do OxeMed + def footer(self): + self.image('oxemed_bg.png', -8, 78, 165) + + data = datetime.now() + formatData = f'{data.strftime('%d')} de {self.meses[data.strftime('%m')]} de {data.strftime('%Y')}' + + self.set_y(-15) + self.set_x(-30) + self.set_font('helvetica', '', 10) + self.cell(0, 0, formatData, align='R') + +@app.route('/receituario', methods=['GET', 'POST']) +def gerar_pdf(): + if request.method == 'POST': + # Obter os dados do formulário + data = request.get_json() + + # nome_medico = data['medico']['nome'] + # crm_medico = data['medico']['crm'] + # nome_paciente = data['paciente'] + # receituario = data['receituario'].split('\n') + + # Criar PDF com os dados + form = PDF(data) + form.set_auto_page_break(auto=True, margin=35) + form.add_page() + + form.set_font('courier', '', 14) + + form.adicionar_receituario() + + # # Adicionar informações do médico + # form.set_font('Arial', 'B', 12) + # form.cell(0, 10, nome_medico, ln=True, align='C') + # form.cell(0, 10, crm_medico, ln=True, align='C') + # form.ln(20) + + # # Adicionar nome do paciente + # form.set_font('Arial', 'B', 14) + # form.cell(0, 10, nome_paciente, ln=True, align='C') + # form.ln(15) + + # # Adicionar conteúdo do receituário + # form.set_font('Arial', '', 12) + # for item in receituario: + # form.multi_cell(0, 10, item, align='L') + + # Salvar PDF temporariamente + # pdf_temp = 'temp.pdf' + # form.output(pdf_temp) + + # Enviar o arquivo PDF como resposta + #return send_file(pdf_temp, as_attachment=True, attachment_filename='receituario_1.pdf') + return send_file(form.output(), as_attachment=True, attachment_filename='receituario_1.pdf') + #form.output('receituario_1.pdf') + #return render_template('formulario.html') + +if __name__ == '__main__': + app.run(debug=True) \ No newline at end of file diff --git a/teste.json b/teste.json index dad5649..91530fa 100644 --- a/teste.json +++ b/teste.json @@ -6,7 +6,7 @@ "paciente": "Fabril Doenço da Silva", "receituario": [ "- Dipirona 50g depois de toda refeição", - "- Outro medicamento 20mg a cada 8 horas", + "- Outro medicamento 20mg a cada 7 horas", "- Outro medicamento 20mg a cada 8 horas", "- Outro medicamento 20mg a cada 8 horas", "- Outro medicamento 20mg a cada 8 horas",