F: MergeXMLIntoPDF gibt False zurück und erzeugt kein PDF – was tun?

Thema
VB6
SDK-Mitglieder
LastError MergeXMLIntoPDF()
Codebeispiele
VB.NET
Veröffentlicht

Kurz: Wenn MergeXMLIntoPDF False zurückgibt, steht die Ursache in alo.LastError – lesen Sie es direkt nach dem Aufruf am selben Objekt. Die häufigsten Gründe: Die Zieldatei existiert schon und DoOverWrite ist False, der Lizenzschlüssel fehlt, ein Pfad stimmt nicht (relativer Pfad, Netzlaufwerk) oder der Zielordner ist nicht beschreibbar. Ist LastError trotz False leer, arbeitet Ihr Programm meist mit einer älteren registrierten DLL als gedacht.

So lesen Sie die Ursache aus

' VBA / VB6 (COM)
Dim ok As Boolean
ok = alo.MergeXMLIntoPDF("C:\Rechnungen\RE-1001.xml", "C:\Rechnungen\RE-1001.pdf", _
                         "C:\Rechnungen\RE-1001_zugferd.pdf", True, "", "IHR-LIZENZSCHLUESSEL")
If Not ok Then MsgBox "MergeXMLIntoPDF: " & alo.LastError

Der vierte Parameter DoOverWrite erlaubt das Überschreiben einer vorhandenen Zieldatei, der sechste ist der Lizenzschlüssel (leer = der am Objekt gesetzte oder in der Registry gespeicherte Schlüssel). Verwenden Sie immer vollständige Pfade: Bei Aufrufen aus Access, Excel oder einem Dienst ist das aktuelle Verzeichnis oft ein anderes als erwartet.

Die Meldungen in LastError

LastErrorUrsacheLösung
… already exists but DoOverwrite is falseDie Zieldatei gibt es schon – typisch beim zweiten Testlauf.DoOverWrite auf True setzen oder die Datei vorher löschen.
License ProblemKein gültiger Lizenzschlüssel gefunden.Schlüssel als Parameter LicenseKey oder im Konstruktor übergeben; nach einer Neuinstallation prüfen, ob er noch hinterlegt ist.
XMLPath did not exist, PDFInputPath did not exist, … does not existXML- oder PDF-Datei nicht gefunden.Vollständigen Pfad übergeben; prüfen, ob die PDF schon fertig geschrieben ist – sonst MergeXMLIntoPDFWait4PDF mit Wartezeit verwenden.
Path Variables emptyEiner der drei Pfade ist leer, meist der Zielpfad.Alle drei Pfade angeben; Ziel darf gleich der Eingabe-PDF sein.
Could not create Aloaha PDF ObjectDie PDF-Komponente des SDK konnte nicht geladen werden.SDK-Setup erneut ausführen, damit alle DLLs im selben Ordner liegen und registriert sind.
AddZUGFeRD2PDF returned false oder eine Meldung der PDF-KomponenteDie PDF konnte nicht verarbeitet oder die Zieldatei nicht geschrieben werden – z. B. Ziel in einem schreibgeschützten Ordner wie C:\Program Files, Datei in einem Viewer geöffnet, verschlüsselte oder beschädigte PDF.In einen beschreibbaren Ordner schreiben, die Datei schließen, die Eingabe-PDF in einem Viewer prüfen.
MergeXMLIntoPDF crash: …Unerwarteter Fehler; der Text nennt die Ausnahme.Meldung und Dateien an den Support schicken.

False, aber LastError ist leer

Die aktuelle Version setzt bei jedem False einen Text in LastError. Bleibt er leer, prüfen Sie:

  1. Welche DLL wird geladen? Liegen mehrere Kopien von Aloaha_ZUGFeRD.dll auf dem Rechner (alte Installation, Projektordner, Netzlaufwerk), registriert regasm /codebase genau die Datei, die Sie angeben. Registrieren Sie die DLL aus dem Installationsordner neu – Anleitung in Laufzeitfehler 430 / fehlender Verweis.
  2. 32 oder 64 Bit? 32-Bit-Office und VB6 brauchen die Registrierung aus C:\Windows\Microsoft.NET\Framework, 64-Bit-Programme die aus Framework64. Das SDK-Setup registriert beide.
  3. Dasselbe Objekt? LastError gehört zum Objekt, das MergeXMLIntoPDF aufgerufen hat. Ein neu erzeugtes Objekt hat keinen Fehlertext.

Meldet ein Prüfportal später „UTF-8 mit BOM“ im XML der fertigen PDF, stammt der BOM aus der übergebenen XML-Datei: Validator meldet UTF-8 mit BOM.

Das Update auf die aktuelle Version ist mit gültigem Wartungsvertrag kostenlos.

Häufige Fragen

Warum gibt MergeXMLIntoPDF False zurück?

Die Ursache steht in LastError. Am häufigsten existiert die Zieldatei bereits und DoOverWrite ist False, der Lizenzschlüssel fehlt oder ein Pfad stimmt nicht.

Darf die Zieldatei gleich der Eingabe-PDF sein?

Ja. Dann wird die Eingabe-PDF durch die ZUGFeRD-PDF ersetzt.

Was tun, wenn die PDF noch von einem anderen Programm geschrieben wird?

MergeXMLIntoPDFWait4PDF verwenden. Es wartet bis zur angegebenen Zeit, bis die PDF vorhanden und nicht mehr gesperrt ist.

Warum ist LastError leer, obwohl False zurückkommt?

Meist wird eine ältere DLL geladen oder LastError an einem anderen Objekt gelesen. Die DLL aus dem Installationsordner mit regasm /codebase neu registrieren und LastError direkt nach dem Aufruf lesen.