在scala中裁剪带有选定页码的pdf文件

问题描述 投票:0回答:1

我有一个50页的pdf文件,我必须裁切该pdf文件的选定页面并将其保存到另一个pdf文件。我正在使用Scala语言。我该怎么办?

此输出在新pdf文件中应该只有4页,但是它将所有剩余的46页与4裁剪文件一起保存在新pdf中。

我在这里做错了什么?

我的代码是:-

 var croppedPdf: PDDocument = null
  try {

    croppedPdf = PDDocument.load(pdf)    // pdf file with 50 Pages in it
    val pageno = pageNoList.asScala      // [2,4,6,8] these are the pages need to be croped

    pageno.foreach(page => {
      croppedPdf.getPage(page).setCropBox(new PDRectangle(166f, 470f, 262f, 355f))

    })

    println("saving pdf files")
    val outputFile = new File(outputFilePath)
    try (outputFile.createNewFile())
    croppedPdf.save(outputFile)
    Some(outputFile)
  } catch {
    case e: Exception =>
      println("Got exception while generate PdfFile file")
      e.printStackTrace()
      None
  } finally {
    try (croppedPdf.close())
  }
scala pdfbox
1个回答
0
投票

您正在从现有文件创建新的PDDocument,更改几页,然后将其写到新文件中。

如果只保留更改的页面,则必须A)在写出之前删除所有未更改的页面,或者B)创建一个空的PDDocument并仅向其中添加更改的页面。

import org.apache.pdfbox.pdmodel.PDDocument
import org.apache.pdfbox.pdmodel.common.PDRectangle
import java.io.{File,FileInputStream}

util.Using.Manager { use =>
  val inFile = use(new FileInputStream(new File("path/to/infile.pdf")))
  val inPdf  = use(PDDocument.load(inFile))  // pdf doc to read from
  val outPdf = use(new PDDocument())         // pdf doc to write to

  val pages = List(2,5)  //the pages to be cropped
  pages.foreach { pNum =>
    val page = inPdf.getPage(pNum)
    page.setCropBox(new PDRectangle(166f, 470f, 262f, 355f))
    outPdf.addPage(page)
  }
  outPdf.save("path/to/outfile.pdf")
}
//res0: scala.util.Try[Unit] = Success(())

注意:本示例使用Scala 2.13 Using.Manager,它会自动关闭它打开的所有资源。

© www.soinside.com 2019 - 2024. All rights reserved.