Есть ли какой-нибудь парсер PDF, написанный на target-c или c? - PullRequest
4 голосов
/ 03 января 2011

Я пишу приложение для чтения PDF-файлов для iPhone.

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

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

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

Я пробовал xpdf, но этонаписано на с ++.Я не знаю, как использовать код 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 ]

4 голосов
/ 03 января 2011

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

3 голосов
/ 17 июня 2011

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

https://github.com/KurtCode/PDFKitten

0 голосов
/ 03 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...