首页 > 解决方案 > 寻找可以为我提供 pdf 文本坐标的软件或 API

问题描述

我希望一个简单的问题 - 我有一个 pdf 并且想要检测特定单词或占位符文本的坐标。然后我打算使用 itextsharp 在找到的坐标的顶部标记一个替换的文本位。

任何人都可以推荐任何东西吗?

谢谢

标签: pdfitext

解决方案


正如评论中所回答的那样,可以使用 iText 来执行这样的任务。也许有一些更好的解决方案,但是,我对此表示怀疑。上述问题的原因,即“[itextsharp] 有时给出搜索文本所在句子开头的坐标”,是有时字形非常接近,以至于它们的框重叠,因此我不明白如何它可以随心所欲地处理。

因此,您可以执行以下操作:

  • 扩展LocationTextExtractionStrategy类和覆盖eventOccurred,例如如下:

     @Override
     public void eventOccurred(IEventData data, EventType type) {
     if (type.equals(EventType.RENDER_TEXT)) {
         TextRenderInfo renderInfo = (TextRenderInfo) data;
         // Obtain all the necesary information from renderInfo, for example
         LineSegment segment = renderInfo.getBaseline();
         // ...
     }
    
  • 将此类扩展类的实例传递给PdfTextExtractor.getTextFromPage如下:

    PdfTextExtractor.getTextFromPage(pdfDocument.getPage(1), new ExtendedLocationTextExtractionStrategy()
    
  • 一旦找到文本,就会触发该事件。

当然,这样的解决方案存在一些困难,因为您在上面要查找和编写的文本可能不是以“文本”的形式出现在 PDF 中,而是以“T”、“ex”、t”甚至“t”的形式出现"、"x"、"e"、"T"。但是,由于您使用 iText,您可能希望利用其产品之一的优势 - pdfSweep。该产品旨在从 PDF 中彻底删除不必要的内容,具有这样内容作为某些位置(您想要获取,所以这不是一个选项)或正则表达式传递。

这是如何创建这样的正则表达式策略(在文档中查找所有“Dolor”和“dolor”实例,完全删除它们(从所有流中,以便它们既不会从 PDF 查看器中观察到,也不会在底层中找到) PDF 对象):

RegexBasedCleanupStrategy strategy = new RegexBasedCleanupStrategy("(D|d)olor").setRedactionColor(ColorConstants.GREEN);

这是如何使用它:

PdfAutoSweep autoSweep = new PdfAutoSweep(strategy);
autoSweep.cleanUp(pdf); // a PdfDocument instance

这是在出现不必要文本的位置上写一些文本的方法:

for (IPdfTextLocation location : strategy.getResultantLocations()) {
        Rectangle rect = location.getRectangle();
        // do something, for exapmle, write some text
}

推荐阅读