2009-02-01 5 views
40

Ich habe zwei PDF-oder Postscript-Dateien (ich kann mit beiden). Was ich tun möchte, ist, jede Seite übereinander zu verschmelzen, so dass Seite 1 von Dokument A mit Seite 1 von Dokument B kombiniert wird, um Seite 1 des Ausgabedokuments zu erzeugen. Dies ist nicht etwas, das ich unbedingt programmatisch machen möchte, obwohl das hilfreich wäre.Overlay eine pdf oder PS-Datei über eine andere

Irgendwelche Ideen?

+0

Eine ähnliche Frage (http://stackoverflow.com/questions/310441/create-two-pdfs-from-one-ps-file) hier auf Stackoverflow und warum das schwierig ist. –

+1

das ist nicht wirklich auf dieses Problem bezogen. OP sagt, sie können direkt mit PDFs arbeiten. Es ist sowieso nicht schwierig. – danio

Antwort

60

Sie können dies mit PDF-Dateien mit dem Befehlszeilenprogramm pdftk unter Verwendung der stamp oder background Option tun.

z.B.

$ pdftk file1.pdf background file2.pdf output combinedfile.pdf 

Dies funktioniert nur mit einer einseitigen Hintergrunddatei. Wenn Sie mehrere Seiten haben, können Sie stattdessen den Befehl multibackground verwenden.

+5

Danke, die Hintergrundoption funktionierte für mich :) Nur um zu klären, Datei1.pdf wird über Datei2.pdf platziert. Vielen Dank! – AkiRoss

+0

Arbeitete perfekt. Vielen Dank!!!! –

+0

pdftk unter HP-UX Itanium 11.31 ia64 kann nicht ausgeführt werden. $ (hostname):> pdftk PclConvertedToPDF.PDF Stempel sourcePDFShifted.PDF Ausgabe FinalPackList.pdf [HP ARIES32]: Kern-Datei für 32-Bit-PA-RISC Anwendung [HP ARIES32]:/usr/local/bin/pdftk gespeichert in /core.pdfk Memory fault (coredump) Irgendeine Idee, dies zu beheben? – MoG

18

Ich hatte Erfolg dieses Problem zu lösen (PDF nur und Python) mit pyPdf, speziell die mergePage Operation.

Aus der Dokumentation:

# add page 4 from input1, but first add a watermark from another pdf: 
page4 = input1.getPage(3) 
watermark = PdfFileReader(file("watermark.pdf", "rb")) 
page4.mergePage(watermark.getPage(0)) 

sollte ausreichen, um die Idee zu bekommen.

+0

watermark.mergePage (page4) Wenn Sie das Wasserzeichen hinter dem Text haben möchten. – Ale

+0

Das war, wie ich begann - ich war nicht amüsiert über die Längen, die PyPDF2 ging, um Seiten zusammenzuführen. Der Inhalt einer PDF-Seite kann ein Array sein: Stellen Sie sicher, dass es für die Seite, die Sie zuerst gerendert haben möchten, alle Content-Streams der Seite anfügen soll, die nach/zusätzlich gerendert werden sollen. Die Handhabung der "Boxen" ist eine weitere interessante Dose Würmer ... – greybeard

1

Sie könnten beide PDFs in Bilder konvertieren und übereinander überlagern.

Eine geeignete Grafikbibliothek, die Sie verwenden könnten, würde funktionieren.

Der oben genannte Wasserzeichen-Vorschlag hat auch ein großes Potenzial, solange Sie keine Probleme in Ihrer Sprache oder Grafik/PDF-Bibliothek Ihrer Wahl haben.

+2

Es ist definitiv eine mögliche Problemumgehung, aber Sie würden die skalierbare Qualität aller Vektorgrafiken in den Dateien verlieren. Ein Prozess, der die höheren Inhalte des Bildmodells beibehält, ist im Allgemeinen zu bevorzugen. –

+0

Definitiv möglich. Wenn Sie nach dem Rendern suchen, um es trotzdem zu drucken, können Sie das erste Mal, wenn die Zusammenführung abgeschlossen ist, als letzte Möglichkeit in hoher Qualität erstellen. Es sollte auch möglich sein, die Vektorelemente auf jeder Seite zu verwenden und sie stattdessen auf einer Seite zusammenzuführen. –

2

Wenn Sie nur mit Postscript arbeiten, sind die Chancen, dass die einzigen "Seitenumbrüche" der Operator "showpage" sind.
In diesem Fall können Sie einfach die Postscript-Daten vom Anfang der Datei eins auf die erste Instanz von "showpage" greifen, machen Sie das gleiche mit der anderen Datei, dann verketten Sie diese 2 Brocken von Postscript, um Ihre neue Seite zu erstellen.

Wenn die 2 Dateien nur eine Seite sind, können Sie die 2 Dateien einfach beitreten.

+0

Sie können ein ('g')' save'/'restore'-Paar um den zuerst enthaltenen" Chunk "einfügen. – greybeard

0

Ich habe das Mac OS Tool PDFClerk Pro verwendet. Ich importierte die PDF-Seiten und fügte sie dann mit der Option "Seiten zusammenfügen (gestapelt)" zusammen. Es hat mich wirklich beeindruckt.

1

PDFBox für Java unterstützt eine Overlay-Klasse, die PDF-Dateien auf diese Weise einmischen können. Siehe diese Antwort: Watermarking with PDFBox

Beide PyPDF2 und PDFbox waren jedoch in meiner Erfahrung unzuverlässig, aber vielleicht ist dies für jemanden hilfreich.