2015-03-17 4 views
9

Haben Sie RM SDK für iOS verwendet? RM SDK speichert Annotation in folgendem Format:Adobe RM SDK Annotation

startBookmark = "#pdfloc(bd0d,0,101,5,2,0,0,1)"; 
endBookmark = "#pdfloc(bd0d,0,101,14,0,0,1,1)"; 

Wie können wir rect aus diesen zwei Linien?

Antwort

8

Die PDF-Positionen, die Sie haben, zeigen auf ein bestimmtes Objekt in einer PDF-Datei. Dieses Objekt bezieht sich nicht direkt auf eine (x, y) -Koordinate auf dem Bildschirm, da dies von der Auflösung und DPI abhängt, die Sie zum Rendern der PDF-Datei verwenden. Es hängt auch von der Rendering-Engine ab, die Sie zum Rendern der Datei verwenden.

Um eine Box in iOS zu zeichnen, müssen Sie sie mit (x, y) Koordinaten zeichnen. Sie müssen die (x, y) -Koordinaten der Box erhalten, die sich um die Anmerkungen herum befindet, mit denen Sie arbeiten. Sie können dies mit RMSDK unter Verwendung von getRangeInfo tun. Sie können auch die PDF-Standorte verwenden, die Sie oben haben, um zu der jeweiligen Anmerkung zu navigieren. Beachten Sie, dass die Box, die Sie zurück erhalten, nur für eine Wiedergabe Ihrer Datei mit den Parametern, die Sie haben, gültig ist. Wenn Sie einen der Parameter - RMSDK-Version, Navigationsmatrixwerte, dpi, Renderauflösung - ändern, müssen Sie neue Werte für die Box von RMSDK erhalten.

Hier ist ein Code, der Ihnen hilft, die (x, y) -Koordinaten von Ihren zwei Standorten mit RMSDK zu erhalten. Der Code ist für die C/C++ - Hauptbibliothek, da ich nicht sicher bin, wie Ihre Objective-C-Ebene aussieht. Je nachdem, welche Version von RMSDK Sie verwenden, kann dies unterschiedlich sein.

dpdoc::RangeInfo* rangeInfo = renderer->getRangeInfo(startBookmark, endBookmark); 
dpdoc::Rectangle* rect; 
rangeInfo->getBox(0, false, rect&); 

Dann wird die "rect" Variable (x, y) Koordinaten enthalten für die Boxen Sie zeichnen müssen. Beachten Sie, dass für jeweils zwei Koordinatensätze mehrere Felder vorhanden sein können. In diesem Fall müssen Sie sie durchlaufen.

Wenn Sie die Objective-C-Ebene haben, die normalerweise mit RMSDK geliefert wird, sollte es etwas einfacher sein. Sie Code in diesem Fall sollte wie folgt aussehen:

NSArray *boxes = nil; 
RMRangeInfo *rangeInfo = [document getRangeInfoWithStart:startBookmark end:endBookmark]; 
boxes = rangeInfo.boxes 

Dann können Sie die Anordnung von Boxen durchlaufen zu bekommen (x, y) und sich auf dem Bildschirm zeichnen. In den meisten Fällen erhalten Sie 1 Box, aber Sie sollten Fälle berücksichtigen, in denen Sie mehrere Boxen zeichnen müssen. Eine einfache Schleife sollte den Trick machen.

+0

Danke Vel Genov! – TechBee

+0

Danke Vel Genov! Kann CGPDFContentStreamRef helfen? – TechBee

+0

Die oben genannten Speicherorte sind für die RMSDK-Bibliothek eindeutig. Das ist der Grund, warum ich vorgeschlagen habe, RMSDK zu verwenden, um diese in (x, y) -Koordinaten umzuwandeln, die Sie dann verwenden können, um eine Box in iOS zu zeichnen. Sie können den vorhandenen PDF-Speicherort verwenden und zum Lesezeichen in RMSDK navigieren. Dann benutze getRangeInfoBox und erhalte die Koordinaten, die du zum Zeichnen der Box brauchst. Wie bereits erwähnt, denken Sie daran, dass Sie, wenn Sie Variablen ändern, die sich auf das Rendering auswirken, die Koordinaten auf die neue Box übertragen müssen. Das sollte gut funktionieren, ich habe es schon mal gesehen. –

Verwandte Themen