2017-05-04 2 views
1

Mit dem folgenden Code versuche ich, eine PDF-Seite in ein vorhandenes Canvas-Objekt zu importieren und als PDF zu speichern. Dies funktioniert in der Regel gut, aber ich habe festgestellt, dass wenn ich es mit einer PDF-Datei aus einem gescannten Dokument versucht, es zu einer leeren Seite führt. Irgendwelche Abnehmer?ReportLab und pdfrw: Importieren von gescanntem PDF

from reportlab.pdfgen import canvas 
from pdfrw import PdfReader 
from pdfrw.buildxobj import pagexobj 
from pdfrw.toreportlab import makerl 

c = canvas.Canvas(Out_Folder+pdf_file_name) 
c.setPageSize([11*inch, 8.5*inch]) 

page = PdfReader(folder+'2_VisionMissionValues.pdf',decompress=False).pages 
p = pagexobj(page[0]) 
c.setPageSize([11*inch, 8.5*inch]) #Set page size (for landscape) 
c.doForm(makerl(c, p)) 
c.showPage() 
c.save() 

Vielen Dank im Voraus!

+0

Zwei Fragen: 1) verwenden Sie 0,3 oder haben Sie die neuesten von Github installiert; und 2) kannst du mir ein PDF schicken, das nicht funktioniert? –

+0

Ich benutze 3.4.0. Kann ich das PDF direkt senden? Nicht sicher, wie via S.O. –

+0

Ich meinte die pdfrw-Version, nicht die Python-Version. Was das Senden eines Beispiels betrifft, ist meine E-Mail-Adresse bei github ... –

Antwort

1

Sooo ...

Auf der einen Seite, ich habe absolut keine Ahnung, warum dies geschieht, und nicht wirklich viel Zeit, es jetzt zu debuggen.

Auf der anderen Seite, ich habe eine Lösung für Sie (und ich versuchte, die Abhilfe auf v0.3, sowie auf den aktuellen Github Meister, und es in beiden Fällen für mich gearbeitet).

Ich begann mit der Überprüfung, dass Ihr Code auf Ihrer Seite fehlgeschlagen ist und dass es auf einem anderen PDF funktionierte. Dann habe ich mich gefragt: "Was passiert, wenn ich mein Wasserzeichen-Beispiel mit verwende, um ein PDF mit Ihrer Seite als Wasserzeichen zu erstellen?" (weil das den gleichen Form XObject-Code verwendet). Das hat funktioniert, Also habe ich mich gefragt "Wie sieht es aus, wenn ich meine Wasserzeichen-Seite durch deinen Reportlab-Code gebe?"

Interessanterweise hat die gesamte mit Wasserzeichen versehene Seite, einschließlich Ihres Bildes es durch gemacht. Also änderte ich Ihren Code, um die minimalen Sachen zu machen, die das Wasserzeichen tut, die ein Formular XObject innerhalb eines Form XObject setzen, wenn es an reportlab übergeben wird. Das hat funktioniert.

Hier ist eine leicht modifizierte Version Ihres Codes, die ich dafür verwendet habe.

import sys 

from reportlab.pdfgen import canvas 
from pdfrw import PdfReader, PageMerge 
from pdfrw.buildxobj import pagexobj 
from pdfrw.toreportlab import makerl 

inch = 72 

fname, = sys.argv[1:] 
page = PdfReader(fname,decompress=False).pages[0] 
p = pagexobj(PageMerge().add(page).render()) 

c = canvas.Canvas('outstuff.pdf') 
c.setPageSize([8.5*inch, 11.0*inch]) #Set page size (for portrait) 
c.doForm(makerl(c, p)) 
c.showPage() 
c.save() 
Verwandte Themen