iTextSharp 更改结果质量/压缩,如 PDF24Creator
Posted
技术标签:
【中文标题】iTextSharp 更改结果质量/压缩,如 PDF24Creator【英文标题】:iTextSharp change outcome quality / compression like PDF24Creator 【发布时间】:2015-02-25 09:12:26 【问题描述】:我想知道是否可以像使用 Adobe Acrobat Pro 或 PDF24Creator 一样使用 iTextSharp 和 C# 压缩/更改输出 pdf 文件的质量。
使用 PDF24Creator 我可以打开 pdf,再次保存文件并将“PDF 质量”设置为“低质量”,我的文件大小从 88.6MB 减小到 12.5MB,而质量仍然足够好.
我已经在使用了
writer = new PdfCopy(doc, fs);
writer.SetPdfVersion(PdfCopy.PDF_VERSION_1_7);
writer.CompressionLevel = PdfStream.BEST_COMPRESSION;
writer.SetFullCompression();
将文件大小从大约 92MB 减少到 88MB。
或者:我可以使用命令行参数或启动参数通过我的 C# 代码运行 pdf24 程序吗?类似的东西:
pdf24Creator.exe -save -Quality:low -inputfile -outputfile
感谢您的帮助(布鲁诺)!
【问题讨论】:
【参考方案1】:简短回答:不。
长答案:是的,但你必须自己做很多工作。
如果您阅读了third and fourth paragraphs here,您将有望从 PDF 的角度更好地理解“压缩”的实际含义。
Adobe Acrobat 和 PDF24 Creator 等程序允许您通过破坏 PDF 中的数据来减小文件的大小。当您选择低质量设置时,这些程序所做的最常见更改之一是实际提取所有图像,降低其质量并替换 PDF 中的原始文件。因此,最初保存的未经任何压缩的 JPEG 可能会降低到 60% 的质量。需要说明的是,这 60% 是不可逆的,它不是压缩文件,它实际上是在破坏数据以节省空间。
另一个设置是降低图像的有效 DPI。将 500 像素宽的图像放入 2 英寸宽的盒子中实际上是 250 DPI。这些程序将提取图像,将图像缩小到 96 或 72 DPI,这意味着 500 像素的图像宽度缩小到 192 或 144 像素,并替换 PDF 中的原始文件。再一次,这是一种破坏性的不可逆变化。
(由于破坏性不可逆,您可能仍然拥有原始文件,我只是想明确一点,这不是像 ZIP 那样真正的“压缩”。)
但是,如果您真的想这样做,您可以查看code like this,它展示了如何使用 iText 执行图像的提取和重新插入。但是,更改图像由您 100% 决定,因为 iText 不会对您的数据进行破坏性更改(我想说这是一件好事!)
【讨论】:
嘿,感谢您的出色回答。这对我来说似乎是很多工作。你知道有没有其他的 pdf 库可以实现这个? (可能会花费一些东西)。也许我可以只使用 pdf 工具来使用 hOCR2pdf 库? 另外:如果 textsharp 做不到。应该有另一个库可以压缩pdf中的图像。所以在我的程序中,在我用 iTextsharp 创建了 pdf 之后 - 我用那个不同的库打开了 Pdf,“压缩”它然后再次保存它。这可能吗? 我不会使用 iText 创建 PDF 然后对其进行压缩,而是预先压缩您的图像然后将它们添加到 PDF 中。 .Net 运行时具有内置功能,可以即时进行大多数图像处理,如果您有静态资源,那么我只会使用 Photoshop 或 GIMP 来压缩图像。但是,如果您不想这样做,您就不能将 shell 执行到 pdf24creator 或 ghostscript 好吧,我想我要试试 iTextSharp 部分。我正在将大约 800 个 pdf 文档合并为一个巨大的文档。图像在那些 pdf 文档中。我做了一些测试来检查文件大小何时是最佳的。例如,我将 5 个 pdf 文档合并为一个结果。 第一种情况:我合并了 5 个文档,然后用 pdf24Creator 压缩它们(130 DPI):740kb ---- 第二种情况: 压缩了然后将 5 个 130 DPI 的文档合并:870kb ---- 第三种情况:我从第二种情况压缩(130 DPI)生成的 pdf 文件,文件大小:780kb 这些文件大小是因为我只使用了 5 个文件吗?如果我使用 700 个文件,文件大小只会相差约 1 mb 吗?我不知道如何测试这个。由于我使用 pdf24 Creator 手动压缩文件。以上是关于iTextSharp 更改结果质量/压缩,如 PDF24Creator的主要内容,如果未能解决你的问题,请参考以下文章
ITextSharp - VB.NET - PdfTextExtractor - PDF 到 TXT - 缺少部分页面文本