PDF有损压缩

use*_*680 5 compression pdf size

我正在寻找可以压缩PDF的库或命令行程序.

压缩速度和文件大小非常重要.

PDF包含非常大的打印质量图像.

Adobe Acrobat执行高质量,快速压缩,但不允许通过编程接口保存"缩小尺寸的pdf".

Ghostscript做高质量压缩需要花费太长时间(分钟).

yms*_*yms 1

如果可以选择商业图书馆,您可以尝试一下Amyuni PDF Creator 。有.net 版本(C#/VB.Net 等)和ActiveX 版本(C++/Delphi/VB/PHP 等)。

您可以遍历每个页面的所有对象,选择图像对象,并减小它们的大小。你有几种可能性:

  1. 设置较低的压缩率。
  2. 下采样(提取图像,将其大小调整为较低的分辨率,然后将其放回文件中)
  3. 结合前两者。

以下是第一个选项的代码,在 C# 中,使用 Amyuni PDF Creator .Net:

//open a pdf document
document.Open("c:\\temp\\myfile.pdf","");
IacPage page1 = document.GetPage (1);
Amyuni.PDFCreator.IacAttribute attribute = page1.AttributeByName ("Objects");
// listobj is an array list of graphic objects
System.Collections.ArrayList listobj = (System.Collections.ArrayList) attribute.Value;
foreach ( object pdfObj in listobj )
{
    if ((IacObjectType)pdfObj.AttributeByName("ObjectType").Value == IacObjectType.acObjectTypePicture)
    {
        if ((IacImageCompressionConstants)pdfObj.AttributeByName("Compression").Value == IacImageCompressionConstants.acCompressionJPegMedium)
            pdfObj.AttributeByName("Compression").Value = IacImageCompressionConstants.acCompressionJPegLow;

        if ((IacImageCompressionConstants)pdfObj.AttributeByName("Compression").Value == IacImageCompressionConstants.acCompressionJPegHigh)
            pdfObj.AttributeByName("Compression").Value = IacImageCompressionConstants.acCompressionJPegMedium;
        // (...)
    }
}
Run Code Online (Sandbox Code Playgroud)

通常的免责声明适用