Замена векторных изображений в PDF с растровыми изображениями - PullRequest
25 голосов
/ 07 марта 2012

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

Иногда я читаю PDF-файлы технических статей на моем Kindle и получаюобнаружил, что чтение PDF напрямую расстраивает.К счастью, автоматическое преобразование PDF-файлов Amazon в формат Kindle отлично справляется с переформатированием текстовых фрагментов большинства PDF-файлов, которые я пробовал.Однако, в то время как растровые изображения, кажется, хорошо справляются с процессом преобразования, векторные изображения ужасно искажаются.Было бы здорово, если бы я мог легко конвертировать PDF, чтобы все его векторные изображения были растеризованы.

Я заинтересован в любых возможных решениях, но было бы предпочтительным решение на основе Linux или Windows.

Ответы [ 8 ]

9 голосов
/ 01 июля 2013

У меня была похожая проблема, и я решил ее, используя инструмент преобразования ImageMagics (http://www.imagemagick.org/script/index.php).. Он поставляется с Linux и отлично работает на Windows / Cygwin или OS X

.

convert -density 300 largeVectorFileFromR.pdf out.pdf

С -density 300 вы управляете разрешением (в DPI).

Недостаток: текст также растеризован, я понимаю, что Майкл не хочет этого.

9 голосов
/ 20 декабря 2017

После нескольких дней поиска решения, основанного на « Удалить весь текст из файла PDF » и « Как добавить изображение в существующий файл PDF? » Я нашел(некрасиво) решение для сценариев:

gs -o /tmp/onlytxt.pdf -sDEVICE=pdfwrite -dFILTERVECTOR -dFILTERIMAGE $INPUT_FILE && \
gs -o /tmp/graphics.pdf -sDEVICE=pdfwrite -dFILTERTEXT $INPUT_FILE && \
convert -density $DPI -quality 100 /tmp/graphics.pdf /tmp/graphics.png && \
convert -density $DPI -quality 100 /tmp/graphics.png /tmp/graphics.pdf && \
pdftk /tmp/graphics.pdf stamp /tmp/onlytxt.pdf output $OUTPUT_FILE && \
rm /tmp/onlytxt.pdf /tmp/graphics.pdf /tmp/graphics.png

, где у нас есть три переменные INPUT_FILE, OUTPUT_FILE и DPI.Мы разделяем текстовое и графическое содержимое с помощью Ghostscript, преобразуем графическое изображение в растровое изображение (PNG) и объединяем их с помощью pdftk.

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

2 голосов
/ 14 ноября 2014

Pitstop Pro v2 update 3 от Enfocus может сделать именно это. У него есть действие под названием «Растеризация содержимого страницы, сохранение текста», которое работает довольно хорошо. Это плагин для Adobe Acrobat, поэтому он требует немного больше, но также доступен в качестве серверного решения.

2 голосов
/ 06 февраля 2013

Это немного сложно, но вы попросили любое возможное решение. Кроме того, это решение не может быть автоматизировано.

1) Откройте PDF-файл с векторными изображениями в Inkscape. Затем выберите все изображение с помощью инструмента select (F1)

2) Если векторное изображение состоит из нескольких графических изображений svg, нажмите Ctrl + G (Объект -> Группа)

3) вырезать сгруппированное изображение SVG Ctrl + x

4) откройте новое окно InkScape Ctrl + n и вставьте изображение Ctrl + v

5) выберите File -> export Bitmap (Shift + Ctrl + e), возможно, вы захотите увеличить dpi

6) вернитесь в первое окно InkScape, выберите Файл -> Импорт (Ctrl + i) и выберите ранее экспортированное растровое изображение

7) поместите растровое изображение в то место, где svg-изображение было

Сохраните PDF, и векторное изображение будет заменено растровым изображением.

1 голос
/ 07 февраля 2013

Вот один из способов решения вашей проблемы:

Шаг 1. Воспользуйтесь онлайн-конвертером PDF-в-HTML, как здесь:

http://www.idrsolutions.com/online-pdf-to-html5-converter/

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

Шаг 2. Преобразование изображений HTML + обратно в PDF:

http://pdfcrowd.com/#convert_by_upload+with_options

В полученном PDF будут растеризованы все векторные изображения, а весь текст останется текстом, так что вы сможете выделять, копировать и т. Д.

0 голосов
/ 13 февраля 2018

inkscape - лучшее решение, я быстро создал этот довольно неоптимизированный командный файл, который делает именно это, и вы можете поиграть с ним и изменить параметры. ImageMacick convert, gs или pdftoimages работают не так хорошо, как inkscape, они либо не экспортируют слои, ни экспортируют, но имеют плохое качество:

#!/bin/bash
#set -xev
ORIGINAL_FOLDER=`pwd` 
JPEGS=`mktemp -d`
unzip "$1" -d "$JPEGS"
cd "$JPEGS"
# expang the pdf in pdf pages
pdftk combined_to_do.pdf burst output pg_%04d.pdf
#1) print the pdf's to pngs as they are seen with alpha, layers, transparency etc, this cannot be done by ImageMacick convert or pdftoimages
ls ./pg*.pdf | xargs -L1 -I {}  inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png
#2) Second change to jpgs
rm *.pdf
ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300  {}.jpg
#3) This to make a pdf file out of every jpg image without loss of either resolution or quality:
ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf
#4) This to concatenate the pdfpages into one:
pdftk *.jpg.pdf cat output combined.pdf
#5) And last I add an OCRed text layer that doesn't change the quality of the scan in the pdfs so they can be searchable:
pypdfocr combined.pdf
cp "$JPEGS/combined_ocr.pdf" "$ORIGINAL_FOLDER/$1_ocr.pdf"
cp "$JPEGS/combined.pdf" "$ORIGINAL_FOLDER/$1.pdf"
0 голосов
/ 16 декабря 2017

Преобразование PDF в DJVU с помощью https://jwilk.net/software/pdf2djvu конвертера. Снимите флажок «шрифты, векторы ...». Это значительно уменьшит размер файла и улучшит время загрузки документа.

0 голосов
/ 15 ноября 2016

Я использовал следующее:

gswin32c -o "%2" -dFirstPage=1 -dLastPage=1 -sDEVICE=pngalpha -r72x72 -dUseCropBox -dFitPage "%1" -dBATCH -dNOPAUSE

, где %1 - входной файл, а %2 - выходной.Это можно использовать с LaTeX, сгенерированный PNG имеет то же соотношение и размер страницы, что и исходный PDF, поэтому относительное положение изображения не изменится.

Обратите внимание, что в Linux вам может потребоваться использовать gs вместо gswin32c.

Вы также можете установить диапазон страниц и затем распечатать страницы обратно в PDF.Недостатком является также растеризация текста.

...