Zum Hauptinhalt springen
Wenn Sie eine Document Splitter Skill erstellen, endet der Dokumentverarbeitungsfluss mit einer Splitter-Skript-Aktivität. Dieser letzte Schritt dient dazu, den Seitenfluss in einem Vorgang in eine Reihe von Dokumenten aufzuteilen. Im Gegensatz zu anderen Aktivitäten verarbeitet diese Aktivität alle Seiten in einem Vorgang gleichzeitig.

Einrichten der Aktivität

Gehen Sie wie folgt vor, um die Aktivität einzurichten:
  1. Fügen Sie mögliche Dokumenttypen hinzu, indem Sie im Bereich Splitter Script Properties auf das Plus-Symbol klicken und nacheinander Klassen erstellen.
  2. Klicken Sie im Bereich Splitter Script Properties auf Script Editor.
  3. Richten Sie ein Skript ein, das festlegt, wie Seiten zu Dokumenten zusammengeführt werden. Das Skript hat Zugriff auf alle Seiten eines Vorgangs. Ein gängiges Vorgehen ist, über die Seiten zu iterieren und jeweils zu prüfen, ob eine Seite ein neues Dokument beginnt. Wenn nicht, wird sie dem vorherigen Dokument hinzugefügt. Eine ausführliche Beschreibung der Objekte, die in Ihrem Skript verwendet werden können, finden Sie unter Object model.
  4. Klicken Sie auf Save.

Beispielskripte

In diesem Abschnitt finden Sie Beispielskripte zu verschiedenen Anwendungsfällen des Skills „Document Splitter“. Alle folgenden Skriptbeispiele setzen voraus, dass in der Dokumentdefinition ein Feld mit dem Namen „ResultClassId“ vorhanden ist. Dieses Feld sollte die Dokumentklasse enthalten.

Trennen von Dokumenten desselben Typs

Die Eingabedatei enthält Rechnungen eines Vendor für einen bestimmten Zeitraum. Die erste Seite jeder Rechnung enthält die Rechnungsnummer. Die erste Seite eines Dokuments kann spezifische Daten enthalten, z. B. einen Titel oder eine Rechnungsnummer. Um festzustellen, ob die aktuelle Seite die erste Seite eines neuen Dokuments ist, prüfen Sie, ob das entsprechende Feld auf der Seite gefunden wurde. Sie können außerdem die Feldwerte auf den aufeinanderfolgenden Seiten analysieren (z. B. Seitenzahlen oder Rechnungsnummern). Im folgenden Beispiel vergleichen wir die auf zwei aufeinanderfolgenden Seiten gefundenen Rechnungsnummern und prüfen, ob das Feld „FirstPageMarker“ auf der aktuellen Seite gefunden wurde. Wenn das Feld gefunden wurde oder sich die Rechnungsnummer unterscheidet, gilt die aktuelle Seite als erste Seite eines neuen Dokuments.
var documents = [];
var currentDocument = null;
var currentInvoiceNumber = "";

for (let i = 0; i < Context.Pages.length; i++)
{
    const page = Context.Pages[i];
    let invoiceNumberField = page.GetField("InvoiceNumber");
    let invoiceNumberNormalized = invoiceNumberField.Text.replace(/[. -]/g, '');
    let firstPageMarker = page.GetField("FirstPageMarker");
    var hasInvoiceNumber = invoiceNumberField !== null &&  invoiceNumberNormalized !== "";
    var hasNewInvoiceNumber = hasInvoiceNumber && invoiceNumberNormalized !== currentInvoiceNumber;
    var hasFirstPageMarker = firstPageMarker !== null && firstPageMarker.Text;

    if (!currentDocument || hasNewInvoiceNumber || (!hasInvoiceNumber && hasFirstPageMarker))
    { 
        currentDocument = new Document('invoice');
        documents.push(currentDocument);
    }

    if (hasInvoiceNumber)
    {
        currentInvoiceNumber =  invoiceNumberNormalized;
    }
 
    currentDocument.Pages.push(page);
}

return documents;

Dokumente trennen und Anhänge entfernen

Das Dokument enthält einen Anhang oder leere Seiten, die ohne Datenextraktion gespeichert werden sollen. Um festzustellen, ob das Dokument einen Anhang oder leere Seiten enthält, prüfen Sie, ob es Seiten gibt, auf denen sich keine verwertbaren Daten finden. Fügen Sie beispielsweise ein Feld hinzu, das nach einem beliebigen Wort sucht, und behandeln Sie alle Seiten, auf denen keine Wörter gefunden wurden, als leer. Im folgenden Beispiel trennen wir leere von nicht leeren Seiten anhand des Texts eines Felds.
var empty = new Document('empty'); 
var invoice = new Document('invoice'); 

for (let i = 0; i < Context.Pages.length; i++) { 
    const page = Context.Pages[i]; 

    // Textwert der Eigenschaft „Field" der aktuellen Seite abrufen 
    var currentResult = page.GetField("Field").Text; 

    // Prüfen, ob das aktuelle Ergebnis eine Länge größer als 0 hat 
    if (currentResult.length > 0) { 
        invoice.Pages.push(page); 
    } else { 
        empty.Pages.push(page); 
    } 
}

