我认为你需要让客户知道你提到的任何库都不是完全免费的:
- iTextSharp采用AGPL许可证,因此您必须发布解决方案的源代码或购买商业许可证。
- PDFcompressNET是商业库。
- pdftk采用GPL许可证,因此您必须发布解决方案的源代码或购买商业许可证。
- Docotic.Pdf是商业库。
考虑到上述所有情况,我认为可以放弃免费软件的要求。
Docotic.Pdf可以在不引入任何破坏性更改的情况下
减小压缩和未压缩PDF的大小。
收益取决于PDF的大小和结构:对于小文件或大部分为扫描图像的文件,减少可能不会那么大,因此您应该使用自己的文件尝试该库并自行查看。
如果您最关心文件大小,并且您的文件中有许多图像,而且您可以接受失去一些图像质量,那么您可以使用Docotic.Pdf轻松地重新压缩现有图像。
以下是使所有图像变为二值图并使用传真压缩压缩的代码:
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
方法。
如果需要,该库将把彩色图像转换为双色图像。您可以指定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)
{
if (!image.IsMask && image.Mask == null && (image.Width >= 256 || image.Height >= 256))
image.Scale(0.5, PdfImageCompression.Jpeg, 65);
}
doc.Save(outputPath);
}
}
图片可以使用其中一个“ResizeTo”方法调整大小到指定的宽度和高度。请注意,“ResizeTo”方法不会尝试保持图像的宽高比。您应该自己计算适当的宽度和高度。
免责声明:我为Bit Miracle工作。