【问题标题】:Unable to print Non English (Latvian) Characters from pdf file correctly in Java using PDFBox?无法使用 PDFBox 在 Java 中正确打印 pdf 文件中的非英语(拉脱维亚)字符?
【发布时间】:2018-06-02 14:25:03
【问题描述】:
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.text.PDFTextStripper;
public class sample {
public static void main(String[] args) throws InvalidPasswordException, IOException {
    File file = new File("C:\\sample.pdf");
    PDDocument document = PDDocument.load(file);
    PDFTextStripper stripper = new PDFTextStripper();
    String text = stripper.getText(document);
    //java.io.PrintStream p = new java.io.PrintStream(System.out,false,"Cp921");
    //p.println(text.toString());
    System.out.println(text);
    }
}

文本是从 pdf 中读取的,但在使用 System.out.println 显示时,它会显示不同的输出。 然后我在网上阅读了不同的帖子,发现它与编码有关,我在这个问题上找到了解决方案:Text extracted by PDFBox does not contain international (non-English) characters 但我不得不对拉脱维亚字符使用 Cp921 的编码,但我仍然没有解决问题并且输出在这张图片中给出了

然后我通过调试过程发现从PDF读取的文本以精确的编码存储,没有任何更改,所以我不知道如何以正确的编码显示文本。任何帮助都将提前非常感谢。

示例 PDF 内容:[Maksātājs、Informācija、Vārdu krājums、Ēģipte、Plašs、Vājš、Brieži、Pērtiķi、Grāmatiņa、šķīvis]

在 Eclipse 中使用 System.out.println 进行控制台输出:

在 Eclipse 中使用 PrintStream 进行控制台输出:

附:我是初学者,我没有太多的编码经验

【问题讨论】:

    标签: java encoding pdfbox println printstream


    【解决方案1】:

    您可以通过修改系统属性file.encoding 或设置out 来更改系统。以下任何一项都应该有效:

    1. -Dfile.encoding=utf-8(或任何你需要的)作为 jvm 参数
    2. System.setProperty("file.encoding", "utf-8") -- 与 (1) 相同,但在运行时
    3. System.setOut(new PrintStream(System.out, true, "utf-8")) -- 将 System.out 设置为您需要的任何打印流。

    编辑

    您的评论提到您正在写入文件。要写入文件并指定编码,请考虑类似

    try (OutputStreamWriter writer =
             new OutputStreamWriter(new FileOutputStream(new File("path/to/file")), StandardCharsets.UTF_8))
        writer.write(text, 0, text.length());
    }
    

    请参阅文档here

    【讨论】:

    • 很高兴它对您有所帮助。如果您认为它足够,请考虑将答案标记为已接受。
    • 我试图将输出写入文件,当我从 eclipse 运行程序时它可以工作,但是当我将它导出到 Runnable jar 时,它会像图 1 一样写入文件。谁能帮我将此输出写入文件并将其导出到 jar
    • 你试过什么?你是如何写入文件的?您需要使用为 utf-8 配置的编写器。见stackoverflow.com/questions/1001540/…
    猜你喜欢
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多