10

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

32 Antworten

null
    • Michi.1
    • vor 2 Jahren
    • 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
      • ⭐ Ninox Partnerin - Kennes Digital
      • Stefanie_K
      • vor 2 Jahren
      • 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.

    • 5521
    • Anton
    • gestern
    • Gemeldet - anzeigen

    Hallo an alle, 

    habe mal versucht das ganze mal nach der Anleitung von Tobias in Ninox und Carbone abzubilden. 

    Leider erhalte ich in dem API Textfeld den Fehler : 
    {"success":false,"error":"Unable to generate the document. Error: The DOCX document cannot be converted to PDF format with LibreOffice converter","code":"w101","data":{"renderId":""}} 

    habe leider keinen Schimmer wie ich es gelöst kriege. bzw. warum ich die Fehlermeldung erhalte.

      • T_Bartzsch
      • gestern
      • Gemeldet - anzeigen

       Hallo Anton,

      das ist kein API oder Ninox Fehler, das ist ein LibreOffice Fehler. Wie sieht dein Dokument denn aus? Exotische Schriften darin eingebettet? Bilder evtl. als Link eingebettet - oder komische Bildformate (EPS, SVG)? Template-Datei zu groß? Makros?

      Ich benutze für die Templates OpenOffice bzw. LibreOffice, Logos als kleine PNG, oder einen ganzen Briefbogen als JPG in den Hintergrund gelegt und Schriften nicht alle in das Dokument einbetten. So habe ich Layouts zwischen 40 - 400 kB und speichere als ODT.

      Als Schriften funktionieren neben den lokalen glaube ich auch nur Schriften, die es als Webfont bei Google gibt, bin mir aber nicht sicher.

      Öffnet sich das Template denn in LibreOffice?

      • 5521
      • Anton
      • gestern
      • Gemeldet - anzeigen

       Hallo Tobias, 

      Danke für deine Antwort. 
      Probeweise habe ich lediglich ein Word Dokument mit Inhalt :

      Hello {d.vorname} {d.nachname}

      bei Carbone hochgeladen. 
      habe aber auch andere Beispiel Templates ausprobiert. 
      Auch eine reine .txt Datei war dabei.

      Aber wenn das ein LibreOffice Fehler ist .... wo kommt der her ? 
      Ich benutze keins und Carbone doch auch nicht oder ?

      • T_Bartzsch
      • gestern
      • Gemeldet - anzeigen

       ... hm, ich bin aus dem ganzen Thema leider "etwas raus", da ich die Templates intern in Ninox als "dynamische Vorlage" nutze, und nicht mehr via API an carbone wie vor 3 Jahren. Ich erzeuge die Templates aber tatsächlich in LibreOffice, als ODT und nutze dann in Ninox das Benutzerdefinierte JSON für die Datenübermittlung. Versuch es doch mal mit LibreOffice. Musst Du denn die carbone API nutzen? 
      Ich habe dir mal aus LibreOffice ein testdokument erzeugt, schau mal, ob das klappt...

    • 5521
    • Anton
    • gestern
    • Gemeldet - anzeigen

    hmmm ... ne auch mit der OpenOffice Datei erhalte ich einen Fehler :

    {"success":false,"error":"Unable to generate the document. Error: The ODT document cannot be converted to PDF format with LibreOffice converter","code":"w101","data":{"renderId":""}}

    Ich muss mir wohl eine andere Lösung überlegen wie es scheint.

      • T_Bartzsch
      • gestern
      • Gemeldet - anzeigen

       musst du denn über die carbone API gehen? Carbone ist doch in ninox integriert, nutze doch dort die Templates....

Content aside

  • 10 „Gefällt mir“ Klicks
  • gesternZuletzt aktiv
  • 32Antworten
  • 1539Ansichten
  • 15 Folge bereits