- Utilizzare l’oggetto OutprocLoader per elaborare un documento e ottenere un layout per ogni pagina. Scrivere il layout ottenuto in un flusso di dati tramite il metodo SaveToStream.
- Utilizzare l’oggetto InprocLoader per ripristinare una copia del layout originale con il metodo CreateLayoutFromStream. Utilizzare questa copia per la successiva iterazione del contenuto del layout.
- Utilizzare l’oggetto Engine caricato come server out-of-process per elaborare un documento e ottenere un layout per ogni pagina. Scrivere il layout ottenuto come array di byte tramite il metodo SaveToArray.
- Utilizzare l’oggetto Engine caricato in modo nativo (ossia caricato nel processo corrente dalla libreria libFREngine.so) per leggere l’array di byte ottenuto con la propria implementazione dell’interfaccia IReadStream.
- Utilizzare l’oggetto Engine caricato in modo nativo per ripristinare una copia del layout originale con il metodo CreateLayoutFromStream. Utilizzare questa copia per la successiva iterazione del contenuto del layout.
Blocchi di Layout
Blocco di testo
Blocco di testo
Questo tipo di blocco corrisponde a una zona dell’immagine riconosciuta come testo formattato. È possibile accedere alle proprietà di questo blocco tramite l’oggetto TextBlock. Questo oggetto fornisce anche l’accesso al testo riconosciuto nella parte dell’immagine racchiusa dal blocco.
Blocco di tabella
Blocco di tabella
Questo tipo di blocco corrisponde a una tabella. I blocchi di questo tipo possono essere solo rettangolari, poiché la regione contiene un solo rettangolo. Alle proprietà di questo tipo di blocco si accede tramite l’oggetto TableBlock. La struttura della tabella è descritta da due raccolte di separatori di tabella, orizzontali e verticali (gli oggetti TableSeparators), e da una raccolta di celle della tabella (l’oggetto TableCells). Ogni cella della tabella viene trattata come un blocco di un determinato tipo. Il testo riconosciuto è una proprietà della singola cella, non dell’intera tabella. Se una cella è un’immagine, l’immagine contenuta nei limiti della cella non viene riconosciuta e viene visualizzata come immagine nel testo riconosciuto. I separatori di tabella possono essere di tipi diversi. Il tipo di separatore viene definito per un segmento di separatore compreso tra le intersezioni più vicine con altri separatori. I separatori possono essere dei seguenti tipi:
- Assente. Questo tipo viene assegnato ai separatori di tabella che “dovrebbero passare” attraverso celle unite.
- Sconosciuto. Questo tipo viene assegnato per impostazione predefinita a ogni nuovo separatore di tabella aggiunto.
- Invisibile. Questo tipo viene assegnato a un separatore di tabella “immaginario” creato come risultato dell’analisi della struttura della tabella in un punto in cui la tabella di origine non ne aveva uno, ma in cui logicamente dovrebbe esserci.
- Esplicito. I separatori di tabella di questo tipo compaiono dove si trovano le linee nere della tabella di origine.
-
Multiplo. Questo tipo di separatore può comparire come risultato della modifica della tabella.

Blocco immagine raster
Blocco immagine raster
Questo tipo di blocco rappresenta una zona dell’immagine trattata come immagine raster. La parte dell’immagine racchiusa da questo blocco non viene riconosciuta e il blocco viene esportato “così com’è”. Le proprietà di questo tipo di blocco sono rappresentate dall’oggetto RasterPictureBlock.
Blocco immagine vettoriale
Blocco immagine vettoriale
Questo tipo di blocco rappresenta una zona dell’immagine trattata come immagine vettoriale. I blocchi di questo tipo possono comparire nel layout solo se una pagina è stata analizzata con la proprietà IPageAnalysisParams::DetectVectorGraphics impostata su TRUE. Di solito, le immagini di sfondo vengono riconosciute come blocchi di questo tipo. Le proprietà di questo tipo di blocco sono rappresentate dall’oggetto VectorPictureBlock.
Blocco barcode
Blocco barcode
Una parte dell’immagine racchiusa in un blocco di questo tipo viene trattata come un barcode. ABBYY FineReader Engine riconosce barcode di diversi tipi e può anche rilevarne automaticamente il tipo. Le informazioni lette da un barcode riconosciuto sono accessibili tramite le proprietà specifiche del blocco barcode rappresentate dall’oggetto BarcodeBlock.
Blocco segno di spunta
Blocco segno di spunta
Una parte dell’immagine racchiusa in un blocco di questo tipo viene trattata come un segno di spunta. Corrisponde a un’area dell’immagine riconosciuta come segno di spunta. Le informazioni lette da un segno di spunta riconosciuto sono accessibili tramite le proprietà specifiche del blocco segno di spunta rappresentate dall’oggetto CheckmarkBlock.
Blocco gruppo di segni di spunta
Blocco gruppo di segni di spunta
Una parte dell’immagine racchiusa in un blocco di questo tipo viene trattata come un gruppo di segni di spunta. Corrisponde a un’area dell’immagine riconosciuta come gruppo di segni di spunta. Le informazioni lette da un gruppo di segni di spunta riconosciuto sono accessibili tramite le proprietà specifiche del blocco gruppo di segni di spunta rappresentate dall’oggetto CheckmarkGroup.
Blocco separatore
Blocco separatore
Una parte dell’immagine racchiusa in un blocco di questo tipo viene trattata come un separatore. I separatori sono linee rilevate durante l’analisi del layout della pagina. Possono essere parti di una tabella, linee che separano diversi elementi di testo e così via. Le coordinate e il tipo di un separatore sono accessibili tramite l’oggetto SeparatorBlock.
Blocco gruppo di separatori
Blocco gruppo di separatori
Una parte dell’immagine racchiusa in un blocco di questo tipo viene trattata come un gruppo di separatori. Corrisponde a una zona dell’immagine riconosciuta come gruppo di separatori. Un gruppo di separatori include solitamente quattro separatori che formano un rettangolo. Ad esempio, le quattro linee del bordo di una tabella vengono riconosciute come un gruppo di separatori. Ogni gruppo di separatori contiene una raccolta di blocchi separatore. Le proprietà specifiche di un blocco gruppo di separatori sono rappresentate dall’oggetto SeparatorGroup.
Esistono anche i blocchi di autoanalisi, utilizzati solo nei Visual Components (parte di FRE per Windows). Non possono essere creati né riconosciuti tramite FineReader Engine API. Sono disponibili solo tramite la proprietà ILayout::VisualBlocks.
Aggiunta manuale dei blocchi
- Aprire l’oggetto FRPage e ottenere il layout della pagina tramite la proprietà Layout.
- Creare un oggetto Region per il blocco usando il metodo IEngine::CreateRegion e aggiungervi i rettangoli usando il metodo IRegion::AddRect.
- Creare un blocco del tipo richiesto e aggiungerlo alla raccolta dei blocchi del layout usando il metodo AddNew dell’oggetto LayoutBlocks.
- Impostare i parametri richiesti del blocco (usare l’oggetto delle proprietà del blocco corrispondente al tipo di blocco).
Modificare il tipo di blocco
- Crea un oggetto Region usando il metodo IEngine::CreateRegion e copia la regione del blocco che devi sostituire con il metodo IRegion::CopyFrom.
- Elimina il vecchio blocco dal Layout chiamando il metodo ILayoutBlocks::DeleteAt.
- Crea un nuovo blocco del tipo richiesto e aggiungilo alla raccolta di blocchi del Layout usando il metodo AddNew dell’oggetto LayoutBlocks. Passa la Region copiata dal vecchio blocco come uno dei parametri richiesti.
