2009-02-01 8 views
40

Mam dwa pliki pdf lub postscript (mogę pracować z jednym). Co chcę zrobić, to połączyć każdą stronę na drugiej, aby strona 1 dokumentu A została połączona ze stroną 1 dokumentu B w celu utworzenia strony 1 dokumentu wyjściowego. Nie jest to coś, co koniecznie chcę robić programowo, chociaż byłoby to pomocne.nakładka jeden plik pdf lub ps na inny

Wszelkie pomysły?

+0

Zobacz [podobne pytanie] (http://stackoverflow.com/questions/310441/create-two-pdfs-from-one-ps-file) tutaj na Stackoverflow i dlaczego jest to trudne. –

+1

, który nie jest tak naprawdę związany z tym problemem. OP mówi, że mogą pracować bezpośrednio z plikami PDF. To i tak nie jest trudne. – danio

Odpowiedz

60

Możesz to zrobić za pomocą plików PDF za pomocą narzędzia wiersza poleceń pdftk, używając opcji stamp lub background.

np.

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

Działa to tylko z jednostronicowym plikiem tła. Jeśli masz wiele stron, możesz zamiast tego użyć komendy multibackground.

+5

Dzięki, opcja tła działała dla mnie :) Aby wyjaśnić, plik1.pdf znajduje się powyżej file2.pdf. Dzięki! – AkiRoss

+0

Działa doskonale. Wielkie dzięki!!!! –

+0

pdftk na HP-UX Itanium 11.31 ia64 nie działa. $ (hostname):> pdftk znaczek PclConvertedToPDF.PDF wyjście sourcePDFShifted.PDF FinalPackList.pdf [KM ARIES32]: plik core dla 32-bitowych aplikacji PA-RISC [KM ARIES32]:/usr/local/bin/pdftk zapisano w /core.pdftk Błąd pamięci (coredump) Czy istnieje jakiś pomysł na rozwiązanie tego problemu? – MoG

18

Miałem powodzenie w rozwiązaniu tego problemu (tylko w formacie PDF i Python) za pomocą operacji pyPdf, w szczególności operacji z funkcją MergePage.

Od docs:

# 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)) 

powinno wystarczyć, aby dostać się pomysł.

+0

watermark.mergePage (strona 4), jeśli chcesz znak wodny za tekstem. – Ale

+0

Tak to się zaczęło - nie bawiło mnie to, że PyPDF2 poszedł po to, by scalić strony. Zawartość strony PDF może być tablicą: upewnij się, że jest to strona, którą chcesz wyrenderować jako pierwszą, dołącz wszystkie strumienie treści strony, która ma być renderowana po/nad nią. Obsługa "pudełek" to kolejna interesująca puszka robaków ... – greybeard

1

Można przekonwertować oba pliki PDF na obrazy i umieścić jeden na drugim.

Odpowiednia biblioteka graficzna, której można użyć, będzie działać.

Powyższa sugestia znaku wodnego ma również duży potencjał, o ile nie napotkasz problemów w wybranym języku lub bibliotece graficznej/pdf.

+2

Jest to zdecydowanie możliwe rozwiązanie, ale stracisz skalowalną jakość dowolnej grafiki wektorowej w plikach. Proces, który utrzymuje zawartość wyższego poziomu w modelu obrazu, powinien być preferowany. –

+0

Zdecydowanie możliwe. Jeśli mimo wszystko chcesz renderować do druku, po raz pierwszy scalanie będzie można wykonać w najwyższej jakości w ostateczności. Powinien również istnieć sposób na pobranie elementów wektorowych z każdej strony, a zamiast tego połączenie ich na jednej stronie. –

2

Jeśli masz do czynienia tylko z dopiskiem, najprawdopodobniej jedynymi "odsłonami" są operatorzy "showpage".
W takim przypadku możesz po prostu pobrać dane postscriptowe od początku pliku jeden do pierwszego wystąpienia "showpage", zrób to samo z innym plikiem, a następnie połączyć te dwa fragmenty postscriptu, aby utworzyć nową stronę.

Jeśli 2 pliki to tylko jedna strona, możesz po prostu dołączyć do 2 plików.

+0

Możesz chcieć rzucić parę ('g')' save'/'restore'-pair wokół" porcji "zawartej w pierwszej kolejności. – greybeard

0

Użyłem narzędzia Mac OS PDFClerk Pro. Zaimportowałem strony PDF, a następnie scalono je z opcją "Scal strony (ułożone)". To naprawdę zrobiło na mnie wrażenie.

1

PDFBox Java obsługuje klasę nakładkę, która pozwala scalić pliki PDF w ten sposób. Zobacz tę odpowiedź: Watermarking with PDFBox

Jednak zarówno PyPDF2, jak i PDFbox nie były wiarygodne w moim odczuciu, ale być może jest to pomocne dla kogoś.

Powiązane problemy