Search code examples
pythonimagepdfreportlabpypdf

Text rotated when merging pdf pages using Pypdf2 and Reportlab


I'm trying to merge two pages one from reportlab that has the text I wish and another one is my source pdf

But when I merge those two pages, my text is rotated 90 degree

Pdf created using Report lab -> Overlay Created using Reportlab

when Merged with Source pdf -> Source Pdf

Code that I have Used :

from PyPDF2 import PdfFileWriter, PdfFileReader
import io
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch

packet = io.BytesIO()
c = canvas.Canvas(packet)
c.drawString(0,0,"Hello World")
c.save()
packet.seek(0)

packet_pdf = PdfFileReader(packet)
input_pdf = PdfFileReader(open("Source.pdf", "rb"))

output = PdfFileWriter()
page = input_pdf.getPage(0)
page.mergePage(packet_pdf.getPage(0))
output.addPage(page)

outputStream = open("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()

reference : Add text to Existing PDF using Python


Solution

  • Refered to this and created an own solution -> Python PyPDF2 merge rotated pages

    from PyPDF2 import PdfFileWriter, PdfFileReader
    import io
    from reportlab.pdfgen.canvas import Canvas
    
    page_to_merge = 0 #Refers to the First page of PDF 
    xcoor = 250 #To be changed according to your pdf
    ycoor = 650 #To be changed according to your pdf
    
    input_pdf = PdfFileReader(open("Source.pdf", "rb"))
    page_count = input_pdf.getNumPages()
    inputpdf_page_to_be_merged = input_pdf.getPage(page_to_merge)
    
    packet = io.BytesIO()
    c = Canvas(packet,pagesize=(inputpdf_page_to_be_merged.mediaBox.getWidth(),inputpdf_page_to_be_merged.mediaBox.getHeight()))
    c.drawString(xcoor,ycoor,"Hello World")
    c.save()
    packet.seek(0)
    
    overlay_pdf = PdfFileReader(packet)
    overlay = overlay_pdf.getPage(0)
    
    output = PdfFileWriter()
    
    for PAGE in range(page_count):
        if PAGE == page_to_merge:
            inputpdf_page_to_be_merged.mergeRotatedTranslatedPage(overlay, 
                    inputpdf_page_to_be_merged.get('/Rotate') or 0, 
                    overlay.mediaBox.getWidth()/2, overlay.mediaBox.getWidth()/2)
            output.addPage(inputpdf_page_to_be_merged)
        
        else:
            Page_in_pdf = input_pdf.getPage(PAGE)
            output.addPage(Page_in_pdf)
    
    outputStream = open("destination.pdf", "wb")
    output.write(outputStream)
    outputStream.close()