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

时间:2019-12-25 14:48:19

标签: scala pdfbox

我有一个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())
  }

1 个答案:

答案 0 :(得分:1)

您要从现有文件创建新的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,它会自动关闭它打开的所有资源。