Невозможно правильно напечатать неанглийские (латышские) символы из PDF-файла на Java с помощью PDFBox? - PullRequest
0 голосов
/ 02 июня 2018
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 он показывает другой вывод.Затем я прочитал различные посты в Интернете и обнаружил, что это как-то связано с кодировкой, и нашел решение по этому вопросу: Текст, извлеченный из PDFBox, не содержит международных (не английских) символов , но мне пришлось использоватькодировка 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]

Вывод на консольЗатмение с использованием System.out.println:

Console output in Eclipse using System.out.println

Вывод на консоль при затмении с использованием PrintStream:

Console output in eclipse using PrintStream

PS Я начинающий программисти у меня не так много опыта в кодировании

1 Ответ

0 голосов
/ 02 июня 2018

Вы можете изменить систему, либо изменив системное свойство 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());
}

См. Документацию здесь .

...