使用OpenPDF将JPG合并为PDF时插入空白页的实现问题
在OpenPDF中调用document.newPage()即可新增页面,新增页面不写入任何内容就是空白页。你需要调整遍历逻辑,避免在最后一张图片末尾额外多出空白页,修改后的代码如下:
def createFromImage(directory: String, targetFile: String): Unit = { logger.info(s"Create pdf from images in $directory.") val document = new Document() PdfWriter.getInstance(document, new FileOutputStream(targetFile)) document.open() // 先过滤得到所有jpg文件列表,存为变量方便判断是否为最后一项 val jpgFiles = new File(directory).listFiles().toList .map(_.getAbsolutePath) .filter(_.contains(".jpg")) jpgFiles.zipWithIndex.foreach { case (file, index) => import com.lowagie.text.Image val jpg: Image = Image.getInstance(file) document.setPageSize(PageSize.A4) val ratio: Float = PageSize.A4.getWidth / jpg.getWidth jpg.scalePercent(ratio * 100) document.add(jpg) // 只要不是最后一张图片,就插入空白页 if (index != jpgFiles.size - 1) { // 第一次newPage结束当前图片页,进入新的空白页 document.newPage() // 第二次newPage结束空白页,进入下一张图片的承载页 document.newPage() } } document.close() logger.info("Pdf created.") }
补充说明
- 连续调用两次
newPage()的原因是:如果仅调用一次,下一张图片会直接添加在新页面上,无法得到中间的空白页。连续两次调用会先生成一张无内容的空白页,再进入下一张图片的承载页。 - 所有新页面默认继承之前设置的A4尺寸,无需重复配置空白页的尺寸。
内容的提问来源于stack exchange,提问作者Kuba Wenta
相关产品推荐
相关产品推荐

