PDF を圧縮できるライブラリまたはコマンドライン プログラムを探しています。
圧縮速度とファイルサイズは非常に重要です。
PDF には、非常に大きな印刷品質の画像がたくさんあります。
Adobe Acrobat は高品質で高速な圧縮を行いますが、プログラム インターフェイスを介して「縮小サイズの pdf」を保存することはできません。
Ghostscript は高品質の圧縮を行いますが、時間がかかりすぎます (数分)。
PDF を圧縮できるライブラリまたはコマンドライン プログラムを探しています。
圧縮速度とファイルサイズは非常に重要です。
PDF には、非常に大きな印刷品質の画像がたくさんあります。
Adobe Acrobat は高品質で高速な圧縮を行いますが、プログラム インターフェイスを介して「縮小サイズの pdf」を保存することはできません。
Ghostscript は高品質の圧縮を行いますが、時間がかかりすぎます (数分)。
商用ライブラリがオプションである場合は、Amyuni PDF Creatorを試してみてください。.net バージョン (C#/VB.Net など) と ActiveX バージョン (C++/Delphi/VB/PHP など) があります。
各ページのすべてのオブジェクトを繰り返し処理し、画像であるオブジェクトを選択してサイズを縮小できます。そこにはいくつかの可能性があります:
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;
// (...)
}
}
通常の免責事項が適用されます
あなたはあなたの仕事のために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つを使用して、画像を指定された幅と高さにサイズ変更できます。後者の場合、アスペクト比を考慮する必要があることに注意してください。
免責事項:私は図書館のベンダーで働いています。