あなたが言及したライブラリのいずれかが完全に無料ではないことをクライアントに知らせたいと思うかもしれません:
- iTextSharpはAGPLライセンスであるため、ソリューションのソースコードをリリースするか、商用ライセンスを購入する必要があります。
- PDFcompressNETは商用ライブラリです。
- pdftkはGPLライセンスであるため、ソリューションのソースコードをリリースするか、商用ライセンスを購入する必要があります。
- Docotic.Pdfは商用ライブラリです。
上記のすべてを考えると、私はフリーウェアの要件を削除できると思います。
Docotic.Pdfは、破壊的な変更を加えることなく、圧縮および非圧縮のPDFのサイズをさまざまな程度に縮小できます。
ゲインはPDFのサイズと構造によって異なります。小さなファイルやほとんどがスキャンされた画像であるファイルの場合、削減はそれほど大きくない可能性があるため、ファイルを使用してライブラリを試してみてください。
サイズが最も気になり、ファイルに多くの画像があり、それらの画像の品質の一部を失うことに問題がない場合は、Docotic.Pdfを使用して既存の画像を簡単に再圧縮できます。
すべての画像を2レベルにし、FAX圧縮で圧縮するコードは次のとおりです。
static void RecompressExistingImages(string fileName, string outputName)
{
using (PdfDocument doc = new PdfDocument(fileName))
{
foreach (PdfImage image in doc.Images)
image.RecompressWithGroup4Fax();
doc.Save(outputName);
}
}
RecompressWithFlate
、、メソッドもRecompressWithGroup3Fax
ありRecompressWithJpeg
ます。
ライブラリは、必要に応じてカラー画像を2レベルの画像に変換します。deflate圧縮レベル、JPEG品質などを指定できます。
Docotic.Pdfは、PDFの大きな画像のサイズを変更する(同時に再圧縮する)こともできます。これは、ドキュメント内の画像が実際に必要以上に大きい場合、または画像の品質がそれほど重要でない場合に役立つことがあります。
以下は、幅または高さが256以上のすべての画像を拡大縮小するコードです。拡大縮小された画像は、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);
}
}
いずれかの方法を使用して、画像を指定した幅と高さにサイズ変更できますResizeTo
。ResizeTo
この方法では、画像のアスペクト比を維持しようとはしませんのでご注意ください。適切な幅と高さは自分で計算する必要があります。
免責事項:私はビットミラクルで働いています。