使用itext从pdf获取所选区域的坐标

时间:2015-01-13 07:47:07

标签: java itext

我正在尝试从PDF的特定部分删除文本。如果我知道该区域的X,Y坐标,我就可以删除文本。但我无法从PDF中获取所选区域的坐标。请帮助我。

1 个答案:

答案 0 :(得分:1)

此问题是对上一个问题的跟进:Remove text occurrences contained in a specified area with iText

在此问题中,您要求从特定区域中删除内容。现在您要问如何确定这个特定区域,但您的问题不完整:您没有告诉我们选择该区域的任何标准。

似乎你正在尝试做一些叫做编辑的事情。 StackOverflow问题中解释了这一点:How to create and apply redactions?

在回答这个问题时,我将解释如何以编程方式创建编校注释。但是,编辑通常使用Adobe Acrobat手动完成:

Redaction in Acrobat

箭头显示您需要的功能:工具>保护>标记为编辑

如果您只需要坐标而不需要编辑注释,则可以引入另一个注释,允许您手动标记矩形,然后使用iText提取坐标。例如:如果矩形是表单字段,那么获取坐标非常容易。如果您要删除的内容是表单字段的值,则删除该内容会更容易:您只需删除该字段。

如果无法手动检索这些坐标,那么您可能面临一些不可能的事情:例如:如果您对要删除的区域的内容一无所知,那么究竟是怎样的你打算教一个程序需要删除的东西吗?

如果您确实知道自己要查找的内容,则需要解析该内容。之前已经提出并回答了这个问题:Get the exact Stringposition in PDF

<强>更新

在评论中,您解释了将PDF页面转换为图像,您在Java Swing应用程序中渲染图像,以便用户可以选择矩形。此矩形存储为java.awt.Image

由于Java中的坐标系与PDF中的坐标系不同,这导致了以下潜在问题。

  1. Y轴不同:在PDF格式中,页面大小以我们称为页面边界的矩形描述。最重要的页面边界是MediaBox(必需)和CropBox(可选)。 MediaBox包含定义页面的矩形的左下角和右上角的坐标。在坐标系中,Y轴指向上方。左下角的Y坐标低于右上角的Y坐标。在Java中,反之亦然:对象顶部的Y坐标为0,Y轴指向下方:Y值越高,此Y值处的对象越低。
  2. 可能存在偏移:在大多数情况下,MediaBox的左下角的坐标为X = 0,Y = 0.但情况并非如此。可能需要考虑偏移量。
  3. 分辨率可能不同:默认用户单位对应一个点。例如:A4页面由842个用户单位测量595。每英寸有72个点。创建图像时,您不必以磅为单位进行测量。也许你用像素来衡量。也许你创建一个每英寸300像素(300 dpi)的图像。
  4. 所有这些原因都可能导致您从Swing应用程序获得的矩形与您需要在PDF中使用的坐标不同。你需要考虑所有这些因素,否则,你将继续面对你,它不会工作&#34;问题。这不是iText问题,这是一个数学问题。