我正在尝试将高分辨率 PDF 文件上传到我们的服务器,但希望生成更小的 PDF 文件大小,以便通过降低 dpi 分辨率在我的 Web 应用程序上快速加载。
这是 iTextSharp 可以做到的吗?或者有没有其他免费软件可以做到这一点?
我正在尝试将高分辨率 PDF 文件上传到我们的服务器,但希望生成更小的 PDF 文件大小,以便通过降低 dpi 分辨率在我的 Web 应用程序上快速加载。
这是 iTextSharp 可以做到的吗?或者有没有其他免费软件可以做到这一点?
PDF 文件通常没有 DPI。嵌入在 PDF 文件中的光栅图像可以。您可以做的是提取 PDF 文件中嵌入的图像,将它们调整为较低的分辨率,然后将它们放回文件中。
iText in Action一书中有一章关于这个主题。
Ghostscript 是免费软件(如果你愿意的话),它可以以任何你想要的方式对 PDF 进行下采样(嗯,对可能嵌入其页面的像素图像进行下采样)。
示例命令行,它将所有图像下采样到 72dpi(前提是它们的分辨率超过 144dpi)。我不会使用最短的命令,但我特意尝试枚举所有可能有用的参数,以便您进行实验:
gs \
-o downsampled.pdf \
-sDEVICE=pdfwrite \
-dColorImageDownsampleThreshold=2.0 \
-dGrayImageDownsampleThreshold=2.0 \
-dMonoImageDownsampleThreshold=2.0 \
-dColorImageDownsampleType=/Bicubic \
-dGrayImageDownsampleType=/Bicubic \
-dMonoImageDownsampleType=/Bicubic \
-dDownsampleColorImages=true \
-dDownsampleGrayImages=true \
-dDownsampleMonoImages=true \
-dColorImageResolution=72 \
-dGrayImageResolution=72 \
-dMonoImageResolution=72 \
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
\
-dEncodeColorImages=true \
-dEncodeGrayImages=true \
-dEncodeMonoImages=true \
-dColorImageFilter=/DCTEncode \
-dGrayImageFilter=/DCTEncode \
-dMonoImageFilter=/CCITTFaxEncode \
input.pdf
如果要对所有彩色图像(即从 73dpi 到 144dpi 的图像)进行下采样,则使用-dColorImageDownsampleThreshold=1.0
(Ghostscript 的默认值为=1.5
);其他*ImageDownsampleThreshold设置也是如此。
对于*ImageDownsampleTypes - 您还可以尝试使用/Average
或的值来/Subsample
代替我建议的/Bicubic
. 当然,您也可以在单色、灰色和彩色图像类型中自由使用不同的分辨率、采样类型和阈值设置。