2015-03-17 12 views
9

Avete usato RM SDK per iOS? RM SDK salva l'annotazione nel seguente formato:Adobe RM SDK Annotazione

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

Come possiamo ottenere rect da queste 2 righe?

risposta

8

I percorsi PDF in cui ci si trova puntano a un oggetto particolare in un file PDF. Questo oggetto non si riferisce direttamente a una coordinata (x, y) sullo schermo, poiché ciò dipende dalla risoluzione e dal DPI che si usa per rendere il file PDF. Dipende anche dal motore di rendering che si usa per rendere il file.

Per disegnare una casella in iOS, è necessario disegnarla utilizzando le coordinate (x, y). È necessario ottenere le coordinate (x, y) della casella attorno alle annotazioni con le quali si sta lavorando. È possibile farlo con RMSDK utilizzando getRangeInfo. Puoi anche utilizzare le posizioni PDF che hai sopra per navigare verso la specifica annotazione. Tieni presente che la casella che riceverai è valida solo per una rappresentazione del tuo file, con i parametri che hai. Se si modifica uno dei parametri: versione RMSDK, valori della matrice di navigazione, dpi, risoluzione di rendering, sarà necessario ottenere nuovi valori per la casella da RMSDK.

Ecco un codice che ti aiuterà a ottenere le coordinate (x, y) dalle tue due posizioni usando RMSDK. Il codice è per la libreria C/C++ principale, dal momento che non sono sicuro di come sia il tuo layer Objective-C. Potrebbe essere diverso a seconda della versione di RMSDK che si sta utilizzando.

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

Quindi la variabile "rect" conterrà (x, y) le coordinate, per le scatole è necessario disegnare. Si noti che potrebbero esserci più caselle per ogni 2 set di coordinate. In tal caso, dovrai scorrere su di loro.

Se si dispone del livello Objective-C che di solito viene fornito con RMSDK, dovrebbe essere leggermente più semplice. È il codice in questo caso dovrebbe essere simile a questo:

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

Quindi è possibile scorrere la matrice di scatole per ottenere (x, y) e disegnare sullo schermo. Nella maggior parte dei casi avrai 1 scatola, ma dovresti tenere conto dei casi in cui hai più caselle da disegnare. Un semplice ciclo dovrebbe fare il trucco.

+0

Grazie a Vel Genov! – TechBee

+0

Grazie Vel Genov! È possibile utilizzare CGPDFContentStreamRef? – TechBee

+0

Le posizioni in precedenza sono univoche per la libreria RMSDK. Questa è la ragione per cui ho suggerito di usare RMSDK per convertirli in coordinate (x, y), quindi puoi usare per disegnare una scatola in iOS. È possibile utilizzare la posizione PDF in uso e accedere al segnalibro in RMSDK. Quindi utente getRangeInfoBox e ottieni le coordinate necessarie per disegnare la casella. Come ho detto prima, tieni presente che se cambi le variabili che influenzeranno il rendering, dovrai ottenere le coordinate nella nuova casella. Questo dovrebbe funzionare bene, l'ho visto fare prima. –