Как объединить несколько файлов PDF?

В Windows много программного обеспечения для слияния PDF-файлов, но как мы можем сделать то же самое в Ubuntu?

1
задан 8 October 2014 в 06:04

11 ответов

pdftk

Чтобы слить два файла PDF, file1.pdf и file2.pdf:

pdftk file1.pdf file2.pdf cat output mergedfile.pdf

Доступна дополнительная информация pdftk Way Back Machine.

261
ответ дан 29 May 2018 в 12:42
  • 1
    pdftk is buggy - bugs.launchpad.net/ubuntu/+source/pdftk/+bug/779908 . gs может быть медленным, но отлично работает [ответ от IgnitE] – Pushpak Dagade 3 April 2013 в 16:05
  • 2
    Благодаря! Pdftk делает простое, базовое слияние довольно хорошо. Более чем достаточно для моих нужд. YMMV. – Marky 27 June 2014 в 14:57
  • 3
    @PushpakDagade ghostscript испортит аннотации, особенно комментарии, которые были отмечены (флажок с галочкой), больше не будет иметь эту галочку. Я не знаю об этом. Кроме того, если вы объедините PDF v1.5 + 1.6, по умолчанию будет 1,4. Это странное поведение. – Jonathan Komar 19 May 2016 в 17:12
  • 4
    Это прекрасно. Работает отлично на 14.04.5 LTS, и мы можем объединить PDF-файлы с разными размерами страниц. Производит файлы высокого качества и низкого размера. Спасибо! – Geppettvs D'Constanzo 3 September 2017 в 23:22
  • 5
    pdftk имеет необычное использование, когда команды cat и output следуют переменным входным аргументам и снова следуют выходным аргументом. – Jeff Puckett 7 November 2017 в 07:47

Ghostscript - это пакет (доступный по умолчанию в Ubuntu), который позволяет просматривать или печатать файлы PostScript и PDF в других форматах или конвертировать эти файлы в другие форматы. Чтобы использовать Ghostscript для объединения файлов PDF, введите что-то вроде следующего:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=finished.pdf file1.pdf file2.pdf

Вот краткое описание команды:

gs         starts the Ghostscript program.
-dBATCH    once Ghostscript processes the PDF files, it should exit.
           If you don't include this option, Ghostscript will just keep running.
-dNOPAUSE  forces Ghostscript to process each page without pausing for user interaction.
-q         stops Ghostscript from displaying messages while it works
-sDEVICE=pdfwrite 
           tells Ghostscript to use its built-in PDF writer to process the files.
-sOutputFile=finished.pdf
           tells Ghostscript to save the combined PDF file with the specified name.

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

С Ghostscript можно многое сделать. Вы можете прочитать его документацию для более подробной информации.

Источник

119
ответ дан 29 May 2018 в 12:42
  • 1
    Правда, но невероятно медленно. Я просто попытался объединить 45 x 400K, одностраничные PDF-файлы. pdftk занял 0m0.484s, gs занял 1m32.898s (это почти на 200x медленнее). Файл из gs был примерно на 21% меньше. – aidan 22 March 2013 в 12:47
  • 2
    эта команда также работает, если вы используете подстановочный знак для списка файлов, которые нужно объединить. например, замените file1.pdf file2.pdf на file*.pdf – Antonios Hadjigeorgalis 29 May 2014 в 18:58
  • 3
    Для меня gs работал с некоторыми "несоответствующими" PDF-файлы, в которых pdftk будут запускаться вечно. – ntc2 9 December 2014 в 08:37
  • 4
    Это отлично работало для моей потребности! – dsh 23 January 2015 в 06:23
  • 5
    @AntoniosHadjigeorgalis Просто для справки и хорошего понимания: это не команда поддержки подстановочных знаков, это на самом деле оболочка, заменяющая file*.pdf на file1.pdf file2.pdf перед передачей аргументов команде. – Midgard 15 June 2016 в 13:15

Вы также можете использовать pdfunite для объединения PDF-документов:

pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf
48
ответ дан 29 May 2018 в 12:42
  • 1
    ПРЕДУПРЕЖДЕНИЕ: существующий файл out.pdf будет перезаписан без предупреждения, поэтому pdfunite *.pdf не будет работать должным образом. – krlmlr 4 December 2014 в 19:02
  • 2
    @krlmlr Вы всегда можете поместить вывод в другой каталог. – BЈовић 4 December 2014 в 19:05
  • 3
    Достаточно справедливо, cp также перезаписывает последний аргумент без предупреждения. Это просто для спешки пользователей (например, я) - мне повезло, что у меня была резервная копия файла, о котором идет речь ... – krlmlr 4 December 2014 в 19:08
  • 4
    Upvote: это простой инструмент командной строки без графического интерфейса с щелчком и слюни, как и многие другие ответы здесь. Он прекрасно инкапсулирует сложность (в значительной степени эквивалентного) решения GhostScript. – tripleee 13 April 2015 в 17:28
  • 5
    Это тоже очень быстро. Хорошо работает. На очень медленном сервере (aws t1.micro) gs занимает 9 секунд, pdftk занимает 4 секунды, и этот pdfunite занимает 0,9 секунды для слияния двух файлов! – rsmoorthy 15 July 2015 в 22:49

