30

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

我偶尔会在 Kindle 上阅读技术文章的 PDF,发现直接阅读 PDF 令人沮丧。值得庆幸的是,亚马逊将 PDF自动转换为 Kindle 格式在重排我尝试过的大多数 PDF 的文本部分方面做得很好。然而,虽然光栅图像似乎可以很好地完成转换过程,但矢量图像却被严重破坏。如果我可以轻松地转换 PDF 以便其所有矢量图像都被光栅化,那就太好了。

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

4

8 回答 8

18

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

convert -density 300 largeVectorFileFromR.pdf out.pdf

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

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

于 2013-07-01T13:18:42.563 回答
11

经过几天搜索一些解决方案,基于“从 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 将两者连接起来。

我一直在成功地使用它来转换巨大的矢量图像以用于科学论文。

于 2017-12-20T16:35:56.837 回答
1

这是解决您的问题的一种方法:

第 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 将对所有矢量图像进行光栅化,并且所有文本都将保留为文本,因此您可以选择、复制等。

于 2013-02-07T13:40:18.757 回答
1

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

于 2014-11-14T10:37:36.860 回答
1

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

1) 打开带有矢量图像的 pdf Inkscapeselect然后使用工具 ( 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 窗口,File --> import ( Ctrl + i) 并选择之前导出的位图

7)将位图放置到svg图像所在的位置

保存 pdf 并将矢量图像替换为位图图像。

于 2013-02-06T18:50:56.970 回答
1

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

于 2017-12-16T15:58:39.780 回答
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。缺点是文本也会被光栅化。

于 2016-11-15T16:05:23.417 回答
0

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"
于 2018-02-13T13:38:55.257 回答