我正在尝试获取一个 pdf 文件并从中获取文本。
我找到了 iText 并一直在使用它,并且取得了不错的成功。我剩下的一个问题是连字。
起初我注意到我只是缺少字符。在做了一些搜索后,我发现了这个: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 复制并粘贴到 stackoverflow 的文本字段时,它看起来也像第二个句子,两个连字“ff”和“fl”简化为“f”s。
我希望这里有人可以帮助我弄清楚如何捕捉连字,并可能将它们替换为它们所代表的字符,例如将连字“fl”替换为实际的“f”和“l”。
我对 PDFTextExtractor 的输出进行了一些测试,并尝试用实际字符替换连字 unicode 字符,但发现这些连字的 unicode 字符在它返回的值中不存在。
似乎它必须是 iText 本身没有正确读取这些连字的东西。我希望有人知道如何解决这个问题。
感谢您提供的任何帮助!
TLDR:使用 iText 将 PDF 转换为文本,缺少字符,发现它们是连字,现在我需要捕获这些连字,不知道该怎么做。