我已使用TextPosition
跟踪PDFTextStripper
个对象,找到了该网页中感兴趣的区域,如示例所示: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之外,我试图保持其他所有内容。
OLD CROPBOX:[0.0,0.0,595.276,841.89] - >新的CROPBOX [50.0,42.0,592.0,642.0]。
那么如何在正确设置庄稼时使用getYDirAdj
和getXDirAdj
?
我可以从此处下载我正在处理的原始pdf文件:http://downloadcenter.samsung.com/content/UM/201504/20150407095631744/ENG-US_NMATSCJ-1.103-0330.pdf
答案 0 :(得分:1)
在评论中,OP将他的问题缩小为
确定。鉴于从
PDRectangle rect = new PDRectangle(40f, 680f, 510f, 100f)
获得的javaTextLocation
如何将java代码片段设置为单个页面的cropBox?或者你会怎么做?基于TextLocation
的rect - >一些转变 - >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现在仅显示第12页的这一部分:
请注意,相关页面不仅指定了媒体框(必填)和裁剪框,还定义了出血框和艺术框。因此,考虑那些比裁剪框更有趣的框的应用程序可能以不同方式显示页面。特别是艺术框(被定义为"页面的有意义内容的范围")可能被一些应用程序认为是重要的。
在对这个答案的评论中,OP评论了
这很好并且有效。它正确地将页面保存在PDF文件中。我试图在JPG中做同样的事情并且失败了。
我将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
)
结果:
因此,我不能在这里重现一个问题。
检查可能的详细信息:
ImageIOUtil
不是主PDFBox工件的一部分,而是位于 pdfbox-tools ;该工件的版本是否与核心 pdfbox 工件的版本相匹配?InputStream
加载PDF,你直接从文件系统加载,我已经硬编码了页码,你有一些变量,......这些差异都不会引起你的问题,但谁知道......