Примеры команд для обработки pdf

Примеры команд для обработки pdf.

Содержание

1 Создание PDF-файла из изображений

С помощью GraphicsMagick :

$ GM Convert 1.jpg 2.jpg 3.jpg out.pdf С помощью ImageMagick :

$ Magick Convert 1.jpg 2.jpg 3.jpg out.pdf Обратите внимание, что вывод ImageMagick имеет потери. Для создания PDF-файла без потерь из JPEG используйте img2pdf .

2 Объединение PDF-файлов

С помощью Ghostscript:

$ gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=out.pdf -dBATCH 1.pdf 2.pdf 3.pdf С PDFtk:

$ pdftk 1.pdf 2.pdf 3.pdf вывод кота.pdf С Попплером:

$ pdfunite 1.pdf 2.pdf 3.pdf out.pdf С QPDF:

$ qpdf –empty –pages 1.pdf 2.pdf 3.pdf – out.pdf

3 Извлечь текст из PDF

С помощью Poppler и сохранением макета:

$ pdftotext -макет в.pdf out.txt См. также pdftotext(1) .

С калибром :

$ ebook-convert in.pdf out.txt Результаты различаются в зависимости от приложения и от PDF-файла.

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

С PDFtk:

$ pdftk in.pdf input_pw вывод пароля out.pdf С помощью Poppler в PostScript:

$ pdftops -upw пароль in.pdf out.ps С QPDF:

$ qpdf –decrypt –password= пароль in.pdf out.pdf Совет: Забытые пароли можно восстановить с помощью pdfcrack , см. pdfcrack(1) .

4 Зашифровать PDF-файл

Пароль пользователя используется для шифрования, пароль владельца — для ограничения операций после расшифровки документа. Дополнительную информацию см. в Википедии:PDF#Шифрование и подписи .

С PDFtk:

$ pdftk in.pdf вывод out.pdf user_pw пароль С ПоДоФо :

$ podofoencrypt -u пароль_пользователя -o пароль_владельца in.pdf out.pdf С QPDF:

$ qpdf –encrypt user_password владелец_пароль длина_ключа – in.pdf out.pdf где key_lengthможет быть 40, 128 или 256.

5 Извлечение изображений из PDF-файла

С помощью poppler сохранение изображений в формате JPEG:

$ pdfimages infile .pdf -j outfileroot

6 Извлечение диапазона страниц из PDF, разделение многостраничного PDF-документа

С Ghostscript в виде одного файла [6]

$ gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER -dFirstPage= первый -dLastPage= последний -sOutputFile= выходной файл .pdf входящий файл .pdf С PDFtk как одним файлом:

$ pdftk infile .pdf cat первый — последний выходной файл .pdf С Poppler в виде отдельных файлов:

$ pdfseparate -f первый -l последний infile .pdf outfileroot -%d.pdf Если QPDF представляет собой один файл:

$ qpdf –empty –pages infile .pdf первый - последний – исходящий файл .pdf С mutool в виде одного файла:

$ mutool clean -g infile .pdf исходящий файл .pdf первый - последний

7 Наложить PDF (nup)

Наложение PDF — это процесс, при котором несколько входных страниц объединяются в одну выходную страницу, расположенную в сетке строк x столбцов .

Это можно сделать с помощью pdfjam (обратите внимание, что сценарии-оболочки, такие как pdfnup и pdfbook , устарели):

$ pdfjam –nup строк x столбцов input.pdf –outfile output.pdf или с pdfsak :

$ pdfsak –input-file input.pdf –output output.pdf –nup rows columns

8 Метаданные

8.1 Проверка метаданных

С помощью ExifTool :

$ exiftool -Все файлы.pdf С Попплером:

$ pdfinfo файл.pdf Удалить метаданные Использование ExifTool С помощью ExifTool :

$ exiftool -All= -overwrite_original input.pdf $ mv input.pdf /tmp/temp.pdf $ qpdf –линеаризовать /tmp/temp.pdf input.pdf Шаг линеаризации необходим для предотвращения восстановления удаленных метаданных. См. этот вопрос SuperUser и соответствующую ветку форума ExifTool .

Использование pdftk Многие PDF-файлы хранят метаданные документа, используя как словарь Info (старая школа), так и поток XMP (новая школа). Эта команда pdftk полностью удаляет поток XMP из PDF-файла. Информационный словарь не удаляется.

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

$ pdftk input.pdf drop_xmp вывод output.pdf

8.2 Записать метаданные

8.2.1 exiftool

  • Обновить метаданные:
    1exiftool -Title="This is the Title" -Author="Author" -Subject="Subject" file.pdf
    
  • При просмотре в evince тема оказывается в поле ключевых слов метаданных файла PDF.
  • Adobe Acrobat и PDF-XChange показывают правильно.
  • pdfinfo показывает правильно.

