Объединить два файла PDF рядом в командной строке

Объединить два файла PDF рядом в командной строке

У меня есть два файла pdf с одинаковым количеством страниц, и я хочу сравнить каждую страницу с соответствующей страницей в другом файле. Для этого я хотел бы объединить, скажем, страницу 1 из File1.pdf со страницей 1 из File2.pdf, чтобы получить одну страницу в новом документе. Затем страницу 2 из File1.pdf со страницей 2 из File2.pdf и сделать ее страницей 2 нового файла.

Вэтот вопросЯ уже узнал, что можно разместить две страницы на одной странице с помощью --nupкоманды pdfjam:

pdfjam File1.pdf File2.pdf --nup 2x1 --landscape --outfile File1+2.pdf

Того же самого можно добиться с помощью ImageMagickпакета:

montage *.pdf merged.pdf

Но это объединяет страницу 1 и страницу 2 первого файла и делает то же самое позже со вторым файлом — не так, как предполагалось.

Что я сделал, так это разделил два документа. Первый файл получил четные числа в имени файла, второй — нечетные числа (на самом деле я создал файлы заново с соответствующими именами файлов). Затем я снова объединил все файлы с помощью

pdftk *.pdf cat output merged.pdf

и наконец поместите две страницы на одну с

pdfjam --nup 2x1 --landscape --outfile merged2up.pdf merged.pdf

Я мог бы написать скрипт с циклом, делающим это, но мне было интересно, есть ли простой однострочный способ сделать это? Может быть, я не нашел нужную команду pdfjam, pdftk или ImageMagick?

решение1

Вы можете разделить File1.pdf и File2.pdf на страницы, а затем объединить эти файлы tmp в File1+2.pdf следующим образом:

# Split files, note the naming scheme
pdfseparate File1.pdf temp-%04d-file1.pdf
pdfseparate File2.pdf temp-%04d-file2.pdf

# Combine the final pdf
pdfjam temp-*-*.pdf --nup 2x1 --landscape --outfile File1+2.pdf

# Clean up
rm -f temp-*-*.pdf

решение2

Я бы использовал это:

sudo apt install psutils 
sudo apt install ghostscript

pdf2ps -sOutputFile=input1file%d.ps input1file.pdf input1file.ps # cut to individual pages
pdf2ps -sOutputFile=input2file%d.ps input2file.pdf input2file.ps
psmerge -oinput.ps *.ps # put them together page by page from the alternative files
pstops -p a4 "2:[email protected](21cm,0)[email protected](21cm,14.85cm)" input.ps output.ps # put 2 pages on one
ps2pdf output.ps output.pdf # convert back to pdf

Может быть, вы это оцените. Мне нравится, потому что он маленький и быстрый, но страницы руководства нуждаются в улучшении. :-(

решение3

(Если я правильно понимаю, что нужно автору статьи,) вот простое(r) решение

pdftk A=File1.pdf B=File2.pdf shuffle A B output tmp-Figure1+2.pdf
pdfjam tmp-Figure1+2.pdf --nup '2x1' --landscape --outfile Figure1+2.pdf
rm tmp-Figure1+2.pdf

С помощью pdftk ... shuffle A B ...вы создаете промежуточный PDF-файл, который будет выглядеть следующим образом:

File1-page1
File2-page1
File1-page2
File2-page2
. . . .

Затем с помощью pdfjamвы объединяете нечетные и четные страницы промежуточного файла:

File1-page1 File2-page1
File1-page2 File2-page2
. . . .

Я только что придумал это решение и протестировал его.

решение4

Э-э, немного поздновато, но может быть кому-то ещё пригодится.

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

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

https://duckduckgo.com/?q=pdfdiff&t=ffab&ia=software

Обратите внимание, что этот подход не так эффективен для изображений, поскольку «идентичные» изображения могут быть закодированы по-разному.

Связанный контент