我有一个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())
}
答案 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
,它会自动关闭它打开的所有资源。