当前位置: 首页 > 知识库问答 >
问题:

PDFBox 2.0.3使用TextPosition坐标设置cropBox

华昕
2023-03-14

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

如图所示,TextPosition是从text这样的字段中检索到的。getXDirAdj()文本。getWidthDirAdj()文本。getYDirAdj()文本。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]

那么如何使用getYDirAdjgetXDirAdj正确设置cropbox呢?

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

共有1个答案

华宪
2023-03-14

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

好啊给定一个javaPDRectangle rect=new PDRectangle(40f、680f、510f、100f)TextLocation获取,设置单个页面的cropBox的java代码片段会是什么样子?或者你会怎么做<代码>文本位置基于rect--

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

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测试方法testsetcropbox\u US\u nmatsju 1\u 103\u 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_nmatsj_1_103_0330

结果是:

因此,我不能在此重复一个问题。

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

  • ImageIOUtil不是主要PDFBox工件的一部分,而是位于PDFBox工具中;该工件的版本是否与核心pdfbox工件的版本匹配
  • 我在Oracle Java 8环境中运行代码;其他Java环境可能会产生不同的结果
  • 在我们的实现中有一些细微的差异。例如,我通过一个InputStream加载PDF,你直接从文件系统加载,我已经硬编码了页码,你把它放在某个变量中。。。这些差异都不应该引起你的问题,但谁知道
 类似资料:
  • Matplotlib 可以根据自变量与因变量的取值范围,自动设置 x 轴与 y 轴的数值大小。当然,您也可以用自定义的方式,通过 set_xlim() 和 set_ylim() 对 x、y 轴的数值范围进行设置。 当对 3D 图像进行设置的时,会增加一个 z 轴,此时使用 set_zlim() 可以对 z 轴进行设置。 下面示例分别对自动设置和自定义设置做了演示:第一种 Matplotlib 自动

  • 在一个函数图像中,有时自变量 x 与因变量 y 是指数对应关系,这时需要将坐标轴刻度设置为对数刻度。Matplotlib 通过 axes 对象的或属性来实现对坐标轴的格式设置。 示例:右侧的子图显示对数刻度,左侧子图则显示标量刻度。 图1:对数关系图 轴是连接刻度的线,也就是绘图区域的边界,在绘图区域(axes 对象)的顶部、底部、左侧和右侧都有一个边界线(轴)。通过指定轴的颜色和宽度,从而对进行

  • 如何手动设置窗格的坐标?当我单击ImageView时,我想在同一位置有一个不同的ImageView弹出窗口,然后放大它。我可以让它弹出,但它只能在所有ImageViews的父窗格的默认左上角弹出。

  • 本文向大家介绍使用js获取鼠标坐标相关面试题,主要包含被问及使用js获取鼠标坐标时的应答技巧和注意事项,需要的朋友参考一下

  • 我们体验一下Events类吧!为了使其尽量简单,我们使用Events类的getMousePos()获取鼠标光标的坐标,并在画布的左上角显示出来。getMousePos()方法返回相对于画布的坐标,它会考虑画布相对于页面的偏移,以及页面的滚动位置。 图6-1 画布坐标系 操作步骤 按照以下步骤,在每次鼠标移动时,获取画布上的鼠标坐标,并在画布的左上角显示出来: 1. 链接到Events类: <sc

  • 我的渲染方法目前看起来像这样: 我最近刚刚尝试使用VBO,在我直接发送顶点数据之前,一切工作正常,纹理映射正确。现在我用VBO改变了顶点数组,即使它有效,也没有应用纹理,我只能看到黑色的物体。 我的纹理可能有什么问题 为什么当我更改GLVertexAttribute指针(顶点,3,GL_FLOAT,GL_ FALSE,0,0)时;带glBindBuffer的行顺序(GL_ARRAY_BUFFER,