Grafiken der Vorlag...
 
Benachrichtigungen
Alles entfernen

Grafiken der Vorlage beim Drucken ausblenden

3 Beiträge
2 Benutzer
0 Reactions
1,242 Aufrufe
(@3xhossa)
Mitglied
Beigetreten: vor 12 Jahren
Beiträge: 250
Topic starter   [#359]

Nach ein wenig Spielerei mit den Vorlagen (mal wieder 🙂 ) habe ich endlich mal ein Problem in Angriff genommen, das mich seit einer Weile nervt. Doch endgültig gelöst ist es so noch nicht.

Zuerst das Problem:
Ich habe eine Grafik erstellt, die als Logo im Kopf der Dokumente erscheinen soll. Der besseren Skalierbarkeit wegen liegt diese als SVG vor und füllt fast die ganze Seitenbreite. LO scheint damit ein klein wenig überfordert zu sein, denn jegliche Aktion im Fenster geht nur sehr zähflüssig. Sobald beim scrollen die Grafik aus dem sichtbaren Bereich heraus ist, arbeitet LO mit gewohnter Geschwindigkeit. An mangelnder Hardwareausstattung dürfte es bei einem System mit 8 x 3,5 GHz und 24 GB RAM nicht liegen.

Dies führt dazu, dass ich beim Druck eines Dokuments ungelogen 8 Minuten warten muss, bis alle Felder ausgefüllt sind und das Dokument gespeichert wurde. Scrolle ich gleich nach Erscheinen des LO-Fensters herunter, um die Grafik aus dem Anzeigebereich zu bringen, ist die Angelegenheit in etwa 5 Sekunden erledigt. Gleichen Effekt kann ich erzielen, wenn ich in der Symbolleiste "Extras" den Knopf "Grafik Ein/Aus" drücke. An dieser Stelle ist es mir egal, ob das Problem tief in LO verwurzelt ist oder ob das Füllen der Felder hier etwas ineffizient vonstatten geht.

Der Lösungsansatz:
Beim Erstellen einer neuen Datei aus einer Vorlage heraus soll die Anzeige der Grafik makrogesteuert abgeschaltet und nach dem Speichern der Datei wieder eingeschaltet werden. Da ich mich mit LO-Basic überhaupt nicht auskenne und den passenden Befehl nicht finden konnte habe ich die Makroaufzeichnung benutzt, welche einen geradezu unflätig verwursteten Code erzeugt. Diesen habe ich mit dem Basiceditor in "Meine Makros" gespeichert und dann in der Makroverwaltung über "Zuweisen" den Ereignissen "Neues Dokument " bzw. "Dokumentkopie wurde erzeugt" zugewiesen. Die Zuweisungen müssen selbstredend im Kontext für LibreOffice gespeichert werden, nicht für das aktuelle Dokument, da sie sonst bei neuen Dokumenten nicht gelten.

Der verwendete Code:
Dieser Code wurde vom Makrorecorder erzeugt. Ich habe ihn dupliziert, umbenannt und den Wert einmal auf true gesetzt. Damit gibt es die zwei Routinen graphicOn und graphicOff.

sub graphicOn
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Graphic"
args1(0).Value = true

dispatcher.executeDispatch(document, ".uno:Graphic", "", 0, args1())
end sub

sub graphicOff
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Graphic"
args1(0).Value = false

dispatcher.executeDispatch(document, ".uno:Graphic", "", 0, args1())
end sub

::o

Ich bin mir absolut sicher, dass der Aufruf auch mit einem Einzeiler machbar ist, sofern man den korrekten Befehl kennt. (zum Vergleich: aufgezeichneter Code vs API-Aufrufe)

Das Ergebnis:
Super! 😉
Beim drucken eines Dokuments wird die Grafik sofort ausgeblendet und das Füllen der Felder ist ruckzuck erledigt. So wie früher, als ich noch kein grafisches Logo verwendet habe. Nach dem Speichern wird die Grafik wieder eingeblendet. Darauf könnte ich zur Not auch verzichten, doch wird es dann u.U. als Vorgabe gespeichert und dann bin ich bei anderen Dokumenten irritiert, wenn die Grafiken nicht angezeigt werden und ich mich auf die Suche mache, warum LO plötzlich die Grafik nicht mehr mag.

Verbesserungswünsche:
Ideal fände ich es, wenn Fakturama beim Drucken in ein Dokument direkt die Grafik ausschalten und nach dem Befüllen der Felder wieder einschalten könnte. Das tut nicht weh und schadet dem Dokument auch nicht; selbst das Layout bleibt erhalten, da die Grafik durch einen leeren Rahmen ersetzt wird. Aber es kann den Prozess u.U. ganz erheblich Beschleunigen. Eine Steuerung von Fakturama aus hätte noch weitere Vorteile: es wäre systemunabhängig, während diese Lösung auf jedem Arbeitsplatz bzw. in jeder LO-Installation gespeichert werden muss. Zudem wäre die Umschaltung dann wirklich nur für Fakturama wirksam, während sie jetzt bei jeder passenden Aktion ausgeführt wird. Das könnte ausserhalb von Fakturama zu Irritationen führen. Alternativ könnten die Makros und die Zuweisungen in jeder einzelnen Vorlage gespeichert werden. Das würde auch funktionieren, bedeutete aber einen immensen Aufwand.

Ich gehe mal davon aus, dass der/die Programmierer über genügend API-Kenntnisse verfügen, um einen passenden Befehl zu finden und einzubauen.

Ich fände es toll, wenn das in Fakturama übernommen werden könnte. Und selbst, wenn nicht, dann konnte ich mit dem Beispiel vielleicht dem ein oder anderen weiterhelfen. 🙂


Gruß
3xhossa


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

Hallo 3xhossa,
danke für den Tip. Leide bin ich auch der UNO-Sprache im LibreOffice nicht mächtig, und ich habe bislang auch niemanden gefunden, der das kann.
Mein Ansatz für die ganze Geschichte ist allerdings, ganz auf das Aufrufen von LibreOffice zu verzichten und die Ersetzung direkt in den Vorlagen vorzunehmen. Damit würde ich ziemlich viele Probleme umgehen. Dazu muß ich allerdings noch etwas Grundlagenforschung betreiben, da es da auch wieder mehrere Ansätze gibt... Die Ansteuerung über Fakturama erfolgt übrigens (leider) nicht über Makros, sondern über die erwähnte UNO-Schnittstelle, die auch nochmal etwas anders ist als die Makrosprache. Wir werden das aber mal im Auge behalten. Kannst Du das irgendwie im Bugtracker festhalten?


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


   
AntwortZitat
(@3xhossa)
Mitglied
Beigetreten: vor 12 Jahren
Beiträge: 250
Topic starter  

🙂 Ich bin auch nicht davon ausgegangen, dass die Steuerung über Makros läuft. Aber ich denke mal, für so einen simplen Switch gibt es sicher einen einfacheren Aufruf als das Monstergebilde, dass der Rekorder erzeugt hat. Wenn ich den Codevergleich auf der verlinkten Seite anschaue, dann kommt mir das vor wie C vs Assembler, nur dass hier der kürzere Code auch noch der effizientere ist. 😉

Im Bugtracker kann ich es gerne eintragen. Allerdings wirst du es wohl noch in die richtige Richtung schieben müssen. Denn ich weiss weder, in welchen Bereich das gehört, noch wie wichtig es ist oder für welche Version es relevant wäre.


Gruß
3xhossa


   
AntwortZitat
Teilen: