我在使用itext7将tiff图像转换为pdf文档时遇到问题,PDF的大小使图像的大小增加了一倍,我尝试了很多解决方案,但没有办法
找到我的代码
private static byte[] ConvertToPDF(byte[] imgeByte, string fileExtension)
{
try
{
using (MemoryStream ExportFile = new MemoryStream())
{
using (PdfWriter writer = new PdfWriter(ExportFile, new WriterProperties().SetPdfVersion(PdfVersion.PDF_1_5)
.SetCompressionLevel(CompressionConstants.BEST_COMPRESSION).SetFullCompressionMode(true)))
{
using (PdfDocument pdfDoc = new PdfDocument(writer, new DocumentProperties()))
{
using (Document document = new Document(pdfDoc, iText.Kernel.Geom.PageSize.A4, true))
{
iText.IO.Image.ImageData imageData = null;
iText.Layout.Element.Image img = null;
bool isTIFF = fileExtension.ToLower().Contains("tif");
if (isTIFF)
{
int PagesCount;
using (Bitmap currentImg = new Bitmap(new MemoryStream(imgeByte)))
{
PagesCount = currentImg.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
for (int i = 1; i <= PagesCount; i++)
{
imageData = iText.IO.Image.ImageDataFactory.CreateTiff(imgeByte, false, i, true);
img = new iText.Layout.Element.Image(imageData).SetHorizontalAlignment(HorizontalAlignment.CENTER);
document.Add(img);
if (i < PagesCount - 1)
{
document.Add(new iText.Layout.Element.AreaBreak(AreaBreakType.NEXT_PAGE));
//pdfDoc.AddNewPage(i+1, iText.Kernel.Geom.PageSize.A4);
}
}
}
}
else
{
if (fileExtension.ToLower().Contains("png"))
{
imageData = iText.IO.Image.ImageDataFactory.CreatePng(imgeByte);
}
else if (fileExtension.ToLower().Contains("jpg"))
{
imageData = iText.IO.Image.ImageDataFactory.CreateJpeg(imgeByte);
}
else if (fileExtension.ToLower().Contains("pdf"))
{
return imgeByte;
}
else
{
using (Bitmap currentImg = new Bitmap(new MemoryStream(imgeByte)))
{
imageData = iText.IO.Image.ImageDataFactory.Create(currentImg, null);
}
}
img = new iText.Layout.Element.Image(imageData)
.SetTextAlignment(TextAlignment.JUSTIFIED_ALL);
document.Add(img);
}
writer.Flush();
document.Flush();
pdfDoc.SetFlushUnusedObjects(true);
document.Close();
writer.Close();
pdfDoc.Close();
}
}
}
return ExportFile.ToArray();
}
}
catch (Exception)
{
throw;
}
}
更多详情: PDF文档大小:73.410 Tif 图像大小:36.930 Tif 页数:96 页
我需要将 PDF 文件大小减小到与图像大小相同或更小。
出现该问题的原因是输入的 TIFF 图像使用 JPEG 压缩,而 PDF 文件中的图像很可能使用 Flate 压缩。对于某些类型的内容,JPEG 的压缩比比 Flate 好得多。
检查 iText API,看看是否可以告诉库对图像使用 JPEG 压缩而不是 Flate。如果没有,您可以将 currentImg 的当前帧保存为 JPEG 到内存流,然后创建 JPEG 图像 (
iText.IO.Image.ImageDataFactory.CreateJpeg
) 并将其添加到文档中。