使用TPPDF导出图片为PDF时出现首页多余空白页问题求助
问题根因
- TPPDF 初始化
PDFDocument时会自动生成第一页 - 你设置了
PDFImage的sizeFit = .height,会让图片高度适配完整A4页面高度,但正文内容区域默认有上下边距,实际可用高度小于A4总高度,第一张图片无法放入第一页的正文区域,触发自动分页被挤到第二页,第一页就变成空白页 - 后续3张图片各占一页,最终总页数就是1(空白)+3(图片)=4页,和遇到的现象完全匹配
解决方案
方案1:调整图片适配规则,适配内容区域高度(推荐,无需修改默认边距)
修改图片的尺寸适配逻辑,让图片适配正文内容区域的可用高度,而不是整个页面高度,修改后代码如下:
let document = PDFDocument(format: .a4) document.add(.footerLeft, textObject: PDFSimpleText(text: "Generated from Pdf Scanner")) // 先获取A4页面正文区域的可用高度 let contentHeight = document.layout.height - document.layout.margin.top - document.layout.margin.bottom for eachImage in images{ let imageElement = PDFImage(image: eachImage) // 手动设置图片高度为内容区域高度,宽度等比缩放 let imageRatio = eachImage.size.width / eachImage.size.height imageElement.size = CGSize(width: contentHeight * imageRatio, height: contentHeight) document.add(.contentCenter ,image: imageElement) } let generator = PDFGenerator(document: document) let pdfUrl = (try? generator.generateURL(filename: "Example.pdf"))!
方案2:手动控制分页,删除默认生成的空白页
如果希望图片完整占满整页,可以删除初始化自动生成的空白页,每添加一张图片手动创建新页,代码如下:
let document = PDFDocument(format: .a4) document.add(.footerLeft, textObject: PDFSimpleText(text: "Generated from Pdf Scanner")) // 先删除初始化自动生成的第一页 document.removePage(at: 0) for eachImage in images{ // 每加一张图片先创建新页 document.createNewPage() let imageElement = PDFImage(image: eachImage) imageElement.sizeFit = .height document.add(.contentCenter ,image: imageElement) } let generator = PDFGenerator(document: document) let pdfUrl = (try? generator.generateURL(filename: "Example.pdf"))!
内容的提问来源于stack exchange,提问作者Muhammad Ahmad
相关产品推荐
相关产品推荐

