pmaupin / pdfrw

pdfrw is a pure Python library that reads and writes PDFs
Other
1.84k stars 271 forks source link

PageMerge with canvas :: Links are not working #238

Open epdxb opened 1 year ago

epdxb commented 1 year ago

When we use PageMerge with canvas, links are not working in output pdf. You can use the attached file and below code to reproduce it. Am I missing some thing here?

link_file.pdf

from pdfrw import PdfReader, PageMerge
from pdfrw.buildxobj import pagexobj
from reportlab.pdfgen import canvas
from pdfrw.toreportlab import makerl
from io import BytesIO
import io
import base64
input_pdf = PdfReader('link_file.pdf')

def conevrt_using_canvas(input_pdf):
    packet = io.BytesIO()
    can = canvas.Canvas(packet) 
    for page_num, page in enumerate(input_pdf.pages, start=0):           
        page = pagexobj(PageMerge().add(input_pdf.pages[page_num]).render())
        width = float(page.BBox[2])
        height = float(page.BBox[3])        
        can.setPageSize((page.BBox[2], page.BBox[3]))
        can.doForm(makerl(can, page))
        can.drawString(70, 750, 'Using Canvas')
        can.showPage()
        can.save()
        rendered_file = base64.b64encode(packet.getvalue())        
        with open('output_link_file.pdf', 'wb') as f:
            decodedData = base64.b64decode((rendered_file))
            f.write(decodedData)

conevrt_using_canvas(input_pdf)