用光栅图像替换PDF中的矢量图像

时间:2012-03-07 19:19:47

标签: pdf vector-graphics file-conversion image-conversion rasterizing

是否有任何简单(可编写脚本)的方法将带有矢量图像的PDF转换为带有光栅图像的PDF?换句话说,我想用完全相同(非光栅化)的文本生成PDF,但每个矢量图像都用光栅化版本替换。

我偶尔会在我的Kindle上阅读有关技术文章的PDF文件,并发现直接阅读PDF文件令人沮丧。值得庆幸的是,亚马逊用于Kindle格式的automatic conversion PDF文件可以很好地回复我尝试过的大多数PDF文本部分。然而,虽然光栅图像似乎使转换过程变得很好,但矢量图像却被严重损坏。如果我可以轻松转换PDF以便所有矢量图像都被光栅化,那就太棒了。

我对任何可能的解决方案感兴趣,但最好是基于Linux或Windows的解决方案。

8 个答案:

答案 0 :(得分:9)

我有一个类似的问题,并使用ImageMagics转换工具(http://www.imagemagick.org/script/index.php)解决了它。随附Linux并在Windows / Cygwin或OS X上运行良好

convert -density 300 largeVectorFileFromR.pdf out.pdf

使用-density 300可以控制分辨率(作为DPI)。

下行:文本也被光栅化,我知道迈克尔不想要这个。

答案 1 :(得分:9)

根据" Remove all text from PDF file"" How to add a picture onto an existing pdf file?"和" Contact Form 7"我找到了一个(丑陋)可编写脚本的解决方案:

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 :(得分:2)

这有点复杂,但你要求任何可能的解决方案。此外,此解决方案不可自动化。

1)使用Inkscape中的矢量图像打开pdf。然后使用select工具(F1

选择整个图像

2)如果矢量图像与多个svg图形一致,请按Ctrl + G(对象 - >组)

3)剪切分组的svg图像Ctrl + x

4)打开一个新的InkScape窗口Ctrl + n并粘贴图像Ctrl + v

5)选择文件 - >导出位图(Shift + Ctrl + e),也许你想增加dpi

6)返回第一个InkScape窗口,File - >导入(Ctrl + i)并选择以前导出的位图

7)将位图放置到svg图像

的位置

保存pdf,矢量图像被位图图像替换。

答案 3 :(得分:2)

Enfocus的Pitstop Pro v2更新3可以做到这一点。它有一个名为“栅格化页面内容,保持文本”的动作,效果很好。它是Adobe Acrobat的插件,因此它需要更多,但也可用作服务器解决方案。

答案 4 :(得分:1)

这是解决问题的唯一方法:

步骤1:使用在线PDF-to-HTML转换器,如下所示:

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

此工具可将PDF转换为一组图像和文本叠加层。此时矢量图像应转换为栅格。

第2步:将HTML +图像转换回PDF:

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

生成的PDF将光栅化所有矢量图像,所有文本都将保留为文本,因此您可以选择,复制等。

答案 5 :(得分:0)

我使用了以下内容:

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

其中%1是输入文件,%2是输出。这可以与LaTeX一起使用,生成的PNG具有与原始PDF相同的比率和页面大小,因此图像的相对位置不会改变。

请注意,在Linux中,您可能需要使用gs而不是gswin32c

您还可以设置页面范围,然后将页面打印回PDF。缺点是文本也会被栅格化。

答案 6 :(得分:0)

使用https://jwilk.net/software/pdf2djvu转换器将pdf转换为djvu。取消选中“antialias fonts,vectors ..”。它将显着减小文件大小并改善文档加载时间。

答案 7 :(得分:0)

inkscape是最好的解决方案,我很快就制作了这个相当未经优化的批处理文件,它完全可以实现,并且您可以使用它并更改选项。 ImageMacick转换,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"