使用PDFsharp合并多页TIFF为PDF时第二份TIFF页面全空白求助
解决多页TIFF合并为PDF时第二份TIFF页面空白的问题
你遇到的问题主要是两处代码逻辑错误导致的,我来帮你拆解并修正:
问题原因分析
- 错误的PDF页面索引引用:处理每个TIFF的页面时,你用
doc.Pages[PageIndex]获取要绘制的页面,但PageIndex是当前TIFF文件内部的页码(从0重新开始)。处理第二个TIFF时,这个索引会指向第一个TIFF已经创建的PDF页面,而刚添加的、对应第二个TIFF内容的新PDF页面根本没有被绘制,所以显示空白。 - 多余的空白页添加:每个TIFF处理完成后调用的
doc.AddPage()会额外插入一个空白页,这不仅会增加不必要的页数,还可能干扰页面索引逻辑。
修正后的代码
private static void MergeTiffToPDF(string filePathWithFileName) { // 提取Zip解压后的文件夹路径 string extractFolder = filePathWithFileName.Substring(0, filePathWithFileName.LastIndexOf('.')); // 获取文件夹内的所有TIFF文件 string[] tiffFiles = Directory.GetFiles(extractFolder); string destination = "C:\\Users\\someuser\\Desktop\\PDF_TIF_Document.pdf"; // 使用using自动释放PdfDocument资源 using (PdfDocument doc = new PdfDocument()) { foreach (string tiffPath in tiffFiles) { // 使用using自动释放Image资源 using (Image tiffImage = Image.FromFile(tiffPath)) { int totalTiffPages = tiffImage.GetFrameCount(FrameDimension.Page); for (int pageIndex = 0; pageIndex < totalTiffPages; pageIndex++) { tiffImage.SelectActiveFrame(FrameDimension.Page, pageIndex); // 使用using自动释放XImage资源 using (XImage img = XImage.FromGdiPlusImage(tiffImage)) { PdfPage pdfPage = new PdfPage(); // 根据图像尺寸设置页面方向 pdfPage.Orientation = img.PixelWidth > img.PixelHeight ? PageOrientation.Landscape : PageOrientation.Portrait; // 将新页面添加到PDF文档 doc.Pages.Add(pdfPage); // 获取刚添加的最后一页(正确的目标页面)来绘制内容 using (XGraphics xgr = XGraphics.FromPdfPage(doc.Pages[doc.Pages.Count - 1])) { // 可选:如果需要让图像适配PDF页面大小,用下面的DrawImage重载 // xgr.DrawImage(img, new XRect(0, 0, pdfPage.Width, pdfPage.Height), // XUnit.FromPixels(img.PixelWidth), XUnit.FromPixels(img.PixelHeight), // XGraphicsUnit.Pixel); xgr.DrawImage(img, 0, 0); } } } } // 移除原代码中多余的doc.AddPage()调用 } // 保存并自动关闭文档(using会处理关闭) doc.Save(destination); } }
关键修改点说明
- 正确获取目标PDF页面:用
doc.Pages.Count - 1获取刚添加的最后一页,确保每个TIFF页面都绘制到对应的新PDF页面上,不会覆盖之前的内容。 - 移除多余的空白页:删掉了每个TIFF循环后的
doc.AddPage(),避免额外空白页。 - 添加资源自动释放:对所有实现
IDisposable的对象(PdfDocument、Image、XImage、XGraphics)使用using语句,确保资源被及时释放,避免内存泄漏。 - 优化变量命名:把模糊的变量名改成更清晰的名称,提升代码可读性。
额外优化建议
如果你的TIFF文件有不同的DPI或者尺寸,直接按像素绘制可能导致内容在PDF页面上显示不全或比例失调。可以使用代码中注释的DrawImage重载方法,让图像适配PDF页面大小。
内容的提问来源于stack exchange,提问作者WorksOnMyLocal
相关产品推荐
相关产品推荐

