Frage

Ich habe mich gefragt, ob jemand Erfahrung hatte programmatisch mit PDF-Dateien zu arbeiten. Ich habe eine PDF-Datei, und ich muß jede Seite zuzuschneiden bis zu einer bestimmten Größe.

Nach einer schnellen Google-Suche fand ich die pyPdf Bibliothek für Python, aber meine Experimente mit ihm versagt. Wenn änderte ich den CropBox und Trimbox Attribute auf einer Seite Objekt wurden die Ergebnisse nicht, was ich erwartet hatte, und schien ganz zufällig zu sein.

Hat jemand Erfahrung mit diesem hatte? Codebeispiele würden in Python gut geschätzt, bevorzugt werden.

War es hilfreich?

Lösung

pypdf tut, was ich in diesem Bereich erwarten. Verwenden Sie das folgende Skript:

#!/usr/bin/python
#

from pyPdf import PdfFileWriter, PdfFileReader

with open("in.pdf", "rb") as in_f:
    input1 = PdfFileReader(in_f)
    output = PdfFileWriter()

    numPages = input1.getNumPages()
    print "document has %s pages." % numPages

    for i in range(numPages):
        page = input1.getPage(i)
        print page.mediaBox.getUpperRight_x(), page.mediaBox.getUpperRight_y()
        page.trimBox.lowerLeft = (25, 25)
        page.trimBox.upperRight = (225, 225)
        page.cropBox.lowerLeft = (50, 50)
        page.cropBox.upperRight = (200, 200)
        output.addPage(page)

    with open("out.pdf", "wb") as out_f:
        output.write(out_f)

Das resultierende Dokument hat eine Trimm-Box, die 200x200 Punkte und beginnt bei 25,25 Punkten in der Media-Box. Die Ernte Feld ist 25 Punkte in der Trimmbox.

Hier ist, wie mein Beispieldokument in Acrobat nach der Verarbeitung mit dem obigen Code professionell aussieht: crop Seiten Screenshot

Dieses Dokument wird leer angezeigt, wenn in Acrobat Reader geladen.

Andere Tipps

Hier können Sie die Dimension von pdf erhalten

from PyPDF2 import PdfFileWriter,PdfFileReader,PdfFileMerger

pdf_file = PdfFileReader(open("/Users/user.name/Downloads/sample.pdf","rb"))
page = pdf_file.getPage(0)
print(page.cropBox.getLowerLeft())
print(page.cropBox.getLowerRight())
print(page.cropBox.getUpperLeft())
print(page.cropBox.getUpperRight())

Nach dieser Seite Verweis erhalten und dann Ernte Befehl anwenden

page.mediaBox.lowerRight = (lower_right_new_x_coordinate, lower_right_new_y_coordinate)
page.mediaBox.lowerLeft = (lower_left_new_x_coordinate, lower_left_new_y_coordinate)
page.mediaBox.upperRight = (upper_right_new_x_coordinate, upper_right_new_y_coordinate)
page.mediaBox.upperLeft = (upper_left_new_x_coordinate, upper_left_new_y_coordinate)

#for example :- my custom coordinates 
#page.mediaBox.lowerRight = (611, 500)
#page.mediaBox.lowerLeft = (0, 500)
#page.mediaBox.upperRight = (611, 700)
#page.mediaBox.upperLeft = (0, 700)

Sie suchen wahrscheinlich für eine kostenlose Lösung, aber wenn Sie Geld ausgeben, PDFlib ist eine fabelhafte Bibliothek. Es hat mich nie enttäuscht.

Sie können die PDF in Postscript (pstopdf oder ps2pdf) umwandeln und als Verwendung Textverarbeitung auf der Postscript-Datei. Danach können Sie die Ausgabe zurück in PDF umwandeln kann.

Das funktioniert gut, wenn die PDF-Dateien Sie bearbeiten wollen, dass alle von der gleichen Anwendung generiert werden und sind ein wenig ähnlich. Wenn sie aus verschiedenen Quellen kommen, ist es in der Regel schwer, die Postscript-Dateien zu verarbeiten - die Struktur zu viel variiert. Aber selbst, als Sie migt die Lage sein, Seitengrößen und dergleichen mit einem paar regulären Ausdrücke zu beheben.

Acrobat Javascript API hat eine setPageBoxes Methode, aber Adobe bietet keine Python Code-Beispiele. Nur C ++, C # und VB.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top