Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core JavaScript-API
Dieses Modul bietet Funktionen zum Bearbeiten von PDF-Dokumenten.
Binden Sie die Bibliothek stets am Anfang eines Skripts ein:
let pdf = require('common/pdf');
Liest die Anzahl der Seiten aus einem PDF.
Beispiel
pdf.getNumberOfPages(obj);
Liest Metadaten aus einem PDF.
Übergeben wird eine ObjektId oder ein vollqualifizierter Pfad aus agorum core die / der ein PDF-Dokument darstellt, von dem die Metadaten gelesen werden sollen.
Hinweis: Wenn ein PDF-Dokument verschlüsselt ist, können keine Metadaten ausgelesen werden und die Funktion wirft einen Fehler.
Beispiel
let pdf = require('common/pdf'); let metadataDefinition = pdf.readMetadata(ObjektId/Pfad des PDF-Dokuments);
Ergebnis des Aufrufs
Das Ergebnis besteht aus dem XML-JavaScript-Format, da es sich bei Metadaten in einem PDF-Dokument um eine XMP-XML-Struktur handelt.
Informationen zum XML-JavaScript-Format siehe JavaScript-Bibliothek common/xml.
{ type: 'DocumentFragmentNode', children: [ { name: 'xpacket', type: 'ProcessingInstructionNode', value: 'begin=\"\uFEFF\" id=\"W5M0MpCehiHzreSzNTczkc9d\"', attributes: [ ], children: [ ] }, { name: 'x:xmpmeta', type: 'ElementNode', children: [ { name: 'rdf:RDF', type: 'ElementNode', children: [ { name: 'rdf:Description', type: 'ElementNode', children: [ { name: 'agorum:testProperty', type: 'ElementNode', value: 'testValue', children: [ ], attributes: [ ], } ], attributes: [ { name: 'xmlns:agorum', value: 'http://agorum.com/agorum/1.0' } ], } ], attributes: [ { name: 'xmlns:rdf', value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' } ] } ], attributes: [ { name: 'xmlns:x', value: 'adobe:ns:meta/' } ] }, { name: 'xpacket', type: 'ProcessingInstructionNode', value: 'end=\"w\"', children: [ ], attributes: [ ], } ] }
Schreibt Metadaten auf ein PDF-Dokument.
Übergeben werden:
Eine Metadaten-Definition kann entweder durch das Lesen von Metadaten eines PDF-Dokuments erstellt werden oder durch die Hilfsfunktion dieser Bibliothek.
Wenn die übergebene Metadaten-Definition fehlerhaft ist, wirft die Funktion einen Fehler.
Hinweis: Wenn ein PDF-Dokument verschlüsselt ist, können keine Metadaten geschrieben werden und die Funktion wirft einen Fehler.
Beispiel
let pdf = require('common/pdf'); let xml = require('common/xml'); pdf.writeMetadata(ObjektId/Pfad des PDF-Dokuments, { type: 'DocumentFragmentNode', children: [ { name : 'xpacket', type : xml.PROCESSING_INSTRUCTION_NODE, value : 'begin=\"\uFEFF\" id=\"W5M0MpCehiHzreSzNTczkc9d\"' }, { name: 'x:xmpmeta', type: xml.ELEMENT_NODE, children: [ { name : 'rdf:RDF', type : xml.ELEMENT_NODE, children: [ { name : 'rdf:Description', type : xml.ELEMENT_NODE, children: [ { name : 'agorum:testProperty', type : xml.ELEMENT_NODE, value : 'testValue' } ], attributes: [ { name : 'xmlns:agorum', value : 'http://agorum.com/agorum/1.0' } ] } ], attributes: [ { name : 'xmlns:rdf', value : 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' } ], } ], attributes: [ { name : 'x:xmptk', value : 'XMP Core 5.5.0' }, { name : 'xmlns:x', value : 'adobe:ns:meta/' } ] }, { name : 'xpacket', type : xml.PROCESSING_INSTRUCTION_NODE, value : 'end=\"w\"' } ] });
Erstellt eine für XMP gültige Metadaten-Definition.
Rückgabewert der Funktion ist eine komplett angelegte Metadaten-Definition, die mit eigenen Schemas und Propertys gefüllt werden kann.
Beispiel
let pdf = require('common/pdf'); let metadataDefinition = pdf.createMetadataDefinition()
Ergebnis des Aufrufs
{ type: 'DocumentFragmentNode', children: [ { name: 'xpacket', type: 'ProcessingInstructionNode', value: 'begin=\"\uFEFF\" id=\"W5M0MpCehiHzreSzNTczkc9d\"' }, { name: 'x:xmpmeta', type: 'ElementNode', children: [ { type: 'ElementNode', name: 'rdf:RDF', attributes: [ { name: 'xmlns:rdf', value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' } ], } ], attributes: [ { name: 'xmlns:x', value: 'adobe:ns:meta/' } ] }, { name: 'xpacket', type: 'ProcessingInstructionNode', value: 'end=\"r\"' } ] }
Erstellt ein Custom-Schema für eine Metadaten-Definition.
Hinweis: Andere XMP-Schemas werden von der Bibliothek nicht unterstützt
Sie können der Funktion übergeben:
Namespace
Den Namespace benötigen Sie, um die einzelnen Schemas und somit Metadaten-Definitionen innerhalb eines PDF-Dokuments zu unterscheiden.
Beschreibungs-URL
Die Beschreibungs-URL für das Schema gibt für Parser der XML-Struktur Auskunft über die Schema-Definition und ist essenziell für das korrekte Interpretieren der gespeicherten Informationen.
Beschreibungstext des Schemas
Als zusätzliche Informationsquelle können Sie einen Beschreibungstext übergeben, der grob beschreibt, um welche Daten es sich in diesem Schema handelt. Für die Übergabe zwingend notwendig sind folgende Parameter:
Als Rückgabewert sieht die Funktion eine fertige XML-JavaScript-Struktur vor, in der Propertys oder die Struktur einer Metadaten-Definition eingefügt werden können.
Beispiel
let pdf = require('common/pdf'); let customSchema = pdf.createCustomSchema('NAMESPACE', 'URI', 'ABOUT');
Ergebnis des Aufrufs
Das Ergebnis ist vom Format der Struktur her immer gleich. Lediglich die Werte können sich zu den eingetragenen Informationen ändern:
{ type: 'ElementNode' children: [ ], name: 'rdf:Description', attributes: [ { name: 'xmlns:NAMESPACE', value: 'URI' }, { name: 'rdf:about', value: 'ABOUT' } ], }
Erstellt ein Property für ein XMP-Schema.
Sie können der Funktion folgende Werte übergeben:
Wert | Beschreibung | Datentyp |
---|---|---|
name | Definiert den Namen der Property. | String |
value | Definiert den Wert der Property. | String |
namespace | Definiert den Namen des Namespaces, unter dem das Property angelegt wird. | String |
Alle Werte des Aufrufs sind Pflichtfelder. Sollte eines der Felder nicht gefüllt sein, meldet die Funktion einen Fehler.
Als Rückgabewert sieht die Funktion eine fertige XML-JavaScript-Struktur vor, die einem Schema oder einem Struktur-Property zugeordnet werden kann.
Beispiel
let pdf = require('common/pdf'); let property = pdf.createProperty('NAME', 'VALUE', 'NAMESPACE');
Ergebnis des Aufrufs
Das Ergebnis ist vom Format der Struktur her immer gleich. Lediglich die Werte können sich zu den eingetragenen Informationen ändern:
{ type: 'ElementNode', name: 'NAMESPACE:NAME', value: 'VAlUE' }
Erstellt ein Struktur-Property für ein XMP-Schema.
Sie können der Funktion folgende Werte übergeben:
Wert | Beschreibung | Datentyp |
---|---|---|
name | Definiert den Namen der Property. | String |
namespace | Definiert den Namen des Namespaces, unter dem das Property angelegt wird. | String |
Alle Werte des Aufrufs sind Pflichtfelder. Sollte eines der Felder nicht gefüllt sein, meldet die Funktion einen Fehler.
Als Rückgabewert sieht die Funktion eine fertige XML-JavaScript-Struktur vor, die einem Schema zugeordnet werden kann.
Beispiel
let pdf = require('common/pdf'); let structureProperty = pdf.createStructureProperty('NAME', 'NAMESPACE');
Ergebnis des Aufrufs
Das Ergebnis ist vom Format der Struktur her immer gleich. Lediglich die Werte können sich zu den eingetragenen Informationen ändern:
{ type: 'ElementNode', name: 'NAMESPACE:NAME', children: [ ] }
Fügt zu einem Schema ein Property hinzu.
Sie können der Funktion folgende Werte übergeben:
Wert | Beschreibung | Erwartet wird |
---|---|---|
property | Definiert die Struktur der hinzuzufügenden Property. | Struktur einer Property oder einer Structure-Property |
schema | Definiert die Struktur des Schemas, das der Property hinzugefügt wird. | Struktur eines Schemas |
Beispiel
let pdf = require('common/pdf'); let property = pdf.createProperty('NAME', 'VALUE', 'NAMESPACE'); let schema = pdf.createCustomSchema('NAMESPACE', 'URI', 'ABOUT'); let modifiedSchema = pdf.addPropertyToSchema(property, schema);
Ergebnis des Aufrufs
{ type: 'ElementNode' name: 'rdf:Description', children: [ { type: 'ElementNode', name: 'NAMESPACE:NAME', value: 'VALUE' } ], attributes: [ { name: 'xmlns:NAMESPACE', value: 'URI' }, { name: 'rdf:about', value: 'ABOUT' } ], }
Fügt einer Metadaten-Definition ein Schema hinzu.
Sie können der Funktion folgende Werte übergeben:
Wert | Beschreibung | Erwartet wird |
---|---|---|
schema | Definiert die Schema-Definition des Schemas, das hinzugefügt wird. | Struktur eines Schemas |
metadataDefinition | Definiert die Metadaten-Definition, in die das Schema aufgenommen wird. | Struktur einer Metadatendefinition |
Alle Werte des Aufrufs sind Pflichtfelder. Sollte eines der Felder nicht gefüllt sein, meldet die Funktion einen Fehler.
Als Rückgabewert sieht die Funktion die geänderte Metadaten-Definition vor, die über den Aufruf zur Verfügung gestellt wurde.
Beispiel
let pdf = require('common/pdf'); let metadataDefinition = pdf.createMetadataDefinition(); let schema = pdf.createCustomSchema('NAMESPACE', 'URI', 'ABOUT'); let modifiedMetadataDefinition = pdf.addSchemaToMetadataDefinition(schema, metadataDefinition);
Ergebnis des Aufrufs
{ type: 'DocumentFragmentNode', children: [ { name: 'xpacket', type: 'ProcessingInstructionNode', value: 'begin=\"\uFEFF\" id=\"W5M0MpCehiHzreSzNTczkc9d\"' }, { name: 'x:xmpmeta', type: 'ElementNode', children: [ { type: 'ElementNode', name: 'rdf:RDF', attributes: [ { name: 'xmlns:rdf', value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' } ], children: [ { type: 'ElementNode' children: [ ], name: 'rdf:Description', attributes: [ { name: 'xmlns:NAMESPACE', value: 'URI' }, { name: 'rdf:about', value: 'ABOUT' } ], } ] } ], attributes: [ { name: 'xmlns:x', value: 'adobe:ns:meta/' } ] }, { name: 'xpacket', type: 'ProcessingInstructionNode', value: 'end=\"r\"' } ] }
Praxisbeispiel
Das folgende Praxisbeispiel zeigt, wie Sie eine Metadaten-Definition, ein Schema sowie ein Property anlegen und einem PDF-Dokument zur Verfügung stellen:
let pdf = require('common/pdf'); let metadataDefinition = pdf.createMetadataDefinition(); // Metadaten-Definition erzeugen let customSchema = pdf.createCustomSchema('agorum', 'http://agorum.com/agorum/1.0'); // Schema erstellen let customProperty = pdf.createProperty('testProperty', 'testValue', 'agorum'); // Property erstellen let modifiedCustomSchema = pdf.addPropertyToSchema(customProperty, customSchema); // Property zu Schema hinzufügen let modifiedMetadatDefinition = pdf.addSchemaToMetadataDefinition(modifiedCustomSchema, metadataDefinition); // Schema zu Metadatadefinition hinzufügen pdf.writeMetadata(ObjektId/Pfad PDF-Dokument, modifiedMetadatDefinition); // Metadaten schreiben
Die Struktur, die in diesem Beispiel geschrieben wurde, sieht folgendermaßen aus:
{ type: 'DocumentFragmentNode', children: [ { name: 'xpacket', type: 'ProcessingInstructionNode', value: 'begin=\"\uFEFF\" id=\"W5M0MpCehiHzreSzNTczkc9d\"' }, { name: 'x:xmpmeta', type: 'ElementNode', children: [ { type: 'ElementNode', name: 'rdf:RDF', attributes: [ { name: 'xmlns:rdf', value: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' } ], children: [ { type: 'ElementNode' children: [ { type: 'ElementNode', name: 'NAMESPACE:NAME', value: 'VALUE' } ], name: 'rdf:Description', attributes: [ { name: 'xmlns:NAMESPACE', value: 'URI' }, { name: 'rdf:about', value: 'ABOUT' } ], } ] } ], attributes: [ { name: 'xmlns:x', value: 'adobe:ns:meta/' } ] }, { name: 'xpacket', type: 'ProcessingInstructionNode', value: 'end=\"r\"' } ] }
Erstellt eine PDF basierend auf Previews beliebiger Dateiformate (PDF, E-Mail, Word, ...) und schreibt folgende Elemente in diese PDF:
Wenn das Quelldokument OCR-Informationen mit Koordinaten enthält, wird die Textinformation aus dem PDF-Dokument des Ergebnisses rekonstruiert.
Sind nur Textinformationen vorhanden, werden diese unsichtbar in das Dokument geschrieben, sodass dieses immer noch durchsuchbar wäre.
Aufruf
let pdf = require('common/pdf'); pdf.create( { document: objects.find('path-to-input-document.pdf'), coordinates: 'px', outputStream: objects.find('path-to-output-document.pdf').contentOutputStream, format: 'A4', orientation: 'portrait', // Optional. Wenn die Seite noch nicht vorhanden ist, wird sie angelegt. pages: [ { page: 1, items: [ { type: 'line', xStart: 200, yStart: 200, xEnd: 300, yEnd: 300, lineWidth: 10, color: '#FF0000' }, // ... more items ] }, // ... more pages ], // Alternative oder zusätzliche Angabe von items. // "page" muss angegeben werden, zudem muss es die Seite als Vorschau bereits geben. items: [ { type: 'line', page: 2, xStart: 200, yStart: 200, xEnd: 300, yEnd: 300, lineWidth: 10, color: '#FF0000' }, // ... more items ] } );
Ablauf
Die Preview-Bilder der Objektes document werden als Basis genommen und es wird eine neue PDF-Datei erstellt. Auf die jeweiligen Seiten werden die items, wie in pages definiert, erzeugt. Das PDF des Ergebnisses wird auf den in outputStream definierten Stream geschrieben.
Folgende Werte existieren:
Wert | Beschreibung/Werte |
---|---|
document | Definiert ein agorum core-Objekt, etwa ein Word-Dokument oder PDF-Dokument oder ein Dokument, aus dem ein Preview erzeugt werden kann. |
coordinates | px (Standard) Definiert die Koordinaten für x, y, width, height usw. in Pixeln. Die Angaben beziehen sich auf die Dimensionen des Preview-Bilds. % Definiert die Koordinaten für x, y, width, height usw. in % (0 - 1, 50 % wären 0,5). Die Angaben beziehen sich auf die Dimensionen des Preview-Bilds. |
outputStream | Definiert den Stream zum agorum core-Objekt, auf den das PDF des Ergebnisses geschrieben wird. Das Objekt muss zuvor erstellt worden sein. |
format | Definiert das Ausgabeformat des Dokumentes, etwa DIN-A4. Das jeweilige Preview-Bild wird auf dieses Format automatisch eingepasst. Folgende Angaben sind möglich:
|
orientation | portrait (Standard) Richtet das Dokument im Hochformat aus. landscape Richtet das Dokument im Querformat aus. |
pages | Definiert die Definition der einzelnen Elemente wie Text, Line usw. auf den jeweiligen Seiten (siehe pages). |
items | Definiert die Definition der einzelnen Elemente wie Text, Line usw. inklusive Angabe, auf welcher Seite diese erscheinen. |
Definiert die Definition der einzelnen Elemente wie Text, Line usw. auf den jeweiligen Seiten.
Beispiel
// ... pages: [ { page: 1, format: 'A4', orientation: 'portrait', items: [ { type: 'line', xStart: 200, yStart: 200, xEnd: 300, yEnd: 300, lineWidth: 10, color: '#FF0000' } ] } ] // ...
Folgende Werte existieren:
Wert | Beschreibung |
---|---|
page | Definiert die Nummer der Seite beginnend mit 1. Diese Seite muss auch als Preview vorhanden sein, sonst wird sie nicht gezeichnet. |
format | Definiert das Format pro Seite. Wenn Sie diesen Wert nicht definieren, verwendet das System die globale format-Einstellung. |
orientation | Definiert die Orientierung pro Seite. Wenn Sie diesen Wert nicht definieren, verwendet das System die globale orientation-Einstellung. |
items | Definiert die einzelnen Elemente (items), die auf diese Seite gezeichnet werden. |
items
Definiert die Definition der einzelnen Elemente, wie Text, Line usw., unabhängig von der Seite.
Beispiel
// ... items: [ { type: 'line', page: 1, xStart: 200, yStart: 200, xEnd: 300, yEnd: 300, lineWidth: 10, color: '#FF0000' } ] // ...
Für jede Seite können Sie Elemente hinzufügen. Als Basis dient dann immer zuerst das Preview-Bild für die jeweilige Seite. Darauf werden dann die einzelnen in items definierten Elemente gezeichnet.
items (unterhalb von pages)
Zeichnet verschiedene Elemente auf eine PDF-Seite.
line
Zeichnet eine Linie.
Beispiel
// ... { type: 'line', xStart: 200, yStart: 200, xEnd: 300, yEnd: 300, lineWidth: 10, alpha: 0.5, color: '#FF0000' } // ...
Folgende Werte existieren:
Wert | Beschreibung |
---|---|
type | line |
xStart | Definiert den Start der x-Koordinate in Pixeln oder % vom linken oberen Rand aus. |
yStart | Definiert den Start der y-Koordinate in Pixeln oder % vom linken oberen Rand aus. |
xEnd | Definiert das Ende der x-Koordinate in Pixeln oder % vom linken oberen Rand aus. |
yEnd | Definiert das Ende der y-Koordinate in Pixeln oder % vom linken oberen Rand aus. |
lineWidth (optional) | Definiert die Liniendicke in Pixeln. |
alpha (optional) | Definiert die Deckkraft in %. 0 Unsichtbar 1 Vollständig sichtbar |
color (optional) | Definiert die Farbe der Linie als RGB-Hex-Code. |
rect
Zeichnet ein Rechteck.
Beispiel
// ... { type: 'rect', x: 300, y: 300, width: 100, height: 100, lineWidth: 1, alpha: 0.2, fill: '#FF0000', stroke: '#0000FF' } // ...
Folgende Werte existieren:
Wert | Beschreibung |
---|---|
type | rect |
x | Definiert den Start der x-Koordinate in Pixeln oder % vom linken oberen Rand aus. |
y | Definiert den Start der y-Koordinate in Pixeln oder % vom linken oberen Rand aus. |
width | Definiert die Breite in Pixeln oder %. |
height | Definiert die Höhe in Pixeln oder %. |
lineWidth (optional) | Definiert die Liniendicke in Pixeln für den Rand. |
alpha (optional) | Definiert die Deckkraft in %. 0 Unsichtbar 1 Vollständig sichtbar |
fill (optional) | Definiert die Farbfläche des Rechtecks als RGB-Hex-Code. |
stroke (optional) | Definiert den Farbrahmen des Rechtecks als RGB-Hex-Code. |
text
Zeichnet einen Text.
Beispiel
// ... { type: 'text', x: 100, y: 100, text: 'Hallo, dies ist ein Test', color: '#FF0000', width: 100, font: 'Helvetica', lineHeight: 20, fontSize: 20, bold: true, italic: false } // ...
Folgende Werte existieren:
Wert | Beschreibung |
---|---|
type | text |
x | Definiert den Start der x-Koordinate in Pixeln oder % vom linken oberen Rand aus. |
y | Definiert den Start der y-Koordinate in Pixeln oder % vom linken oberen Rand aus. |
width (optional) | Definiert die Breite in Pixeln oder % (wenn angegeben, wird der Text von der Breite her beschränkt und bricht automatisch um). |
lineHeight (optional) | Definiert die Linienhöhe zwischen den Zeilen. |
alpha (optional) | Definiert die Deckkraft in %. 0 Unsichtbar 1 Vollständig sichtbar |
color (optional) | Definiert die Farbe des Textes als RGB-Hex-Code. |
text | Definiert den zu erscheinenden Text. |
fontSize | Definiert die Schriftgröße in Pixeln. |
bold | true Fettdruck false Kein Fettdruck |
italic | true Kursivschrift false Keine Kursivschrift |
font (optional) | Definiert die Schriftart. Mögliche Werte sind:
|
origin | Definiert den Bezugspunkt des Textes. Mögliche Werte sind: top left (Standard) Der Text beginnt oben (y) links (x). Die Ausrichtung ist linksbündig. top right Der Text beginnt oben (y) rechts (x). Die Ausrichtung ist rechtsbündig. bottom-right Der Text beginnt unten (y) rechts (x). Die Ausrichtung ist rechtsbündig. bottom-left Der Text beginnt unten (y) links (x). Die Ausrichtung ist linksbündig. |
rect | Versieht den Text mit einem Rechteck. Das Rechteck orientiert sich exakt an den Ausmaßen des Textes. Mögliche Werte sind: lineWidth (optional) Definiert die Liniendicke in Pixeln für den Rand. alpha (optional) Definiert die Deckkraft in %. 0 Unsichtbar 1 Vollständig sichtbar fill (optional) Definiert die Farbfläche des Rechtecks als RGB-Hex-Code. stroke (optional) Definiert den Farbrahmen des Rechtecks als RGB-Hex-Code. padding (optional) Definiert den Abstand zum Text in Pixeln oder in % (Angabe muss bei % zwischen 0 und 1 liegen). |
Beispiel mit origin und rect
// ... { type: 'text', x: 100, y: 100, text: 'Hallo, dies ist ein Test', color: '#FF0000', width: 100, font: 'Helvetica', lineHeight: 20, fontSize: 20, bold: true, italic: false, origin: 'top-left', rect: { fill: '#FFFF00', padding: 10, alpha: 0.5 } } // ...
image
Zeichnet ein Bild.
Beispiel
// ... { type: 'image', x: 400, y: 400, width: 200, alpha: 1.0, image: objects.find('path-to-image.png') } // ...
Folgende Werte existieren:
Wert | Beschreibung |
---|---|
type | image |
x | Definiert den Start der x-Koordinate in Pixeln oder % vom linken oberen Rand aus. |
y | Definiert den Start der y-Koordinate in Pixeln oder % vom linken oberen Rand aus. |
width | Definiert die Breite in Pixeln oder % (wenn nicht angegeben, wird die Breite entweder aus der Höhe berechnet oder die Originalbreite des Bildes verwendet). |
height | Definiert die Höhe in Pixeln oder % (wenn nicht angegeben, wird die Höhe entweder aus der Höhe berechnet oder die Originalbreite des Bildes verwendet). |
image | Definiert ein Bild-Dokument (png oder jpg) aus agorum core. |
alpha | Definiert die Deckkraft in %. 0 Unsichtbar 1 Vollständig sichtbar |
Berechnet die Höhe des Textes bei einem automatisch umbrechenden Text.
Beispiel
let text = 'Hallo, dies ist ein Test, dieser Text wird in eine Box eingefügt.'; let height = pdf.getTextHeight(text, { font: 'Courier', bold: true, italic: false, lineHeight: 20, size: 20 }, 280);
Komplettes Beispiel
Das folgende Skript zeigt ein komplettes Beispiel, basierend auf den Demo-Dokumenten, die bei einer Installation von agorum core enthalten sind.
let pdf = require('common/pdf'); let objects = require('common/objects'); let start = new Date(); // the input document let document = objects.find('/agorum/roi/Files/Demo/Checkliste-DMS.docx'); // the output document, create it if not present, otherwise overwrite it let outPdf = objects.tryFind('/agorum/roi/Files/Demo/create-pdf-sample.pdf'); if (!outPdf) { outPdf = objects.create('file', { name: 'create-pdf-sample.pdf', target: objects.find('/agorum/roi/Files/Demo') }); } // sample image let image = objects.find('/agorum/roi/Preview/SampleApprovalSet/Stamps/StampApproved.png'); // get the calculated height for the text, to build the box around it let text = 'Hallo, dies ist ein Test, dieser Text wird in eine Box eingefügt.'; let height = pdf.getTextHeight(text, { font: 'Courier', size: 20 }, 280); // create the sample pdf pdf.create( { document: document, coordinates: 'px', outputStream: outPdf.contentOutputStream, format: 'A4', orientation: 'portrait', pages: [ { page: 1, items: [ { type: 'line', xStart: 200, yStart: 200, xEnd: 300, yEnd: 300, lineWidth: 10, color: '#FF0000' }, { type: 'rect', x: 100, y: 100, width: 300, height: height + 10, lineWidth: 1, alpha: 0.2, stroke: '#0000FF' }, { type: 'text', x: 110, y: 100, text: text, width: 280, color: '#FF0000', font: 'Courier', fontSize: 20 }, { type: 'rect', x: 300, y: 300, width: 100, height: 100, lineWidth: 1, alpha: 0.2, fill: '#FF0000', stroke: '#0000FF' }, { type: 'image', x: 400, y: 400, width: 200, image: image } ] }, { page: 2, // may be defined per page, if needed format: 'A4', orientation: 'portrait', items: [ { type: 'line', xStart: 200, yStart: 200, xEnd: 300, yEnd: 300, lineWidth: 10, color: '#FF0000' }, { type: 'text', x: 100, y: 100, text: 'Hallo, dies ist ein Test auf Seite 2', color: '#FF0000', fontSize: 20 }, { type: 'rect', x: 300, y: 300, width: 100, height: 100, lineWidth: 1, alpha: 0.2, fill: '#FF0000', stroke: '#0000FF' } ] } ] } ); 'finished: ' + ((new Date().getTime() - start.getTime())/1000) + ' s';