PDF Chain

Очень приятное решение - PDFChain. Это графический интерфейс - это интерфейс PDFTK, в котором вы можете объединять, разделять или даже добавлять некоторый фон в ваши PDF-файлы.

33
ответ дан 29 May 2018 в 12:42

Дайте PDFMod попробовать, это из проекта GNOME:

https://wiki.gnome.org/Apps/PdfMod

11
ответ дан 29 May 2018 в 12:42

Я использую pdfseparate для извлечения определенных страниц из большого pdf-файла:

pdfseparate -f  156 -l 157 input.pdf  output_%d.pdf 
pdfseparate -f  1   -l 2   input.pdf  output_%d.pdf 

и после этого я присоединяюсь к ним через команду:

pdfunite $(ls -v output_*.pdf | tr '\n' ' ') out$(date  +%Y-%m-%d_%H_%M_%S ).pdf

Это объединяет: [!d2 ]

output_1.pdf output_2.pdf output_156.pdf output_157.pdf  

в:

out2014-12-14_23_25_36.pdf

Может быть, есть более простой способ справиться ...: -)

6
ответ дан 29 May 2018 в 12:42
  • 1
    Замедление процесса является излишним, а потенциально даже вредным . Правильной гораздо более простой командной строкой является pdfunite output_*.pdf out$(date +%Y-%m-%d-%H_%M_%S).pdf, но ей не хватает порядка ls -v. Очевидное и тривиальное исправление состоит в том, чтобы называть ваши файлы так, чтобы они, естественно, сортировались в том порядке, в котором вы хотите их включить. Если вы абсолютно хотите ls -v, вы можете по крайней мере потерять трубу до tr, которая ничего не выполняет здесь. – tripleee 13 April 2015 в 17:24

Вы также можете использовать jPDFTweak, pdfsam или pdfjam.

(Тем не менее, я использую pdftk.)

5
ответ дан 29 May 2018 в 12:42

Используйте pdfsam http://www.pdfsam.org/, он очень хорош для разделения и слияния PDF-файлов

5
ответ дан 29 May 2018 в 12:42

Вы можете использовать pdftk для объединения и изменения PDF-документов в целом. В качестве альтернативы есть онлайн-сервис, чтобы сделать именно это: http://www.pdfmerge.com/

3
ответ дан 29 May 2018 в 12:42

Вот мой подход:

Я хотел, чтобы он был легко доступен, поэтому я создал ярлык правой кнопки мыши в Nautilus (см. https://help.ubuntu.com/community/NautilusScriptsHowto). Я хотел это было очень быстро, поэтому я использовал pdfunite pdfunite, только принимал файловые пути в середине команды, поэтому мне пришлось почесать голову, чтобы управлять пробелами в пути к файлам. Поэтому я принял предположение, что все пути к файлам начнутся с «/ home /» и заканчиваются на «.pdf»

Вот результат:

#!/bin/sh
CLEANED_FILE_PATHS=$(echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed 's,.pdf /home/,.pdf\\n/home/,g')
echo $CLEANED_FILE_PATHS | bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" merged.pdf'

Juste вставьте этот скрипт в

/home/your_username/.local/share/nautilus/scripts

и назовите его «merge_pdfs.sh» (например). Затем сделайте его выполнимым (щелкните правой кнопкой мыши на вкладке merges_pdfs.sh -> Permissions -> отметьте «Разрешить выполнение файла как программы»

Итак, теперь для объединения файлов PDF вам просто нужно выбрать их -> right click -> scripts -> merge_pdfs.sh, и он создаст файл "merged.pdf" в том же каталоге

Надеюсь, что это поможет!

1
ответ дан 29 May 2018 в 12:42

Альтернативный подход - использовать латекс, как описано в этом сообщении (без доступа root, предполагая, что у вас установлен pdflatex): https://tex.stackexchange.com/questions/8662/merge-two-pdf-files-output -by-latex

Это полезно, если у вас нет упомянутых инструментов или привилегий root, но у вас есть pdflatex.

Я скопирую код tex ниже, чтобы объединить file1.pdf и file2.pdf. Создайте файл с именем output.tex и поместите:

\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=-]{file1}
\includepdf[pages=-]{file2}
\end{document}

И для компиляции просто используйте: pdflatex output.tex

Объединенный файл будет называться как output.pdf.

1
ответ дан 29 May 2018 в 12:42

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

Похожие вопросы: