无法使用 PDFBox 在 Java 中正确打印 pdf 文件中的非英语(拉脱维亚语)字符?

Unable to print Non English (Latvian) Characters from pdf file correctly in Java using PDFBox?

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:

P.S。我是初级程序员,我没有太多编码经验

您可以通过修改系统 属性 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