使用iText7转换TIFF为PDF后体积翻倍,求压缩解决办法
使用iText7转换TIFF到PDF时体积翻倍的问题及压缩需求
我在使用iText7将TIFF图片转换为PDF文档时遇到问题:生成的PDF体积是原TIFF的两倍(原TIFF大小为36.930,PDF大小为73.410,TIFF共96页),尝试多种解决方案均无效。我需要将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; } }
相关图片:

内容的提问来源于stack exchange,提问作者Hitham Yosri
相关产品推荐
相关产品推荐

