carbone.io als Druckeditor in NINOX integrieren
Das Thema Drucklayouteditor ist ja schon seit Jahren leidiges Thema hier im Forum. Zu Recht, da man aus der Ninox heraus leider nur rudimentär Daten zu "Papier" bzw. PDF bringen kann. Formatierungen werden nicht unterstützt, HTML genauso wenig. Diverse Workarounds sind die Folge oder gar Abwanderungen auf andere Softwarelösungen.
Auch nach dem Update sind wieder nicht alle User glücklich, da die Nutzung von Word-Templates wohl nur Private Cloud bzw. On-Premise Usern vorbehalten ist.
Die dort verwendete Engine lässt sich aber klassisch über RestAPI in die NINOX integrieren. Benötigt wird ein carbone-Account, welcher in der Free Version mit 100 credits (100 erzeugte Dokumente) kostenfrei ist...
Hat man einen Account erstellt, kann man unter account.carbone.io seinen Test- bzw. Production-API-Key erzeugen:
In der NINOX brauchen wir dann ein Bildfeld in das unser erzeugtes PDF geladen wird, ein mehrzeiliges Textfeld "API", ein Feld für die spätere RenderID, einen Button für das Script und ein Word- oder OpenOffice-Template. Ich benutze OpenOffice und habe hier mal das Sample-Template von carbone geöffnet:
Wie man sieht, sind alle zu ersetzenden Felder durch {d.xxxxxxxxx} gekennzeichnet. Wir legen uns also unser Dokument in dieser Form an und laden es anschließend in das carbone Studio (studio.carbone.io)
Hier kann man schon mit den Daten spielen und testen, ob alles soweit funktioniert. Wenn alles passt, brauchen wir zum ansteuern aus NINOX heraus die ID des Templates. Diese findet man oben rechts unter dem Info-Button (i)...
Zurück zur NINOX. Wir haben also unser Bildfeld namens "Ausdruck", unser Textfeld "API" und "renderID" zur Kontrolle und unseren Button. In den Button schreiben wir nun folgendes Script:
let testKey := "Bearer DER_TESTKEY_AUS_CARBONE";
let liveKey := "Bearer DER_PRODUCTION_KEY_AUS_CARBONE";
let myKey := testKey;
let auth := {
Authorization: myKey,
'Content-Type': "application/json",
'carbone-version': "3"
};
let myTemplate := "DIE_TEMPLATE_ID_AUS_CARBONE_STUDIO";
do as server
let response := http("POST", "https://render.carbone.io/render/" + myTemplate, auth, {
data: {
id: 12345,
name: "Max Muster",
adresse: KUNDENADRESSE
},
convertTo: "pdf",
reportName: Produkt + "_EinlegerFront.pdf"
});
API := text(response.result);
renderID := text(response.result.data.renderId)
end;
let myBild := "https://render.carbone.io/render/" + renderID;
importFile(this, myBild, "carbone.pdf");
Ausdruck := file(this, "carbone.pdf");
Fertig. Das sollte es gewesen sein... Wir schicken also über die NINOX Rest API unsere Daten an das carbone Template, erhalten eine renderID zurück und holen uns das gerenderte Dokument über die importFile-Funktion der NINOX in unser Bildfeld. Die übermittelten Daten im obigen Script können dabei feste Werte (wie 12345 und "Max Muster") sein, oder Feldnamen der Ninox (KUNDENADRESSE).
Den Dateinamen können wir in der importFile-Funktion festlegen. Hier ist es jetzt "carbone.pdf" - er könnte aber auch aus NINOX Feldnamen zusammengesetzt werden: KUNDENNR + "_Rechnung_" + RGNUMMER + ".pdf". Die gleiche Formel muss dann aber auch in file() stehen
importFile(this, myBild, KUNDENNR + "_Rechnung_" + RGNUMMER + ".pdf");
Ausdruck := file(this, KUNDENNR + "_Rechnung_" + RGNUMMER + ".pdf");
Wenn dann alles im Layout passt, kann man auf den liveKey wechseln und erhält ein Wasserzeichen-freies PDF (welches aber dann Credits kostet)
Ich hoffe das Vorgehen ist einigermaßen verständlich, das Script habe ich aus einer laufenden Umgebung zusammenkopiert, dort ist es umfangreicher eingebettet mit dialog() und alert()-Funktionen, einem Schalter für Test-bzw.Livebetrieb usw.
Happy printing!
Gruß, Tobias
26 Antworten
-
Danke dir Stefanie, hab es so gelöst, das ich zwei Tabellen anlege, wo aber in der zweiten Tabelle dann [i+1]enthalten ist. Das bringt mir einzelne Tabellen.
Hast du aber vielleicht eine Ahnung wie oder was der seitenumbruch im Skript auf dem Template bewirkt? Finde in der Doku nichts
vSeitenumbruch: true
Content aside
-
9
„Gefällt mir“ Klicks
- vor 1 JahrZuletzt aktiv
- 26Antworten
- 1092Ansichten
-
13
Folge bereits