Использовать конвертировать, чтобы получить определенную страницу из PDF-файла?

21

Я знаю, что делал это раньше, поэтому я уверен, что это возможно, я просто забываю, как это сделать. Есть способ заставить конвертировать захватить определенную страницу PDF, и я хотел бы сохранить формат этой страницы как PDF.

ixtmixilix
источник

Ответы:

24

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

Pdftk может извлечь одну или несколько страниц из файла PDF.

pdftk A=input.pdf cat A42 A43 output pages_42_43.pdf

Если у вас есть установка LaTeX с PDFLaTeX, вы можете использовать pdfpages . Есть оболочка для pdfpages, pdfjam .

pdfjam -o pages_42_43.pdf input.pdf 42,43

Другая возможность (здесь избыточная, но полезная для требований более сложных, чем одна страница) - это Python с библиотекой PyPdf .

#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
for i in [42, 43]:
    output.addPage(input.getPage(i))
output.write(sys.stdout)
Жиль "ТАК - перестань быть злым"
источник
Я собирался рекомендовать pdftkтакже. Вы захотите использовать это.
Себастьян
pdfjamработает как шарм и уже был установлен с моим дистрибутивом LaTeX. Он очень прост в использовании.
ЛВП
Большое спасибо. Извлеченная страница была больше, чем весь PDF-файл, pdftkпоэтому она не выглядит просто для извлечения страницы. Результат был в порядке в противном случае.
Эрик Думинил
25

Вы можете использовать нижнюю запись convert(1)для «индексации» в PDF:

$ convert source.pdf[1] dest.pdf 

Значение индекса зависит от того, как экспортер PDF пронумеровал страницы. При тестировании файлов здесь цифры кажутся начинающимися с нуля, поэтому приведенный выше пример возвращает вас ко второй странице документа. Я видел примеры в Интернете, где вместо этого они показывают буквенные индексы, поскольку, видимо, создатель PDF «нумеровал» страницы в этом документе таким образом.

К сожалению, это не дает очень хороших результатов, потому что ImageMagick предполагает, что все основано на пикселях, и, следовательно, растеризует векторные изображения, такие как типографика в типичном PDF.

Лучший инструмент для работы - Ghostscript , который вы, вероятно, уже установили:

$ gs -dNOPAUSE -dBATCH -dFirstPage=2 -dLastPage=2 -sDEVICE=pdfwrite \
    -sOutputFile=dest.pdf -f src.pdf

Это пропускает данные PDF без изменений, поскольку Ghostscript понимает PDF (производную от PostScript) на гораздо более глубоком уровне, чем ImageMagick.

Уоррен Янг
источник
2
на самом деле это не так для imagemagick, если вы установите для параметра -density что-то около 300-400, то выводимый текст из pdf в png будет выглядеть просто отлично.
buggedcom
2
Конечно, на экране все будет хорошо, но если вы потом перейдете к печати, вам нужно будет установить плотность еще выше. И затем вы, вероятно, столкнетесь с проблемами, связанными с тем, как RIP вашего принтера справляется с серыми пикселями сглаживания, выводимыми ImageMagick. Таким образом, вы можете вместо этого выбрать вывод в 1-битное черно-белое изображение с собственным разрешением вашего принтера, которое может составлять 1200 точек на дюйм, или 1440 точек на дюйм, или что-то еще, и вы должны знать это заранее, чтобы получить четкий вывод. Нет, я буду придерживаться своего утверждения: лучше всего сохранять данные PDF в векторной форме как можно дольше.
Уоррен Янг
@buggedcom Я нашел -density 300это сладкое место. Что-нибудь большее, и вы создаете огромные временные файлы - которые вы, вероятно, в любом случае уменьшите до уменьшенных изображений
Майк Козер
2
Вы также можете выбрать диапазон страниц (например, для создания GIF), например, такsource.pdf[3-6]
texasflood