2009-02-01 6 views
40

У меня есть два файла pdf или postscript (я могу работать с одним из них). То, что я хочу сделать, - это объединить каждую страницу поверх другой, чтобы страница 1 документа A была объединена со страницей 1 документа B для создания страницы 1 выходного документа. Это не то, что мне обязательно нужно делать программно, хотя это было бы полезно.наложить один файл pdf или ps поверх другого

Любые идеи?

+0

См. [Аналогичный вопрос] (http://stackoverflow.com/questions/310441/create-two-pdfs-from-one-ps-file) здесь, в Stackoverflow, и почему это сложно. –

+1

Это не связано с этой проблемой. OP говорит, что они могут работать напрямую с PDF-файлами. В любом случае, это не очень сложно. – danio

ответ

60

Вы можете сделать это с помощью pdf-файлов, используя инструмент командной строки pdftk, используя опцию stamp или background.

например.

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

Это будет работать только с одностраничным фоном. Если у вас несколько страниц, вы можете использовать команду multibackground.

+5

Спасибо, опция фона работала для меня :) Просто для уточнения, file1.pdf помещается над file2.pdf. Благодаря! – AkiRoss

+0

Работал отлично. Огромное спасибо!!!! –

+0

pdftk на HP-UX Itanium 11.31 ia64 не запускается. $ (имя хоста):> Pdftk PclConvertedToPDF.PDF марка выход sourcePDFShifted.PDF FinalPackList.pdf [HP ARIES32]: Ядро файл для 32-разрядной PA-RISC приложения [HP ARIES32]:/USR/местные/бен/Pdftk сохранен в /core.pdftk Ошибка памяти (coredump) Любая идея исправить это? – MoG

18

У меня был успех в решении этой проблемы (только PDF и Python) с использованием pyPdf, в частности mergePage.

Из документов:

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

Должно быть достаточно, чтобы получить представление.

+0

watermark.mergePage (стр. 4), если вам нужен водяной знак позади текста. – Ale

+0

Так я начал - меня не интересовали длины, которые PyPDF2 перешел на слияние страниц. Содержание страницы в формате PDF может быть массивом: убедитесь, что он предназначен для первой страницы, которую вы хотите отобразить, добавьте все потоки содержимого страницы, которую вы хотите отобразить после/поверх нее. Обработка «ящиков» - еще одна интересная возможность червей ... – greybeard

1

Вы можете конвертировать оба PDF-файла в изображения и накладывать один поверх другого слоя.

Подходящая графическая библиотека, которую вы могли бы использовать, будет работать.

Предложение Watermark выше имеет большой потенциал слишком долго, пока вы не сталкиваетесь с проблемами на своем языке или графикой/pdf-библиотеке по выбору.

+2

Это определенно возможное обходное решение, но вы потеряете масштабируемое качество любой векторной графики в файлах. Обычно предпочтительнее процесс, который поддерживает содержание более высокого уровня модели изображения. –

+0

Определенно возможно. Если вы хотите визуализировать в любом случае, при первом слиянии это может быть сделано с достаточно высоким качеством в качестве последнего средства. Также должен быть способ взять векторные элементы на каждой странице и вместо этого объединить их на одну страницу. –

2

Если вы имеете дело только с постскриптумом, скорее всего, единственными «pagebreaks» являются оператор «showpage».
В этом случае вы можете просто захватить данные постскриптума от начала файла до первого экземпляра 'showpage', сделать то же самое с другим файлом, а затем объединить эти 2 куска постскриптума, чтобы создать новую страницу.

Если 2 файла - это только одна страница, вы можете просто присоединиться к 2 файлам.

+0

Возможно, вы захотите вставить ('g')' save'/'restore' -пару вокруг включенного« куска ». – greybeard

0

Я использовал инструмент Mac OS PDFClerk Pro. Я импортировал страницы PDF, а затем объединил их с опцией «Слияние страниц (Stacked)». Это действительно впечатлило меня.

1

PDFbox для Java поддерживает класс Overlay, который позволяет объединить PDF файлов таким образом. См. Этот ответ: Watermarking with PDFBox

Однако, как PyPDF2, так и PDFbox были ненадежны по моему опыту, но, возможно, это кому-то помогает.

Смежные вопросы