Zum Hauptinhalt springen
Wenn Sie mit Analyse-, Erkennungs- oder Syntheseergebnissen arbeiten, müssen Sie möglicherweise Dokumentseiten und deren Blöcke durchlaufen. Beachten Sie dabei, dass die Daten in den Arbeitsspeicher geladen werden, wenn Sie ein Dokumentelement (z. B. eine Seite oder einen Block) zur Anzeige oder Bearbeitung anfordern, und dort verbleiben, bis sie ausdrücklich entladen werden. Dies kann zu einem Fehler vom Typ „Nicht genügend Arbeitsspeicher“ führen. Um das zu verhindern, befolgen Sie die folgenden Empfehlungen.

Dokumentseiten durchlaufen

Wenn Sie die Verarbeitungsmethoden des Objekts FRDocument verwenden, werden Layouts und Bilddokumente unter Linux und macOS automatisch auf den Datenträger ausgelagert. Unter Windows können Layouts und Bilddokumente ebenfalls automatisch auf dem Datenträger gespeichert werden; dieses Verhalten hängt jedoch vom ausgewählten Wert der Eigenschaft PageFlushingPolicy ab. Wenn Sie jedoch eine Seite eines Dokuments und ihre Blöcke zum Anzeigen oder Bearbeiten anfordern, werden die Daten nicht automatisch ausgelagert oder gespeichert. Wenn Sie mehrere Seiten anzeigen oder bearbeiten, sollten Sie die Daten entladen, sobald Sie die Arbeit mit der jeweiligen Seite abgeschlossen haben. Das bedeutet, dass Sie die Methode Flush des Objekts FRPage aufrufen sollten.
Windows-Benutzer, die mit .NET arbeiten, sollten außerdem GC.Collect und GC.WaitForPendingFinalizers aufrufen.
Wenn Sie andererseits während des Durchlaufens der Seiten Änderungen vornehmen, müssen Sie die Methode Flush aufrufen, um diese Änderungen zu speichern. Andernfalls werden Ihre Änderungen, wenn Sie beispielsweise die Methode SaveToFolder oder eine der Exportmethoden des entsprechenden FRDocument aufrufen, zwar im Ordner (oder im exportierten Dokument) gespeichert, aber aus dem Objekt entfernt, mit dem Sie gerade arbeiten. Unter Windows hängt das Verhalten der Methode Flush vom Wert der Eigenschaft IFRDocument::PageFlushingPolicy ab. Wenn der Wert von PageFlushingPolicy PFP_FlushToDisk ist, werden beim Aufruf der Methode Layouts und Bilddokumente auf den Datenträger ausgelagert. Ist er PFP_Auto, werden die Daten beim Aufruf der Methode auf den Datenträger ausgelagert, wenn das Dokument mehr als 30 Seiten hat; andernfalls bleiben die Daten im Speicher. Ist er PFP_KeepInMemory, werden die Daten nicht ausgelagert. Das ist praktisch, wenn Sie in einer Lösung sowohl kleine als auch große Dokumente verarbeiten, da Sie für die Verarbeitung denselben Code verwenden können.

Windows-Beispiele

FREngine.IFRPages pages = document.Pages;
int pagesCount = pages.Count;
for (int i = 0; i < pagesCount; i++)
{
 FREngine.IFRPage page = pages.Item(i);
 // Seiten durchlaufen – mit Blöcken, Absätzen und Zeichen arbeiten
 iteratePage(page);
 // Den Garbage Collector zwingen, alle nicht referenzierten Objekte der Seite freizugeben
 GC.Collect();
 GC.WaitForPendingFinalizers();
 // Nicht verwendete Seitendaten entladen
 // Wenn die Seite in iteratePage() geändert wurde, Flush(true) aufrufen, um die Änderungen beizubehalten
 page.Flush(true);
 // Wenn die Änderungen nicht beibehalten werden müssen, Flush(false) aufrufen
 // page.Flush(false);
}
FREngine::IFRPagesPtr pages = document->Pages;
int pagesCount = pages->Count;
for( int i = 0; i < pagesCount; i++ ) {
 FREngine::IFRPagePtr page = pages->Item( i );
 // Seiten durchlaufen – mit Blöcken, Absätzen und Zeichen arbeiten
 iteratePage( page );
 // Nicht verwendete Seitendaten entladen
 // Wenn die Seite in iteratePage() geändert wurde, Flush( true ) aufrufen, um die Änderungen beizubehalten
 page->Flush( true );
 // Wenn die Änderungen nicht beibehalten werden müssen, Flush(false) aufrufen
 // page->Flush( false );
}
Siehe auch FRDocument Arbeiten mit Text