Fakturama 2.2.1-BET...
 
Benachrichtigungen
Alles entfernen

Fakturama 2.2.1-BETA hängt bei mit Bild/Rahmen im selben Absatz

2 Beiträge
2 Benutzer
0 Reactions
10 Aufrufe
(@lightwaverider)
New Member
Beigetreten: vor 4 Tagen
Beiträge: 1
Topic starter   [#4686]

Unter Debian 13 hängt Fakturama 2.2.1-BETA beim Erzeugen einer Rechnung reproduzierbar mit hoher CPU-Auslastung. Dieselbe .ott-Vorlage funktioniert mit Fakturama 2.1.3c und 2.2.1-BETA unter macOS.

Der Hänger tritt auf, wenn sich ein als Bild eingefügter Rahmen und der Platzhalter <INVOICE.GIROCODE> im selben ODF-Absatz (text:p) befinden.

Ein Thread-Dump während des Hängers zeigt:

"main" ... java.lang.Thread.State: RUNNABLE
   at org.odftoolkit.helper.common.navigation.PlaceholderNode.replaceWith(PlaceholderNode.java:283)
   at com.sebulli.fakturama.office.TemplateProcessor.processTemplate(TemplateProcessor.java:606)
   at com.sebulli.fakturama.office.OfficeDocument.createDocument(OfficeDocument.java:164)
   at com.sebulli.fakturama.handlers.CreateOODocumentHandler.openOODocument(CreateOODocumentHandler.java:425)

Zu diesem Zeitpunkt läuft noch kein soffice- entfernter Link Der Hänger entsteht also bereits beim Bearbeiten der ODF-Vorlage.

Die problematische Struktur sieht vereinfacht so aus:

<text:p>
   <draw:frame draw:name="Bild8" ...>
       <draw:image .../>
   </draw:frame>
   <text:placeholder text:placeholder-type="text">
       &lt;INVOICE.GIROCODE&gt;
   </text:placeholder>
</text:p>

Workaround: Rahmen und GIROCODE-Platzhalter in zwei getrennte Absätze verschieben:

<text:p text:style-name="QRFrame">
   <draw:frame draw:name="Bild8"
               text:anchor-type="paragraph"
               svg:x="14.229cm"
               svg:y="0.60cm"
               ...>
       <draw:image .../>
   </draw:frame>
</text:p>

<text:p text:style-name="P18">
   ...
   <text:placeholder text:placeholder-type="text">
       &lt;INVOICE.GIROCODE&gt;
   </text:placeholder>
   ...
</text:p>

Danach wird die Rechnung unter Fakturama 2.2.1-BETA wieder korrekt erzeugt.

Wichtig: Wird die so korrigierte Vorlage anschließend mit LibreOffice Writer geöffnet und gespeichert, führt Writer die beiden Elemente bei meinem Test wieder in einem Absatz zusammen. Danach tritt der Hänger erneut auf. Die funktionierende Vorlage musste daher direkt auf ODF/XML-Ebene angepasst werden.

Getestete Umgebung

• Debian 13, amd64
• Fakturama 2.2.1-BETA
• mitgeliefertes Java 21.0.12.1 LTS
• ODFDOM 0.13.0 (org.odftoolkit.odfdom-java_0.13.0.jar)
• LibreOffice 25.2.3.2
• Gleiche Vorlage funktioniert mit Fakturama 2.1.3c und 2.2.1-BETA unter macOS

Es sieht daher nach einem Problem bei der Platzhalter-Ersetzung (PlaceholderNode.replaceWith) aus, wenn im selben text:p zusätzlich ein draw:frame vorhanden ist.

Zusätzliche Reproduktionsbeobachtung

  1. Wird der Rahmen vollständig aus der Vorlage entfernt, wird die Rechnung sofort korrekt erzeugt. Eine reine Änderung der Verankerung des Rahmens von „Als Zeichen“/„Am Zeichen“ auf „Am Absatz“ reichte nicht aus, solange Rahmen und <INVOICE.GIROCODE> im selben text:p lagen. Erst die Trennung in zwei Absätze beseitigte den Hänger.


   
Zitat
(@rheydenr)
Forum-Admin Registered
Beigetreten: vor 14 Jahren
Beiträge: 4920
 

Hallo lightwaverider,

danke für den ausführlichen Bericht, vor allem für den Thread-Dump. Damit ließ sich der Fehler schnell finden.

Ursache: Wenn Fakturama einen Bild-Platzhalter ersetzt (<INVOICE.GIROCODE>, <INVOICE.SWISSCODE> oder <YOURCOMPANY.QRVCARD>), räumt es danach die leer gewordenen Formatierungselemente um den Platzhalter herum auf. Diese Aufräumschleife lief endlos, sobald der Platzhalter in einem eigenen Formatierungsbereich (Span) stand und davor im selben Absatz noch etwas anderes lag, z. B. ein Bildrahmen. Das erklärt die volle CPU-Last. Dass es unter macOS mit derselben Vorlage geht, liegt vermutlich daran, dass LibreOffice die Vorlage beim Speichern intern etwas anders aufgebaut hat. Der Fehler ist also nicht Debian-spezifisch.

Behebung: Der Fehler ist korrigiert und kommt mit dem nächsten Build von 2.2.1. Dabei ist mir noch ein zweites Problem aufgefallen, das ich gleich mit behoben habe: Der QR-Code wurde bisher immer ans Ende des Absatzes gehängt statt an die Stelle des Platzhalters. Jetzt steht er genau dort, wo der Platzhalter in der Vorlage steht. Falls du deine Vorlage daran angepasst hast, schau sie dir nach dem Update bitte noch einmal an.

Bis dahin hilft dein Workaround: Rahmen und GiroCode-Platzhalter in getrennte Absätze setzen. Ebenfalls funktionieren sollte es, den Platzhalter ohne eigene Zeichenformatierung einzufügen, also ohne umgebenden Span.

 


Viele Grüße
Ralf.
Wichtige Infos zum Posten im Forum.
Fehler gefunden?


   
AntwortZitat
Teilen: