iText PdfTextExtractor 结果文本中缺少连字

2024-04-18

我正在尝试获取 pdf 文件并从中获取文本。

我发现了 iText 并一直在使用它,并取得了不错的成功。我剩下的一个问题是连字。

起初我注意到我只是缺少字符。经过一些搜索后,我发现了这个:http://support.itextpdf.com/node/25 http://support.itextpdf.com/node/25

当我知道我缺少的是连字时,我开始寻找解决问题的方法,但目前还没有找到解决方案。

这是我的代码:

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfTextExtractor;
import com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy;
import com.itextpdf.text.pdf.parser.FilteredTextRenderListener;
import java.io.File;
import java.io.OutputStreamWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;

import java.util.Formatter;
import java.lang.StringBuilder;


public class ReadPdf {

  private static String INPUTFILE = "F:/Users/jmack/Webwork/Redglue_PDF/live/ADP/APR/ADP_41.pdf";

  public static void writeTextFile(String fileName, String s) {    

    // s = s.replaceAll("\u0063\u006B", "just a test");
    s = s.replaceAll("\uFB00", "ff");
    s = s.replaceAll("\uFB01", "fi");
    s = s.replaceAll("\uFB02", "fl");
    s = s.replaceAll("\uFB03", "ffi");
    s = s.replaceAll("\uFB04", "ffl");
    s = s.replaceAll("\uFB05", "ft");
    s = s.replaceAll("\uFB06", "st");
    s = s.replaceAll("\u0132", "IJ");
    s = s.replaceAll("\u0133", "ij");

    FileWriter output = null;
    try {
      BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8"));
      writer.write(s);
      writer.close();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      if (output != null) {
        try {
          output.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

  public static void main(String[] args) {
    try {

      PdfReader reader = new PdfReader(INPUTFILE);
      int n = reader.getNumberOfPages();    

      String str = PdfTextExtractor.getTextFromPage(reader, 1, new SimpleTextExtractionStrategy());      
      writeTextFile("F:/Users/jmack/Webwork/Redglue_PDF/live/itext/read_test.txt", str);

    }
    catch (Exception e) {
      System.out.println(e);
    }     
  }
}

在上面引用的 PDF 中,有一行内容如下:

其设计差异的一部分是屋顶线

但是当我运行上面的 Java 类时,文本输出包含:

其设计差异的一部分是屋顶

请注意,差异变成了差异,屋顶线变成了屋顶线。

有趣的是,当我从 PDF 复制并粘贴到堆栈溢出文本字段时,它看起来也像第二个句子,其中两个连字“ff”和“fl”简化为简单的“f”。

我希望这里有人可以帮助我弄清楚如何捕获连字,并可能用它们代表的字符替换它们,例如将连字“fl”替换为实际的“f”和“l”。

我对 PDFTextExtractor 的输出进行了一些测试,并尝试用实际字符替换连字 unicode 字符,但发现这些连字的 unicode 字符在它返回的值中不存在。

看来 iText 本身一定是没有正确读取这些连字。我希望有人知道如何解决这个问题。

感谢您提供的任何帮助!

TLDR:使用 iText 将 PDF 转换为文本,缺少字符,发现它们是连字,现在我需要捕获这些连字,不知道如何去做。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iText PdfTextExtractor 结果文本中缺少连字 的相关文章

随机推荐