return [invoice, empty];

Dokumente trennen und ihren Typ bestimmen

Fall 1. Jeder Dokumenttyp wird durch ein einzelnes Dokument repräsentiert

Ein Kreditantrag enthält Dokumente unterschiedlichen Typs. Jeder Typ wird durch ein einzelnes Dokument repräsentiert. Alle Dokumente werden in einer einzigen Datei bereitgestellt. Um festzustellen, ob die aktuelle Seite die erste Seite eines neuen Dokuments ist, können Sie einfach ihre Klasse mit der Klasse der vorherigen Seite vergleichen.
var documents = [];
var currentResultClassId = null;
var currentDocument = null;

for (let i = 0; i < Context.Pages.length; i++)
{
    const page = Context.Pages[i];
    const pageResultClassId = page.GetField('ResultClassId').Text;

    // Prüfen, ob die aktuelle Seite dieselbe Klasse wie die vorherige Seite hat. Falls nicht, ein neues Dokument beginnen.
    if (pageResultClassId != currentResultClassId || !currentDocument)
    {
        currentResultClassId = pageResultClassId;
        currentDocument = new Document(pageResultClassId);
        documents.push(currentDocument);
    }

    currentDocument.Pages.push(page);
}

return documents;

Fall 2. Jeder Dokumenttyp wird durch ein oder mehrere Dokumente vertreten

Ein von zwei Mitantragstellern eingereichter Kreditantrag enthält eine große Anzahl von Dokumenten unterschiedlicher Typen. Jeder Typ kann durch mehrere Dokumente in Folge vertreten sein. Beispielsweise kann ein Antrag Bilder der Ausweise beider Mitantragsteller, mehrere Kontoauszüge usw. enthalten. Um festzustellen, dass die aktuelle Seite die erste Seite eines neuen Dokuments ist, müssen Sie die beiden oben beschriebenen Strategien kombinieren. Im folgenden Beispiel vergleichen wir zunächst die Klassen der beiden aufeinanderfolgenden Seiten. Wenn sich die Klasse geändert hat, wird die aktuelle Seite als erste Seite eines neuen Dokuments betrachtet. Wenn die Seiten zur gleichen Klasse gehören, prüfen wir, ob das Feld “title” auf der aktuellen Seite gefunden wurde. Die Seite, auf der dieses Feld gefunden wurde, gilt als erste Seite eines neuen Dokuments.
var documents = [];
var currentResultClassId = null;
var currentDocument = null;

for (let i = 0; i < Context.Pages.length; i++)
{
    const page = Context.Pages[i];
    const pageResultClassId = page.GetField('ResultClassId').Text;

    // Prüfen, ob die aktuelle Seite dieselbe Klasse hat wie die vorherige Seite. Falls nicht, ein neues Dokument beginnen.
    if (pageResultClassId != currentResultClassId)
    {
        currentResultClassId = pageResultClassId;
        currentDocument = new Document(pageResultClassId);
        documents.push(currentDocument);
    }
    // Ein neues Dokument beginnen, wenn das Feld „Title" auf der aktuellen Seite gefunden wurde.
    else if (page.GetField("Title").Text || !currentDocument)
    {
        currentDocument = new Document(pageResultClassId);
        documents.push(currentDocument);
    }

    currentDocument.Pages.push(page);
}

return documents;

Seiten neu anordnen und leere Seiten entfernen

Das Dokument enthält Seiten, die in der falschen Reihenfolge angeordnet sind. Jede Seite enthält ein Feld, das ihre Nummer angibt (zum Beispiel „Seite 1 von 10“). Um die Seiten korrekt anzuordnen, müssen Sie ein Feld erstellen, das die Seitenzahlen extrahiert. Außerdem können Sie ein Feld erstellen, das angibt, ob eine Seite leer ist oder nicht, indem auf dieser Seite nach Text gesucht wird. Dies kann verwendet werden, um leere oder unerwünschte Seiten zu verwerfen (z. B. solche, die durch Duplex-Scans von Seiten mit leerer Rückseite entstehen), wie im Abschnitt Dokumente trennen und Anlagen entfernen beschrieben. Im folgenden Beispiel ordnen wir die Seiten gemäß ihren Nummern neu.
var documents = new Document('document'); 
var currentDocument = null; 
let arr = []; 

for (let i = 0; i < Context.Pages.length; i++) { 
    arr[i] = Context.Pages[i]; 
} 

// Sortiert das „arr"-Array basierend auf den numerischen Werten eines bestimmten Feldes auf jeder Seite
arr.sort((page1, page2) => parseInt(page1.GetField("Field").Text) - parseInt(page2.GetField("Field").Text));

// Iteriert über das sortierte „arr"-Array und fügt jedes „page"-Objekt zur „Pages"-Eigenschaft des „documents"-Dokuments hinzu
for (let i = 0; i < arr.length; i++) { 
    const page = arr[i]; 
    documents.Pages.push(page); 
} 

return [documents];