Есть ли какой-нибудь парсер PDF, написанный на target-c или c?

Я пишу приложение для чтения PDF для iPhone.

Я знаю, как показать PDF-файл с помощью классов CGPDF** в iOS.

Теперь я хочу найти текст в PDF-файле и выделить искомый текст. Итак, мне нужна библиотека, которая может определить, какой текст находится в какой позиции. Кроме того, я хочу, чтобы библиотека могла обрабатывать юникод и китайские символы.

Я искал несколько дней, но все еще не могу найти ничего подходящего.

Я пробовал xpdf, но он написан на C++. Я не знаю, как использовать код C++ в приложении для iPhone.

Я также пытался http://www.codeproject.com/KB/cpp/ExtractPDFText.aspx но он не обрабатывает китайские иероглифы.

Я пытался кодировать сам, но кодирование в PDF действительно сложно.

Например, я не знаю, к чему обращаться, когда я хочу декодировать текст следующим шрифтом:

8 0 obj
<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RNXJTV+PMingLiU
/DescendantFonts [ 157 0 R ] >>
endobj

157 0 obj
<< /Type /Font /Subtype /CIDFontType2 /BaseFont /RNXJTV+PMingLiU /CIDSystemInfo
<< /Registry (Adobe) /Ordering (CNS1) /Supplement 0 >> /FontDescriptor 158 0 R
/W 161 0 R /DW 1000 /CIDToGIDMap 162 0 R >>
endobj

158 0 obj
<< /Type /FontDescriptor /Ascent 801 /CapHeight 711 /Descent -199 /Flags 32
/FontBBox [0 -199 999 801] /FontName /RNXJTV+PMingLiU /ItalicAngle 0 /StemV
0 /Leading 199 /MaxWidth 1000 /XHeight 533 /FontFile2 159 0 R >>
endobj

3 ответа

Посмотрите на CGPDFScanner тип; его можно использовать для анализа PDF-документа на предмет наличия строк и конкретных операторов PDF.

В этом коде есть некоторые ошибки, которые можно легко исправить. Хорошо представлен код Objective C.

https://github.com/KurtCode/PDFKitten

CGPDFScanner может сканировать только содержимое PDF, но нет способа найти местоположение слова в PDF. Таким образом, выделение невозможно с использованием функций cgpdf. Также на сканер выводится закодированный текст для flateDecoded и других типов PDF. Он может сканировать только простые PDF-файлы, т.е. линейные PDF-файлы. (Откройте pdf в виде текстового файла, и в верхней части вы найдете слово Linearized pdf.) Возможное решение - использование библиотеки синтаксического анализа ac или c +, если вы ее получите. Также проект cpp из проекта кода будет только анализировать содержимое, но не будет давать никакой информации о местоположении. Написание парсера PDF самостоятельно сложно, потому что форматы PDF сложны и не исправлены. Содержание PDF может быть закодировано различными способами, такими как тип FlateDecode и т. Д.

Другие вопросы по тегам