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