Объединить два 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?

4 ответа

Вы можете разделить 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

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

      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:0L@.7(21cm,0)+1L@.7(21cm,14.85cm)" input.ps output.ps # put 2 pages on one
ps2pdf output.ps output.pdf # convert back to pdf

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

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

      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
. . . .

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

Да, немного поздно, но может быть полезным для кого-то еще.

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

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

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

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

Другие вопросы по тегам