gpt4 book ai didi

java - PDFBox 2.0.3 使用TextPosition坐标设置cropBox

转载 作者:行者123 更新时间:2023-12-01 09:27:57 24 4
gpt4 key购买 nike

我通过使用 PDFTextStripper 跟踪 TextPosition 对象来定位页面中感兴趣的区域,如示例所示:https://github.com/apache/pdfbox/blob/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/PrintTextLocations.java

如图所示,TextPosition 已从以下字段中检索text.getXDirAdj()text.getWidthDirAdj()text.getYDirAdj()text.getHeightDir() > .

在这个示例中,除了设置目标页面的cropBox之外,我尝试保持其他所有内容相同。

https://github.com/apache/pdfbox/blob/2.0.3/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java

旧裁剪框:[0.0,0.0,595.276,841.89] -> 新裁剪框 [50.0,42.0,592.0,642.0]。

那么如何使用 getYDirAdjgetXDirAdj 正确设置裁剪框?

我正在处理的原始pdf文件可以从这里下载:http://downloadcenter.samsung.com/content/UM/201504/20150407095631744/ENG-US_NMATSCJ-1.103-0330.pdf

最佳答案

裁剪页面

在评论中,OP 将他的问题简化为

Ok. Given a java PDRectangle rect = new PDRectangle(40f, 680f, 510f, 100f) obtained from TextLocation how would a java code snippet, that sets the cropBox of a single page look like ? Or how would you do it? TextLocation based rect --> some transformation --> setCropBox(theRightBox).

要将给定文档第十二页的裁剪框设置为给定的 PDRectangle,您可以使用如下代码:

PDDocument pdDocument = PDDocument.load(resource);
PDPage page = pdDocument.getPage(12-1);
page.setCropBox(new PDRectangle(40f, 680f, 510f, 100f));
pdDocument.save(new File(RESULT_FOLDER, "ENG-US_NMATSCJ-1.103-0330-page12cropped.pdf"));

( SetCropBox.java 测试方法 testSetCropBoxENG_US_NMATSCJ_1_103_0330)

Adobe Reader 现在仅显示第十二页的这一部分:

Screenshot

但请注意,相关页面不仅指定了媒体框(强制)和裁剪框,还定义了出血框和艺术框。因此,认为这些框比裁剪框更有趣的应用程序可能会以不同的方式显示页面。特别是艺术框(被定义为“页面有意义内容的范围”)可能被某些应用程序认为很重要。

渲染裁剪后的页面

在对此答案的评论中,OP 表示

This is good and works. It correctly saves the page in the PDF file. I've tried to do the same in JPG and failed.

我将 OP 的代码简化为最重要的部分

PDDocument pdDocument = PDDocument.load(resource);
PDPage page = pdDocument.getPage(12-1);
page.setCropBox(new PDRectangle(40f, 680f, 510f, 100f));

PDFRenderer renderer = new PDFRenderer(pdDocument);
BufferedImage img = renderer.renderImage(12 - 1, 4f);
ImageIOUtil.writeImage(img, new File(RESULT_FOLDER, "ENG-US_NMATSCJ-1.103-0330-page12cropped.jpg").getAbsolutePath(), 300);
pdDocument.close();

( SetCropBox.java 测试方法 testSetCropBoxImgENG_US_NMATSCJ_1_103_0330)

结果:

Result image

因此,我无法在这里重现问题。

<小时/>

可能需要检查的详细信息:

  • ImageIOUtil 不是主要 PDFBox 工件的一部分,而是位于 pdfbox-tools 中;该工件的版本是否与核心 pdfbox 工件的版本匹配?
  • 我在 Oracle Java 8 环境中运行代码;其他 Java 环境可能会产生不同的结果。
  • 我们的实现存在细微差别。例如。我通过 InputStream 加载 PDF,您直接从文件系统加载,我已经对页码进行了硬编码,您将其保存在某个变量中,...这些差异都不会导致您的问题,但谁知道呢...

关于java - PDFBox 2.0.3 使用TextPosition坐标设置cropBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39689004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com