0

我需要在pdf 中找到字符fi</a> :当我尝试在 java 中读取它时,它会导致PdfBox出现错误。<span>&#64257;</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);
    }
}
4

0 回答 0