scala - 在scala中裁剪带有选定页码的pdf文件
问题描述
我有一个 50 页的 pdf 文件,我必须裁剪 pdf 文件的选定页面并将其保存到另一个 pdf 文件。我正在使用 Scala 语言。我怎样才能做到这一点?
这个输出应该只有新 pdf 文件中的 4 页,但它将所有剩余的 46 页与新 pdf 中的 4 个裁剪文件一起保存。
我在这里做错了什么?
我的代码是:-
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())
}
解决方案
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
,它会自动关闭它打开的所有资源。
推荐阅读
- python - 从 python 类调用函数期间的语法混淆
- android - ConstraintLayout 彼此之间的中心视图
- android - Android Robotium solo - 如何访问 IFRAME 中包含的 WebElements?
- git - Git:git pull - 从特定提交开始,直到最新提交跳过 1 个提交?
- html - What CSS feature would you use to show elevation on a 2D grid?
- sql - How to retrieve data from a single column in one table with different conditions(dates)
- javascript - Using DOM to append newlines in a paragraph
- selenium - 我如何决定在 Selenium 和 Katalon 之间将哪个工具列入自动化候选名单?鉴于技能组合适用于两者
- mysql - 如何获取用户mysql的两个请求
- aws-step-functions - Is there a way to create step functions graph using CDK?