import os
from PyPDF2 import PdfFileWriter, PdfFileReader
from reportlab.pdfgen import canvas
from reportlab.lib.enums import TA_JUSTIFY
from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
# from reportlab.lib.enums import TA_JUSTIFY
# from reportlab.lib.pagesizes import letter
from django.conf import settings
from apps.report.models import Report
def generate_signature_pdf(report_id):
report = Report.objects.get(id=report_id)
path = os.path.join(
settings.MEDIA_ROOT,
'report/{}/signatures.pdf'.format(str(report_id).zfill(5))
)
signatures = []
for re in report.reportsexperts.all():
if re.report_valid is True:
signatures.append(
os.path.join(
settings.MEDIA_ROOT,
'signatures',
'{0:05d}.jpg'.format(re.expert.id))
)
c = canvas.Canvas(path, pagesize=letter)
c.translate(cm, cm)
styles = getSampleStyleSheet()
styles.add(ParagraphStyle(name='Justify', alignment=TA_JUSTIFY))
step = 0
for signature in signatures:
c.drawImage(signature, 5*cm*step, 15*cm, 4*cm, 2.5*cm, True)
step += 1
c.showPage()
c.save()
def generate_signed_pdf(report_id, page_number=3):
report = Report.objects.get(id=report_id)
signatures_path = os.path.join(
settings.MEDIA_ROOT,
'report/{}/signatures.pdf'.format(str(report_id).zfill(5))
)
report_path = os.path.join(
settings.MEDIA_ROOT,
'{}'.format(report.report.path)
)
output_path = '{}.signed.pdf'.format(report_path)
output = PdfFileWriter()
report_pdf = PdfFileReader(open(report_path, "rb"))
signatures_pdf = PdfFileReader(open(signatures_path, "rb"))
for i in range(0, report_pdf.getNumPages()):
# Open up the orgininal PDF.
page = report_pdf.getPage(i)
# Apply the watermark by merging the two PDF files.
if i == page_number:
page.mergePage(signatures_pdf.getPage(0))
# Send the resultant PDF to the output stream.
output.addPage(page)
# write the output of our new, watermarked PDF.
outputStream = open(output_path, "wb")
output.write(outputStream)
outputStream.close()