You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:06:03