Durchsuchbare Dokumentation aufrufen

Zurück zur Dokumentationsübersicht

JavaScript-Bibliothek common/pdf

Dieses Modul bietet Funktionen zum Bearbeiten von PDF-Dokumenten.

Anwendung


Binden Sie die Bibliothek stets am Anfang eines Skripts ein:

let pdf = require('common/pdf');

Funktionen


getNumberOfPages()

Liest die Anzahl der Seiten aus einem PDF.


Beispiel

pdf.getNumberOfPages(obj);

readMetadata()

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: [ ],
    }
  ]
}

writeMetadata()

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\"'
    } 
  ]
});

createMetadataDefinition()

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\"'
    } 
  ]
}

createCustomSchema()

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'
    }
  ],
}

createProperty()

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'
}

createContainerProperty()

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: [ ]
}

addPropertyToSchema()

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'
    }
  ],
}

addSchemaToMetadataDefinition()

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\"'
    } 
  ]
}

create()

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:
  • A0
  • A1
  • A2
  • A3
  • A4 (Standard)
  • A5
  • A6
  • LETTER
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.


pages

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:
  • Helvetica (Standard)
  • Courier
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

getTextHeight

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';