Seite 1 von 1

[work around missing features] Ausdrucken von CALC sheets

Verfasst: Do 23. Sep 2021, 12:27
von nitja
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) 2542 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?

Re: Ausdrucken von CALC sheets

Verfasst: Fr 24. Sep 2021, 12:23
von nitja
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.

Re: Ausdrucken von CALC sheets

Verfasst: Fr 24. Sep 2021, 17:57
von mikele
Hallo,
Geht nur mit einem zweiten pdf-Drucker
Muss es ein Drucker sein? Die pdf-Datei kannst du auch per pdf-Export erzeugen ...

Re: Ausdrucken von CALC sheets

Verfasst: Fr 24. Sep 2021, 19:05
von nitja
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.

Re: Ausdrucken von CALC sheets

Verfasst: Sa 25. Sep 2021, 13:25
von mikele
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.

Re: Ausdrucken von CALC sheets

Verfasst: Di 5. Okt 2021, 15:06
von nitja
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.)