5

PDF を圧縮できるライブラリまたはコマンドライン プログラムを探しています。

圧縮速度とファイルサイズは非常に重要です。

PDF には、非常に大きな印刷品質の画像がたくさんあります。

Adobe Acrobat は高品質で高速な圧縮を行いますが、プログラム インターフェイスを介して「縮小サイズの pdf」を保存することはできません。

Ghostscript は高品質の圧縮を行いますが、時間がかかりすぎます (数分)。

4

2 に答える 2

1

商用ライブラリがオプションである場合は、Amyuni PDF Creatorを試してみてください。.net バージョン (C#/VB.Net など) と ActiveX バージョン (C++/Delphi/VB/PHP など) があります。

各ページのすべてのオブジェクトを繰り返し処理し、画像であるオブジェクトを選択してサイズを縮小できます。そこにはいくつかの可能性があります:

  1. 圧縮率を低く設定します。
  2. ダウンサンプリング (画像を抽出し、解像度を下げてサイズを変更し、ファイルに戻す)
  3. 前の2つを組み合わせます。

Amyuni PDF Creator .Net を使用した C# での最初のオプションのコードは次のようになります。

//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;
        // (...)
    }
}

通常の免責事項が適用されます

于 2012-10-18T20:30:49.903 に答える
0

あなたはあなたの仕事のためにDocotic.Pdfライブラリを試してみたいかもしれません。

これは、幅または高さが256以上のすべての画像をスケーリングするコードです。スケーリングされた画像は、品質が65に設定されたJPEG圧縮を使用してエンコードされます。

public static void RecompressToJpeg(string path, string outputPath)
{
    using (PdfDocument doc = new PdfDocument(path))
    {
        foreach (PdfImage image in doc.Images)
        {
            // image that is used as mask or image with attached mask are
            // not good candidates for recompression
            if (!image.IsMask && image.Mask == null && (image.Width >= 256 || image.Height >= 256))
                image.Scale(0.5, PdfImageCompression.Jpeg, 65);
        }

        doc.Save(outputPath);
    }
}

RecompressWithJpegメソッドの1つ(または他のメソッドの1つ)を使用して、サイズを変更せずに画像を再圧縮することもできますRecompressXXX

また、 ResizeToメソッドの1つを使用して、画像を指定された幅と高さにサイズ変更できます。後者の場合、アスペクト比を考慮する必要があることに注意してください。

免責事項:私は図書館のベンダーで働いています。

于 2012-10-18T21:07:51.437 に答える