2012-02-02 2 views
6

У меня есть PDF, который доступен для поиска, и мне нужно преобразовать его в не-поиск.Преобразование PDF с возможностью поиска в PDF, не подлежащий поиску

Я попытался использовать Ghostscript и изменить его на JPEG, а затем обратно в PDF, который делает трюк, но размер файла слишком велик и неприемлем.

Я попытался использовать Ghostscript для преобразования PDF в PS сначала, а затем PDF, который тоже делает трюк, но качество недостаточно.

gswin32.exe -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pswrite -r1000 -sOutputFile=out.ps in.pdf 
gswin32.exe -q -dNOPAUSE -dBATCH -dSAFER -dDEVICEWIDTHPOINTS=596 -dDEVICEHEIGHTPOINTS=834 -dPDFSETTINGS=/ebook -sDEVICE=pdfwrite -sOutputFile=out.pdf out.ps 

Есть ли способ дать хорошее качество PDF?

Альтернативно, есть ли более простой способ конвертировать PDF с возможностью поиска в не-поиск?

ответ

11

Вы можете использовать Ghostscript для достижения этого.Вам необходимо 2 этапа:

  1. Преобразование PDF в файл PostScript, в котором все используемые шрифты преобразуются в контурные фигуры. Ключевым моментом здесь является -dNOCACHE paramenter:

     
    gs -o somepdf.ps -dNOCACHE -sDEVICE=pswrite somepdf.pdf

  2. Преобразование PS обратно в PDF (и, возможно, удалить промежуточный PS еще раз):

     
    gs -o somepdf-with-outlines.pdf -sDEVICE=pdfwrite somepdf.ps 
    rm somepdf.ps

Обратите внимание, что в результате PDF, весьма вероятно, будет больше чем оригинальный. (И без дополнительных параметров командной строки все изображения в исходном PDF-файле, скорее всего, также будут преобразованы в соответствии с настройками по умолчанию Ghostscript, если вы не добавите больше параметров командной строки, чтобы сделать иначе. Но качество должно быть лучше, чем ваша собственная попытка использовать Ghostscript ...)


Update

Видимо, от версии 9,15 (который будет выпущен в сентябре/октябре 2014), Ghostscript будет поддерживать новый параметр командной строки:

-dNoOutputFonts 

, который будет вызывать выходные устройства pdfwrite, ps2write и eps2write«к„сплющивающимся“глифам в„основные“операции маркировки (а не написание шрифтов на выход)».

Это означает, что вышеупомянутые два шага можно избежать, и желаемого результата можно достичь с помощью одной команды:

gs -o somepdf-with-outlines.pdf -dNoOutputFonts -sDEVICE=pdfwrite somepdf.pdf 

Предостережения: Я проверил это с несколько входных файлов с помощью самокомпилированный Ghostscript, основанный на текущих источниках Git. В каждом случае он работал безупречно.

+0

В моем скромном мнении я рекомендую сначала конвертировать в постскрипту: 'gs -dBATCH -dNOPAUSE -dNOCACHE -dSAFER -sDEVICE = pswrite -sOutputFile = output.ps input.pdf', а затем передать эту итоговую постскриптум * ps2pdf *. Если ваша страница имеет настраиваемый размер страницы (например, 17x24 см), вам необходимо передать * -g * переключатель в * ps2pdf *, например, для 17x24 см: 'ps2pdf -g4820x6800 input.ps output.pdf'; другими словами, взгляните на страницы в точках (с pdfinfo), а затем умножьте оба измерения на 10 – Dingo

+2

@ Dingo: Если вы используете недавнюю версию GS, '-o out.ps' совпадает с' -dBATCH - dNOPAUSE -sOutputFile = out.ps'. Кроме того, последняя версия GS автоматически устанавливает размер страницы выходного файла (PostScript) так же, как и файл входного файла (PDF). Если вы хотите быть в безопасности, вы можете дополнительно установить его с помощью '-gNNNxMMM' без проблем. В большинстве случаев мне не нравится 'ps2pdf', потому что это оболочка вокруг командной строки Ghostscript ... - Итак, что осталось в качестве разницы между вашей последней рекомендацией и моей? –

+0

Вы правы. Я раньше не читал. Извините меня и спасибо за отличные советы! – Dingo

3

возможный способ производства, не для поиска вектора PDF с возможностью поиска вектора PDF является

  1. разрыва PDF в его отдельных страниц

    pdftk file.pdf burst

  2. конвертировать любую одну страницу в svg с

    pdftocairo

содержится в Poppler Utils

for f in *.pdf; do pdftocairo -svg $f; done 

3. delete ВСЕ pdf в папке

4. затем, с batikrasterizer

повторно конвертировать ALL SVG в PDF (на этот раз в результате PDFs будут сохранены векторными, но не быть для поиска)

java -jar ./batik-rasterizer.jar -m application/pdf *.svg 

конечный этап: присоединиться все полученное одностраничного межзрачкового один многостраничный PDF-файл

pdftk *.pdf cat output out.pdf 
+0

[альтернативный инструмент] (http://manpages.ubuntu.com/manpages/xenial/man1/rasterizer.1.html) для шага 4 можно использовать со следующей командой: '$ for f in * .svg ; сделать растеризатор -m application/pdf $ f; done'. PS: Я не совсем уверен, как эти два инструмента связаны или перекрываются, хотя ... –

+0

Расширение области исходного вопроса, это будет способ обрезать полученный файл: http://tex.stackexchange.com/ a/42259/27721 –

0

Я думаю, преобразовывая к изображению как JPG это путь, это может быть стоит преобразования в ам изображение, оптимизации/уменьшения размера изображений и а затем создать PDF с ними?

Смежные вопросы