Польские символы PoDoFo и ошибка PdfContentsTokenizer

1.

Как получить полированные символы из pdf-файла? Могу ли я как-то сказать

PdfVariant::getString()

он будет обрабатывать полированные символы? Потому что, например, я получаю \200 вместо ł, и самое смешное, что это происходит только тогда, когда ł встречается как первый «небазовый» символ. Таким образом, если файл pdf начинается с aaaałęąaaaa, ł кодируется как \200, ę как \201 и ą как \202 но если файл pdf начинается с aaaaąęłaaaa, ł кодируется как \202, ę как \201 и ą как \200 Как я могу получить эти символы в любой системе?

2.

Когда я пытаюсь извлечь текст из файла PDF, я делаю что-то вроде этого:

string input_name = "example.pdf";
PdfMemDocument pdf(input_name.c_str());
    for (int pn = 0; pn < pdf.GetPageCount(); ++pn) {
        PdfPage* page = pdf.GetPage(pn); 
        PdfContentsTokenizer tok(page);
        const char* token = nullptr;
        PdfVariant var;
        EPdfContentsType type;
        while (tok.ReadNext(type, token, var)) {
           //etc.

Но у меня проблема с PdfContentsTokenizer tok(page);. Он не работает должным образом. Для некоторых pdf-файлов все идет гладко, а для других выдает ошибку Access violation reading location в файле inffas32.asm, строка 669:

L_get_length_code_mmx:
pand mm4,mm0
movd eax,mm4
movq mm4,mm3
mov  eax, [ebx+eax*4]//this is the error line

Кстати, я заметил, что не все pdf-файлы закодированы одинаково. Например, используя podofobrowser, я не смог увидеть текст Hello World! из официального примера podofo helloworld. А для остальных pdf-файлов подофобаузер показывал текст по-разному или не показывал вообще.


person Fryderyk    schedule 26.01.2017    source источник


Ответы (1)


Объявление 1. Ссылка на файлы исправлений который позволяет извлекать текст из pdf с помощью TextExtractor.

Это самая важная строка, когда дело доходит до извлечения текста, отличного от юникода, из pdf:

PdfString unicode = pCurFont->GetEncoding()->ConvertToUnicode( rString, pCurFont );

Объявление 2. Проблема заключалась в неправильной сборке библиотеки zlib. Я его перепрошил, пересобрал подофо и проблема ушла.

person Fryderyk    schedule 20.03.2017
comment
Пересмотренные исправления были размещены здесь: sourceforge.net/p/podofo/mailman/message/35654027. - person Etienne; 21.03.2017
comment
Я попробовал TextExtractor. Он начал работать для ł, но не работает для ś и ć - person 18C; 26.08.2017
comment
18C, просто проверьте, что шрифт, который вы используете для отображения текста, имеет полированные символы :) - person Fryderyk; 27.08.2017