我需要在pdf 中找到字符fi</a> :当我尝试在 java 中读取它时,它会导致PdfBox出现错误。<span>fi</span>
java.lang.IllegalArgumentException: U+FB01 ('fi') is not available in this font Times-Roman encoding: WinAnsiEncoding
在这种情况下,添加字体不是一种选择。我们更喜欢找到字符并用其他东西替换它。
问题是我无法使用 adobe reader 甚至 word 等普通工具找到字符。
因此,我在 java 中编写了一个程序,该程序逐个读取 char 并获取其 unicode 并将其与我正在寻找的 unicode U+FB01进行比较。
但我找不到它。您能否告诉我我的代码是否有问题,或者是否有其他方法可以找到该字符。
这是我的程序的小提琴:https ://www.jdoodle.com/iembed/v0/kaD
public class Main {
public static void main(String[] args) throws IOException {
Charset encoding = Charset.defaultCharset();
File file = new File(Main.class.getResource("spec.pdf").getFile());
handleFile(file, encoding);
}
private static void handleFile(File file, Charset encoding)
throws IOException {
try (InputStream in = new FileInputStream(file);
Reader reader = new InputStreamReader(in, encoding);
// buffer for efficiency
Reader buffer = new BufferedReader(reader)) {
handleCharacters(buffer);
}
}
private static void handleCharacters(Reader reader)
throws IOException {
int r;
while ((r = reader.read()) != -1) {
char ch = (char) r;
String unicode = getUnicodeValue(ch);
if(unicode.equals("\uFB01")){
System.out.println(ch);
}
System.out.println(unicode);
}
}
private static String getUnicodeValue(char c){
return "\\u" + Integer.toHexString(c | 0x10000).substring(1);
}
}