无法使用 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
来更改系统。以下任何一项都应该有效:
-Dfile.encoding=utf-8
(或任何你需要的)作为 jvm 参数
System.setProperty("file.encoding", "utf-8")
-- 与 (1) 相同,但在运行时
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。
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
来更改系统。以下任何一项都应该有效:
-Dfile.encoding=utf-8
(或任何你需要的)作为 jvm 参数System.setProperty("file.encoding", "utf-8")
-- 与 (1) 相同,但在运行时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。