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-файлов подофобаузер показывал текст по-разному или не показывал вообще.