9

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

null
    • Michi.1
    • vor 9 Monaten
    • Gemeldet - anzeigen

    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
      • Geschäftsführerin bei Kennes Digital
      • Stefanie_K
      • vor 8 Monaten
      • Gemeldet - anzeigen

      Hey  

      Sorry, urlaubsbedingt kommt die Antwort leider etwas später. 

      Schau mal im fertigen Dokument, ob da wirklich noch Abschnittswechsel drin sind. Der Abschnittswechsel hinter {d.vtext2:html} befindet sich ja noch zwischen showBegin und showEnd und sollte damit gar nicht angezeigt werden. Vielleicht kannst du ein fertiges Beispieldokument mit Musterdaten hier anfügen oder mir per PN zukommen lassen. 

      Oder du schickst es mal an den Carbone-Support. Die sind sehr hilfsbereit und schnell. Sie stellen die Vorlage oft für dich fertig.

Content aside

  • 9 „Gefällt mir“ Klicks
  • vor 8 MonatenZuletzt aktiv
  • 26Antworten
  • 855Ansichten
  • 12 Folge bereits