9 Уменьшить размер pdf-файла (сжатие)

9.1 Ghostscript

  • Скрипт ps2pdf:

    1ps2pdf -dPDFSETTINGS=/screen in.pdf out.pdf
    
  • Команда gs:

    1gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -sOutputFile=out.pdf in.pdf
    
    • -sDEVICE=pdfwrite : указывает используемое устройство вывода (pdfwrite указывает, что результат будет в формате PDF);
    • -dCompatibilityLevel : устанавливает уровень совместимости для оптимизированного PDF-файла (уровень совместимости 1.4 соответствует версии PDF-1.4);
    • -dPDFSETTINGS : определяет параметры качества и сжатия оптимизированного PDF-файла (см. https://ghostscript.com/docs/9.54.0/Devices.htm):
      • /screen : 72 dpi;
      • /default : 72 dpi;
      • /ebook : 150 dpi (для просмотра на устройствах для чтения электронных книг);
      • /printer : 300 dpi (для высококачественной печати);
      • /prepress : 300 dpi;
    • -dNOPAUSE : предотвращает паузу Ghostscript между страницами;
    • -dQUIET : подавляет информационные сообщения;
    • -dBATCH : предотвращает выход Ghostscript после обработки входного файла;
    • -sOutputFile=output.pdf : указывает имя выходного файла.

10 Уменьшить размер pdf-файла (оптимизация)

10.1 qpdf

  • Команда qpdf:

    1qpdf --compress-streams=y --object-streams=generate --recompress-flate --optimize-images --linearize document.pdf qpdf_compressed.pdf
    
    • --compress-streams=y : указывает qpdf сжимать потоки контента в файле PDF. Потоки контента содержат фактические данные, такие как текст и изображения, в документе PDF;
    • --object-streams=generate : определяет обработку объектных потоков в файле PDF. Опция генерации указывает qpdf генерировать новые потоки объектов во время процесса оптимизации;
    • document.pdf : входной файл для оптимизации;
    • qpdf_compressed.pdf : выходной или оптимизированный файл.

10.2 exiftool

  • Файлы PDF могут содержать метаданные, такие как имена авторов, даты создания и другую информацию, которая может влиять на размер файла.

  • Можно удалить эти метаданные, чтобы уменьшить размер PDF-файла:

    1exiftool -all:all= document.pdf
    
    • -all:all= : указывает имя тега, который нужно изменить.

11 Растеризовать PDF-файл

Эти команды преобразуют ваш PDF-файл в изображения.

С помощью GraphicsMagick для преобразования определенной страницы в файл изображения:

$ gm Convert -density dpi входящий файл .pdf[ страница ] исходящий файл .jpg С помощью ImageMagick для преобразования определенной страницы в файл изображения:

$ Magick Convert -density dpi входящий файл .pdf[ страница ] исходящий файл .jpg

С помощью ImageMagick конвертируйте все страницы в другой PDF-файл, состоящий из файла изображения на каждой странице:

$ Magick Convert -density dpi входящий файл .pdf исходящий файл .pdf Предупреждение. Это существенно увеличит размер вашего PDF-файла. Используйте его, например, если ваш принтер не может правильно распечатать PDF-файл. С помощью Poppler для преобразования всех страниц в один файл изображения на странице:

$ pdftoppm -jpeg -r dpi infile .pdf outfileroot С помощью Poppler для преобразования определенной страницы в файл изображения:

$ pdftoppm -jpeg -r dpi -f page -singlefile infile .pdf outfileroot Разделить страницы PDF С помощью инструментов mupdf для разделения каждой страницы по вертикали на две страницы:

$ mutool плакат -y 2 in.pdf out.pdf Может использоваться для отмены простого наложения .

Добавить изображение Можно добавить изображение в любое место PDF-файла.

с ImageMagick (конвертировать), xv AUR и pdftk . ( скрипт-обертка ) с журналом AUR с LibreOffice Подробности об этих и других решениях можно найти на StackExchange .

12 Добавить цифровую подпись в PDF

jsignpdf AUR может подписывать PDF-файлы цифровой подписью с помощью сертификатов X.509 в графическом интерфейсе пользователя и интерфейсе командной строки.

Такие программы чтения, как Okular и MuPDF, могут подписывать PDF-файлы цифровыми подписями. Для этого требуется сертификат PFX, который можно создать с помощью команды OpenSSL :

$ openssl req -x509 -days 365 -newkey rsa:2048 -keyout cert.pem -out cert.pem $ openssl pkcs12 -export -in cert.pem -out cert.pfx Пользователи MuPDF могут затем подписывать PDF-файлы с cert.pfxпомощью графического интерфейса или инструмента mutool-sign .

Пользователи Okular должны импортировать сертификаты cert.pfxв хранилище сертификатов, например, в профиль Firefox по умолчанию. [7] [ недействительная ссылка 13 января 2024 г. ⓘ] В Firefox это можно сделать через «Настройки» > «Конфиденциальность и безопасность» > «Просмотр сертификатов» > «Ваши сертификаты» > «Импортировать» и выбрать cert.pfx . После этого Okular предложит использовать этот сертификат при подписании PDF-файлов.

Libreoffice также может подписывать PDF-файлы. [8]

13 Аннотации

13.1 Удаление аннотаций из PDF-файла

13.1.1 pdftk

  • Удалить все аннотации:
    1pdftk in.pdf output - uncompress | sed '/^\/Annots/d' | pdftk - output out.pdf compress
    

13.1.2 perl-cam-pdf

  • Удалить все аннотации:
    1rewritepdf.pl -C in.pdf out.pdf
    

14 Добавьте номера страниц

С pdfsak :

$ pdfsak –input-file input.pdf –output output.pdf –text “\large \$page/\$pages” br 0.99 0.99 –latex-engine xelatex –font “Noto Regular”

15 Добавить метки страниц

Метки страниц — это логические номера страниц, отображаемые на панели навигации программы чтения PDF-файлов. Они полезны, например, если первые страницы PDF-файла представляют собой индексы, пронумерованные римскими цифрами (I, II и т. д.), а страница с номером «1» соответствует странице PDF-файла с номером больше 1, и вы хотите, чтобы номер страницы отображался на панели навигации соответствует номеру страницы, указанному на физической странице.

Это не следует путать с добавлением номеров страниц на физическую страницу. См. раздел 12.4.2 справочника по PDF, чтобы лучше понять метки страниц.

Используя pagelabels-py , предположим, что у нас есть PDF-файл с именем my_document.pdf, содержащий 12 страниц. Страницы с 1 по 4 должны быть помечены Intro Iкак Intro IV. Страницы с 5 по 9 должны быть помечены 2как 6. Страницы с 10 по 12 должны быть помечены Appendix AкакAppendix C Мы можем выдать следующий список команд: $ python3 -m метки страниц –удалить “my_document.pdf” $ python3 -m метки страниц –startpage 1 –prefix “Введение” –type “римские заглавные буквы” “my_document.pdf” $ python3 -m метки страниц –startpage 5 –firstpagenum 2 “my_document.pdf” $ python3 -m метки страниц –startpage 10 –prefix “Приложение” –type “буквы в верхнем регистре” “my_document.pdf” Примечание. pagelabels-py преобразует ваш файл в формат PDF 1.3. Используя pdftk , создайте metadata.txtфайл с метками: PageLabelBegin PageLabelNewIndex: 1 PageLabelStart: 1 PageLabelPrefix: Обложка PageLabelNumStyle: Нонумбер PageLabelBegin PageLabelNewIndex: 2 PageLabelStart: 1 PageLabelPrefix: задняя обложка PageLabelNumStyle: Нонумбер PageLabelBegin PageLabelNewIndex: 3 PageLabelStart: 1 PageLabelNumStyle: строчные римские цифры PageLabelBegin PageLabelNewIndex: 27 PageLabelStart: 1 PageLabelNumStyle: Десятичные арабские цифры Где: PageLabelBegin сигнализирует о том, что последует новое определение метки страницы PageLabelNewIndex — индекс страницы PDF, к которому применяется стиль нумерации, считая с единицы. Стиль нумерации будет сохраняться до следующей метки страницы или, если меток страниц больше нет, до конца документа. PageLabelStart это стартовый номер. Например, если здесь указать 5, страницы будут пронумерованы 5, 6, 7,… Префикс PageLabelPrefix текст, который будет помещен перед числом в метках страниц. PageLabelNumStyle может быть DecimalArabicNumerals, UppercaseRomanNumerals, LowercaseRomanNumerals, UppercaseLetters, LowercaseLettersили NoNumber. Затем используйте: pdftk book.pdf update_info_utf8 Metadata.txt выходная книга-с-метаданными.pdf Подробнее см . в этом вопросе SuperUser .

16 Закладки

16.1 Извлечь закладки

16.1.1 pdftk

  • Найти все закладки:
    1pdftk file.pdf dump_data_utf8 | grep '^Bookmark'
    

16.1.2 qpdf

  • Найти все закладки:
    1qpdf --json --json-key=outlines file.pdf
    

16.2 Добавить закладки

С pdftk Создайте текстовый файл bookmark_definitions.txtс определениями закладок в следующем формате:

ЗакладкаНачать ЗакладкаНазвание: Глава 1 Уровень закладки: 1 ЗакладкаНомерСтраницы: 1 ЗакладкаНачать ЗакладкаНазвание: Глава 1.1 Уровень закладки: 2 ЗакладкаНомерСтраницы: 2 ЗакладкаНачать ЗакладкаНазвание: Глава 1.2 Уровень закладки: 2 ЗакладкаНомерСтраницы: 3 ЗакладкаНачать ЗакладкаНазвание: Глава 1.3 Уровень закладки: 2 ЗакладкаНомерСтраницы: 4 ЗакладкаНачать ЗакладкаНазвание: Глава 1.3.1 Уровень закладки: 3 ЗакладкаНомерСтраницы: 5 ЗакладкаНачать ЗакладкаНазвание: Глава 2 Уровень закладки: 1 ЗакладкаНомерСтраницы: 6 Где

ЗакладкаНачать сигнализировать о новом определении закладки ЗакладкаНазвание название закладки Уровень закладки уровень закладки в иерархии ЗакладкаНомерСтраницы номер страницы, на которую перенаправляется закладка В этом примере приведенный выше файл создаст следующую структуру закладок:

Глава 1 Глава 1.1 Глава 1.2 Глава 1.3 Глава 1.3.1 Глава 2 Примените закладки с помощью следующей команды:

$ pdftk input.pdf update_info_utf8 bookmark_definitions.txt вывод output.pdf Извлечение страниц, содержащихся в закладке Чтобы извлечь страницы, содержащиеся в закладке, вы можете использовать pdf_extbook-git AUR .

При этом вам будет подсказано, какую закладку, чьи страницы вы хотите извлечь и куда ее сохранить. Чтобы извлечь все закладки данного иерархического уровня: pdf_extbook file

$ файл pdf_extbook - уровень выходного_файла_stem Удалить пустые страницы Можно использовать следующий скрипт для удаления пустых страниц из PDF-файла (кредит: сообщение SuperUser ):

#!/бин/ш

ИН="\(1" filename=\)(базовое имя “\({IN}”) filename="\){filename%.*}" PAGES=$(pdfinfo “$IN” | grep ^Pages: | tr -dc ‘0-9’)

non_blank() { для я в $(seq 1 \(PAGES); делать PERCENT=\)(gs -o - -dFirstPage=\({i} -dLastPage=\){i} -sDEVICE=ink_cov “$IN” | grep CMYK | nawk ‘BEGIN { sum=0; } {sum += $1 + $2 + $3 + $4;} END { printf “%.5f\n”, sum } ‘) if [ $(echo “$PERCENT > 0,001” | bc) -eq 1 ]; затем эхо $i #echo $i 1>&2 быть эхо -н. 1>&2 сделано | тройник “$filename.tmp” эхо 1>&2 }

установить +х pdftk “${IN}” cat \((non_blank) вывод “\){filename}_noblanks.pdf” Используйте его как pdf_remove_blank_pages input.pdf.

Для сценария необходимы pdftk , nawk и Ghostscript .

17 Шрифты

17.1 Список шрифтов

17.1.1 poppler

  • Используем команду pdffonts чтобы узнать, какие шрифты используются в PDF-файле и встроены ли они в него или нет:
    1pdffonts file.pdf
    

17.2 Внедрить шрифты в файл

17.2.1 ghostscript

  • Перегенерим файл с помощью ghostscript:
    1gs -q -dNOPAUSE -dBATCH -dPDFSETTINGS=/prepress -sDEVICE=pdfwrite -dEmbedAllFonts=true -sOutputFile=<outfile.pdf> <infile.pdf>
    

18 Восстановить повреждённый PDF-файл

18.1 ghostscript

  • Отремонтировать файл:
    1gs -o repaired.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress corrupted.pdf
    

18.2 poppler

  • Отремонтировать файл:
    1pdftocairo -pdf corrupted.pdf repaired.pdf
    

18.3 mupdf

  • Отремонтировать файл:
    1mutool clean corrupted.pdf repaired.pdf
    

19 Стандарт PDF/A

19.1 Преобразование PDF в стандарт PDF/A

19.1.1 ghostscript

  • Конвертация:
    1gs -dPDFA -dBATCH -dNOPAUSE -sColorConversionStrategy=UseDeviceIndependentColor -sDEVICE=pdfwrite -dPDFACompatibilityPolicy=2 -sOutputFile=document_pdfa.pdf document.pdf
    

19.2 Проверка соответствия PDF/A

19.2.1 verapdf

  • Проверить соответствие PDF различным вариантам стандарта PDF/A:
    1verapdf --flavour 1a --format text document.pdf
    

20 Оглавление в PDF

21 Преобразование djvu в pdf


No notes link to this note

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие