BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[work around missing features] Ausdrucken von CALC sheets

Alles zur Programmierung im LibreOffice.
Antworten
nitja
Beiträge: 123
Registriert: Di 20. Okt 2020, 15:55

[work around missing features] Ausdrucken von CALC sheets

Beitrag von nitja » Do 23. Sep 2021, 12:27

Das Dokument soll mit verschiedenen/wechselnden Optionen, die außerhalb des Druckbereichs in der Tabelle anzuwählen sind, ausgedruckt werden. Da dafür doch etliche, von einander abhängige Einstellungen, gesetzt werden müssen, soll das ein Makro erledigen.
Von den (hierfür manuell vorgenommenen) Einstellungen im Druckdialog …
Druckdialog.jpg
Druckdialog.jpg (59.83 KiB) 1790 mal betrachtet
… kann ich einige erfolgreich aus der Tabelle an das Makro und somit an den Printjob übergeben, bei anderen habe ich nach tagelangem Recherchieren und Experimentieren noch keinen Erfolg.
Hier der teilweise funktionierende Code

Code: Alles auswählen

dim xpvPrinter(2) as new com.sun.star.beans.PropertyValue
dim xpvPrntOpt(3) as new com.sun.star.beans.PropertyValue
with oSheet
  xpvPrinter(0).Name = "Name"
  select case right(.getCellRangeByName(oShtCrtl.sPrint_V).string,5)
    case "P5021" : xpvPrinter(0).Value = "ECOSYS-P5021cdn"
       xpvPrntOpt(0).Name = "DuplexMode"
       select case sPrnOpt
          case "duplex A5" : xpvPrntOpt(0).Value = 3 ' SHORTEDGE
          case "duplex A4" : xpvPrntOpt(0).Value = 2 ' LONGEDGE
          case "einseitig A4" : xpvPrntOpt(0).Value = 1 ' OFF
       end select
    case "Datei" : xpvPrinter(0).Value = "CUPS-PDF-Printer"
       xpvPrntOpt(0).Name = "FileName" : xpvPrntOpt(0).Value = sPath & "/Katalog " & sIssue & ".pdf"
  end select
  xpvPrinter(1).Name = "PaperFormat" : xpvPrinter(1).Value = 1 ' A4
  xpvPrinter(2).Name = "PaperOrientation" : xpvPrinter(2).Value = iif("duplex A5"=sPrnOpt,1,0) ' 1/0=LANDSCAPE/PORTRAIT
  xpvPrntOpt(1).Name = "Pages" : xpvPrntOpt(1).Value = .getCellRangeByName(oShtCrtl.sPrnSeqV).string
  xpvPrntOpt(2).Name = "PageColumns" : xpvPrntOpt(2).Value = iif("duplex A5"=sPrnOpt,2,1)
  xpvPrntOpt(3).Name = "Wait" : xpvPrntOpt(3).Value = true
end with
oDoc.Printer = xpvPrinter()
oDoc.print(xpvPrntOpt())
Was nicht funktioniert:
"Seiten _pro Blatt" - die Property "PageColumns" meint wohl (für Writer) was anderes und wirkt in CALC gar nicht.
Die Papierquelle/"Schacht" - Cassette 1 oder 2 oder MP tray
Auch für andere Druckereinstellungen (eco mode, gloss mode, resolution, …) fehlen mir noch die passenden properties, aber die scheinen sich wenigstens nicht dauernd zu verstellen.

Wer immer mir mit Info zu den fehlenden properties, oder dazu, wo ich deren Beschreibung finden kann, aushilft, kann sich meines ewigen, herzlichen Dankes sicher sein.

Wenn gar nichts hilft, wäre Plan B den Druckdialog wie oben (teilweise) zu füllen und dann zur manuellen Überprüfung/Korrektur anzuzeigen, anstatt mit doc.print(printOptions()) direkt zu starten.
Aber wie das geht, hab ich auch nicht raus gefunden - weiß das jemand?
Zuletzt geändert von nitja am Di 5. Okt 2021, 15:07, insgesamt 1-mal geändert.
LO 24.2.0.3 (X86_64) auf Linux 6.6.19-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

nitja
Beiträge: 123
Registriert: Di 20. Okt 2020, 15:55

Re: Ausdrucken von CALC sheets

Beitrag von nitja » Fr 24. Sep 2021, 12:23

Ein weiteres hab ich inzwischen gefunden: die Papierquelle muss in der Formatvorlage für die Seite (um)gesetzt werden.

edit: Obwohl ich meine mich daran zu erinnern, die Option schon mal gesehen zu haben, wird mir da jetzt nur mehr "[Aus Drucker-Einstellung]" angeboten… wieder nix.
Die zweite Idee, einen Klon des Druckers mit anderen Einstellungen systemweit einzurichten, funktioniert auch nicht. Geht nur mit einem zweiten pdf-Drucker, aber der produziert für 2 Seiten pro Blatt nur absolutes Chaos.
LO 24.2.0.3 (X86_64) auf Linux 6.6.19-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Ausdrucken von CALC sheets

Beitrag von mikele » Fr 24. Sep 2021, 17:57

Hallo,
Geht nur mit einem zweiten pdf-Drucker
Muss es ein Drucker sein? Die pdf-Datei kannst du auch per pdf-Export erzeugen ...
Gruß,
mikele

nitja
Beiträge: 123
Registriert: Di 20. Okt 2020, 15:55

Re: Ausdrucken von CALC sheets

Beitrag von nitja » Fr 24. Sep 2021, 19:05

mikele hat geschrieben:
Fr 24. Sep 2021, 17:57
… Die pdf-Datei kannst du auch per pdf-Export erzeugen ...
So, dass ich zwei Seiten auf eine "drucke"? Und mit der in der Tabelle berechneten Reihenfolge der Seiten? Hab noch nicht raus gefunden, wie das gehen soll.
Dank Dir für das Interesse. Aber schau Dir mal das Bild vom Druckdialog im Eröffnungspost an.
LO 24.2.0.3 (X86_64) auf Linux 6.6.19-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Ausdrucken von CALC sheets

Beitrag von mikele » Sa 25. Sep 2021, 13:25

Hallo,
du hast Recht. Die Option mehrere Seiten auf eine zu drucken, gibt es nicht.
Unabhängig von einer Lösung über einen Drucker, wäre zu überlegen, inwieweit das 2 auf 1 für die pdf-Datei wichtig/nötig wäre. Falls die Datei mal auf Papier gedruckt werden würde, könnte man das dann immer noch tun.
Gruß,
mikele

nitja
Beiträge: 123
Registriert: Di 20. Okt 2020, 15:55

Re: Ausdrucken von CALC sheets

Beitrag von nitja » Di 5. Okt 2021, 15:06

mikele hat geschrieben:
Sa 25. Sep 2021, 13:25
… Falls die Datei mal auf Papier gedruckt werden würde, könnte man das dann immer noch tun.
Damit wären meine Künstler definitiv überfordert.

Aber hier mal der (vorerst?) abschließende Stand der Dinge:
"Seiten _pro Blatt", also "PageColumns"/"PageRows" gibt es nur in com.sun.star.text.XPagePrintable, das von Calc nicht unterstützt wird.
Die print options teilweise für den print-dialog zu befüllen und den dann per dispatcher zu öffnen, geht nicht. Wenn auch nur eine gesetzt ist, wird ohne Nachfragen gedruckt.
Die Druckereigenschaften können (außer der Papierquelle, die in der Seitenvorlage (um) zu setzen ist) nicht per uno service oder ~ interface gesetzt, aber durchaus gelesen werden (auch wenn sie kryptisch daher kommen und die Entschlüsselung der Bedeutung der Einträge viel Experimentieren erfordert).

work around: Die Herum-Arbeit wirkt fast schmerzhaft umständlich, ist im Gebrauch aber erträglich und vermeidet, mit falschen/vergessenen Einstellungen jeweils (Foto-)Papier und Toner für zig Euronen zu "verbrennen", was mir eben schon mehrmals passierte.

Für den A4-Druck wird lediglich der Modus in den Druckereigenschaften geprüft und falls der nicht passt, per msgbox aufgefordert im folgenden "Drucken" Dialog (dispatcher mir leerem dummy Argument) die Einstellung zu korrigieren und eine leere Seite (Seitennummer nach dem Druckbereich) "auszudrucken". (← erst dadurch wird die Einstellung gespeichert.) Anschließen wird automatisch gedruckt.

Für den 2×A5-Druck (geht nur über "Drucken" Dialog) wird die Seitenfolge aus der Tabelle in die Zwischenablage kopiert und dann (wie oben) dazu aufgefordert diese per ctrl-v bei "Seiten" einzutragen*, "Seiten _pro Blatt" auf 2 zu setzen und die anderen Einstellungen genannt, die überprüft und ggf. korrigiert werden müssen.
* Das war vorher mit am lästigsten: Drucken… klicken, merken dass Kopieren der Seitenfolge vergessen wurde, Drucken abbrechen, Zelle mit Seitenfolge rechts klicken, kopieren und wieder von vorn.

Beim pdf-Drucker müssen zwar keine Druckereigenschaften geprüft werden, man kann ihm aber mit dem leeren dispatcher Argument den Dateinamen nicht mitgeben. Heißt, es muss nach dem Drucken die Datei aus dem spool-Verzeichnis mit richtigem, sprechenden Namen in das Arbeitsverzeichnis kopiert und dann aus dem spool-Verzeichnis gelöscht werden.
Nach dem Drucken ist aber nicht etwa, wenn LO seinen Druckauftrag erledigt, also an den pdf-Drucker abgegeben hat. (Ein print job listener nutzt nix.) Das file copy und kill darf erst erfolgen, wenn auch der Drucker seinen Job erledigt hat. Also noch 'ne msgbox "Bitte warten …" … (fileExists oder versuchsweise (on error…) fileCopy nutzt nix, "funktioniert" auch mit noch unvollständiger pdf-Datei.)
LO 24.2.0.3 (X86_64) auf Linux 6.6.19-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten