2011-01-03 14 views
4

Ich schreibe eine PDF-Reader iPhone-Anwendung.Gibt es in objective-c oder c einen PDF-Parser?

Ich weiß, wie man PDF-Datei in Sicht mit CGPDF ** Klassen in iOS anzeigen.

Was ich jetzt tun möchte, ist Text in PDF-Datei zu suchen, und markieren Sie den gesuchten Text. Also brauche ich eine Bibliothek, die erkennen kann, welcher Text in welcher Position ist. Außerdem möchte ich, dass die Bibliothek mit Unicode und chinesischen Zeichen umgehen kann.

Ich habe für ein paar Tage gesucht, aber immer noch nichts passendes finden.

Ich habe xpdf versucht, aber es ist in C++ geschrieben. Ich weiß nicht, wie man C++ Code in der iPhone App benutzt.

Ich habe auch versucht http://www.codeproject.com/KB/cpp/ExtractPDFText.aspx , aber es behandelt nicht chinesische Schriftzeichen.

Ich habe versucht, selbst zu codieren, , aber die Codierung in PDF ist wirklich kompliziert.

Zum Beispiel weiß ich nicht, was zu verweisen, wenn ich will den Text durch die folgende Schrift entschlüsseln:

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 
+1

C++ in iPhone App: Objective-C++ .. versuchen, die '.mm' Erweiterung mit und gehen von dort ... hier ist ein Link Sie zu erhalten begonnen: http://iphonedevelopertips.com/ cpp/c-on-iphone-part-1.html –

+0

Vielen Dank! Ich mache einige Änderungen und schließlich die C++ - Bibliothek arbeiten. Chinesische Schriftzeichen korrekt dekodieren! Jetzt versuche ich genau zu verstehen, wo ich die Positionsinformationen bekommen kann. – user549683

+0

Hey! Ich möchte auch Text in PDF-Datei suchen und markieren Sie den gesuchten Text. Welchen Weg du gewählt hast? Funktioniert es? –

Antwort

4

einen Blick auf die CGPDFScanner Art nehmen; Es kann verwendet werden, um ein PDF-Dokument nach Zeichenfolgen und bestimmten PDF-Operatoren zu analysieren.

+1

Danke für Ihre Antwort. Ich habe CGPDFScanner schon ausprobiert, aber wenn ich mich mit der Schrift- und Textcodierung beschäftige, wird es sehr kompliziert. – user549683

+2

Tatsächlich tut es das. PDF-Parsing * ist * kompliziert. –

0

CGPDFScanner kann nur den pdf-Inhalt scannen, aber es gibt keine Möglichkeit, den Speicherort des Wortes in der PDF zu finden. Daher ist das Markieren mit cgpdf-Funktionen nicht möglich. Auch der Scanner-Ausgang ist kodierter Text für flateDecoded und andere Arten von pdf. Es kann nur einfache PDFs, d. H. Lineare PDFs scannen. (Öffnen Sie das PDF als Textdatei und oben finden Sie das Wort Linearized pdf.) Mögliche Lösung wäre die Verwendung einer C oder C + Parsing-Bibliothek, wenn Sie eine bekommen. Auch das cpp-Projekt aus dem Codeprojekt analysiert nur den Inhalt, gibt jedoch keine Standortinformationen an. Das Schreiben eines PDF-Parsers ist komplex, weil PDF-Formate kompliziert und nicht fest sind. Pdf-Inhalt kann auf verschiedene Arten wie FlateDecode-Typ usw. codiert werden.

+2

Es ist definitiv möglich, die Positionen der Wörter auf der Seite mit CGPDFScanner (ich habe eine App, die dies tut) zu finden, es ist nur * viel * Arbeit. Ihr Kommentar darüber, nur "einfache" PDFs scannen zu können, ist inkorrekt, es verarbeitet praktisch jedes PDF. Auch ist das linearisierte pdf keine vereinfachte Form von pdf, es ist eine speziell für das Streaming optimierte Variante, hat nichts mit der Kodierung zu tun. – omz

+0

oh. Das ist großartig und hören Sie zu.Ich habe das viel versucht und bin zu einem solchen Schluss gekommen. Danke, um einen Kommentar zu diesem Sprichwort hinzuzufügen, dass es möglich ist. Bitte können Sie mir helfen, ein Wort in pdf zu suchen. Brauche wirklich deine Hilfe. – Snehal

+0

Scan der "Tm" -Operator wird sechs Zahlen bekommen, die etwas mit der Position des Wortes zusammenhängen. Sie können auch "cm" -Operator versuchen und Breiteninformationen in Schriftart suchen. CGPDFStreamCopyData kann Text mit FlateDecode dekodieren. – user549683

Verwandte Themen