Я прочитал файл PDF с помощью PDFBOX в JAVA, преобразовал данные в текст и сохранил их в виде строки. Я обнаружил, что большая часть текстовых данных окружена X'C2A0 '. Например:

X'436C756233AC2A04469616D6F6E64C2A0'       Club:__Diamond__

__ - это X'C2A0 '

Я хочу выполнить поиск «Club: __», а затем выполнить синтаксический анализ двух __ для «Diamond». Я пробовал что-то вроде:

String TAG = "\\xC2A0";                     // Tag in PDF

int pos = text.indexOf(TAG, positionInText);

Но я никогда не получаю хитов. Как указать TAG?

РЕДАКТИРОВАТЬ:

Возможно, нужны пояснения. Я использовал PDFBOX как таковой:

   public void toText() throws IOException
   {
       this.pdfStripper = null;
       this.pdDoc = null;
       this.cosDoc = null;

       file = new File(filePath);
       parser = new PDFParser(new RandomAccessFile(file,"r"));      // update for PDFBox V 2.0

       parser.parse();
       cosDoc = parser.getDocument();
       pdfStripper = new PDFTextStripper();
       pdDoc = new PDDocument(cosDoc);
       pdDoc.getNumberOfPages();
       pdfStripper.setStartPage(1);
       pdfStripper.setEndPage(10);

       // reading text from page 1 to 10
       // if you want to get text from full pdf file use this code
       // pdfStripper.setEndPage(pdDoc.getNumberOfPages());

       text = pdfStripper.getText(pdDoc);

Текст - это поле, определенное как строка. Эта текстовая строка - это то, что я пытаюсь разобрать.

0
Peter Ream 27 Ноя 2016 в 23:51

2 ответа

Лучший ответ

Из вашего вопроса не совсем ясно, является ли строка, которую вы ищете, самой шестнадцатеричной кодировкой или является нормальной строкой символов, которая в файле содержит 2-байтовые последовательности со значениями символов 0xc2 0xa0.

Предполагая последний случай, в файле последовательность 0xc2a0 является кодировкой UTF-8 для кодовой точки Unicode 0xA0, которая представляет собой неразрывный пробел, соответствующий сущности  . в HTML.

Если файл содержит эти двухбайтовые последовательности, то при считывании в вашу строку Java (при условии, что вы использовали кодировку UTF-8 для интерпретации байтового потока), каждая из этих последовательностей станет одним 0xA0 в вашей строке .

Вы должны уметь написать регулярное выражение для поиска данных, разделенных парами из них.

1
Jim Garrison 27 Ноя 2016 в 22:18

@ Джим Гаррисон, твой ответ заставил меня искать. Я до сих пор не понимаю кодировку UTF-8. Ваши последние 2 абзаца были правильными. Я предполагаю, что PDFBOX использует UTF-8 для чтения файла PDF. Я использовал следующее:

private final String TAG = "\u00A0";                    // Tag &nbsp X'C2A0'

Для поиска и анализа данных между двумя тегами x'C2A0 '.

0
Peter Ream 28 Ноя 2016 в 15:05