🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst] pdf-Makro Aufzeichnung (LO 7.0.4.2, flatpak) - einzelne Sheets als separate PDF

Alles zur Programmierung im LibreOffice.
Antworten
nostromo
Beiträge: 44
Registriert: So 20. Aug 2017, 12:52
Wohnort: Osnabrück

[gelöst] pdf-Makro Aufzeichnung (LO 7.0.4.2, flatpak) - einzelne Sheets als separate PDF

Beitrag von nostromo » Di 19. Jan 2021, 12:31

Hallo LO-Experten!

Ich habe in meinem aktuellen Projekt versucht mittels Makro-Aufzeichnung ein bestimmtes "sheet" als PDF zu exportieren.
Leider funktioniert das noch nicht richtig...

...was habe ich wie gemacht!?
Hinweis: Das Dokument besteht aus 15 Sheets und nur die Sheets 8,9,10 (=seiten 1 -3) sind als druckbar definiert.

Wenn ich manuell: "...als PDF exportieren" unter "DATEI" auswähle und im folgenden Dialog die zu druckende Seite "3" eingebe, wird auch ein PDF der Seite 3 (= Sheet 10) erstellt.

Wenn ich diesen Vorgang jedoch als Makro aufzeichne und dann ausführe, werden alle drei Seiten im PDF erstellt.
Im aufgezeichneten Makro habe ich im Array:
Array("PageRange",0,"3",com.sun.star.beans.PropertyState.DIRECT_VALUE)
.. als Auswahl der zu druckende Seite "3" ausgemacht ....
Hinweis: auch, wenn ich 1 oder 2 dort angebe wird nicht Seite 1 oder 2 gedruckt - immer alle 3 Seiten!

Was mache ich falsch? Danke!

Aufgezeichnetes Makro:
sub Main
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(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///home/nostromo/TestViaMakro.pdf"
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
args1(2).Name = "FilterData"
args1(2).Value = Array(Array("UseLosslessCompression",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Quality",0,90,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ReduceImageResolution",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("MaxImageResolution",0,300,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTaggedPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SelectPdfVersion",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PDFUACompliance",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportNotes",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ViewPDFAfterExport",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarks",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SinglePageSheets",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenBookmarkLevels",0,-1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTransitionEffects",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsSkipEmptyPages",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportPlaceholders",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportFormFields",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FormsType",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("AllowDuplicateFieldNames",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerToolbar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerMenubar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerWindowControls",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ResizeWindowToInitialPage",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("CenterWindow",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenInFullScreenMode",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DisplayPDFDocumentTitle",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialView",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Magnification",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Zoom",0,100,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageLayout",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FirstPageOnLeft",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialPage",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Printing",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Changes",0,4,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableCopyingOfContent",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableTextAccessForAccessibilityTools",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportLinksRelativeFsys",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PDFViewSelection",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ConvertOOoTargetToPDFTarget",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarksToPDFDestination",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Watermark",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPasswords",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPermissionPassword",0,Array(),com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageRange",0,"3",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureLocation",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureReason",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureContactInfo",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignaturePassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureCertificate",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureTSA",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseReferenceXObject",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE))

dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args1())


end sub
Zuletzt geändert von nostromo am Do 4. Feb 2021, 12:34, insgesamt 2-mal geändert.
cu
nostromo

nostromo
Beiträge: 44
Registriert: So 20. Aug 2017, 12:52
Wohnort: Osnabrück

Re: pdf-Makro Aufzeichnung (LO 7.0.4.2, flatpak)

Beitrag von nostromo » Di 19. Jan 2021, 14:02

Habe hier noch was von 2016 gefunden ...
viewtopic.php?f=12&t=17018&sid=2056d9c6 ... 101418c791

Dort wird behauptet, dass die "PageRange" Properties nicht funktionieren - ist das noch immer so?
Screenshot_20210119_140109.png
Screenshot_20210119_140109.png (30.28 KiB) 2847 mal betrachtet
cu
nostromo

nostromo
Beiträge: 44
Registriert: So 20. Aug 2017, 12:52
Wohnort: Osnabrück

Re: pdf-Makro Aufzeichnung (LO 7.0.4.2, flatpak)

Beitrag von nostromo » Di 19. Jan 2021, 14:21

... liegt nicht am Linux Flatpak - gleicher Mist auch unter Windows (LO 6.4.4.2)
cu
nostromo

nostromo
Beiträge: 44
Registriert: So 20. Aug 2017, 12:52
Wohnort: Osnabrück

Re: pdf-Makro Aufzeichnung (LO 7.0.4.2, flatpak)

Beitrag von nostromo » Di 19. Jan 2021, 16:59

..auch auf die Gefahr, dass ich hier Selbstgespräche führe:

Neue Idee:

Ich werde die Druckbereiche der einzelnen Sheets entweder auf einen sinnvollen Wert:
z.B. "$A$1:$AP$59" oder auf "" per Makro stellen und erst dann ein PDF-Export anstoßen...

Dann werden nur die Seiten gedruckt welche einen definierten Druckbereich haben :-)

Info folgt demnächst....
cu
nostromo

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: [@work] pdf-Makro Aufzeichnung (LO 7.0.4.2, flatpak) - einzelne Sheets als separate PDF

Beitrag von gogo » Di 19. Jan 2021, 20:02

aus dem Off:
Drucken ist eine sehr individuelle Angelegenheit. Sollten noch weitere Probleme auftauchen gilt uneingeschränkt:
== Der Drucker hat immer Recht. ==
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

Re: [@work] pdf-Makro Aufzeichnung (LO 7.0.4.2, flatpak) - einzelne Sheets als separate PDF

Beitrag von mikele » Mi 20. Jan 2021, 01:01

Hallo,
um einzelne Seiten als pdf zu exportieren sollte folgendes Makro reichen:

Code: Alles auswählen

sub Drucken_PDF_Seite
	Dim arg(2) as new com.sun.star.beans.PropertyValue
	arg(0).Name = "URL"	
	arg(0).Value = converttourl("/home/nostromo/TestViaMakro.pdf"")
	arg(1).Name = "FilterName"
	arg(1).Value = "calc_pdf_Export"
	dim aFilterData(0) as new com.sun.star.beans.PropertyValue
	aFilterData(0).Name ="PageRange"
	aFilterData(0).Value ="3"
	arg(2).Name = "FilterData"
	arg(2).Value = aFilterData()
	'Datei schreiben
	ThisComponent.storeToUrl(arg(0).value,arg())
end sub
Es ist aber ein Unterschied, ob du ein bestimmtes Tabellenblatt oder eine bestimmte Seite als pdf exportieren möchtest.
Das folgende Makro exportiert dir die bezeichneten Tabellen. Wenn in der jeweiligen Tabelle ein Druckbereich festgelegt ist, dann nur diesen, ansonsten das gesamte Tabellenblatt.

Code: Alles auswählen

sub pdf_einzelne_Tabellen
	odoc=thiscomponent
	'Container für Mehrfachbereiche erstellen
	obereiche = odoc.createInstance("com.sun.star.sheet.SheetCellRanges")
	'Tabellennamen der zu exportierenden Tabellen
	aTabellen=array("Tabelle1", "Tabelle2", "Tabelle3")
	for i=0 to ubound(aTabellen)
		oTab=odoc.sheets.getbyname(aTabellen(i))
		aDruckbereiche=oTab.printareas
		if ubound(aDruckbereiche)<0 then
			obereiche.addRangeAddress(oTab.getRangeAddress, 0)	'ganze Tabelle
		else
			for k=0 to ubound(aDruckbereiche)
				obereiche.addRangeAddress(aDruckbereiche(k), 0)
			next
		end if
	next		

	'der eigentliche pdf-Export
	'
	'Argumente festlegen
	Dim arg(2) as new com.sun.star.beans.PropertyValue
	arg(0).Name = "URL"	
	arg(0).Value =  converttourl("/home/nostromo/TestViaMakro.pdf"")
	arg(1).Name = "FilterName"
	arg(1).Value = "calc_pdf_Export"
	dim aFilterData(0) as new com.sun.star.beans.PropertyValue
	aFilterData(0).Name = "Selection"
	aFilterData(0).Value = obereiche
	arg(2).Name = "FilterData"
	arg(2).Value = aFilterData()

	'Datei schreiben
	odoc.storetoUrl(arg(0).value,arg())
	
end sub
Allerdings habe ich die Makros nicht unter LO 7.0 gestestet.
Gruß,
mikele

nostromo
Beiträge: 44
Registriert: So 20. Aug 2017, 12:52
Wohnort: Osnabrück

Re: [@work] pdf-Makro Aufzeichnung (LO 7.0.4.2, flatpak) - einzelne Sheets als separate PDF

Beitrag von nostromo » Do 21. Jan 2021, 07:47

@mikele

sorry für die verspätete Reaktion - werde mir den Code anschauen und testen - danke!
cu
nostromo

nostromo
Beiträge: 44
Registriert: So 20. Aug 2017, 12:52
Wohnort: Osnabrück

Re: [gelöst] pdf-Makro Aufzeichnung (LO 7.0.4.2, flatpak) - einzelne Sheets als separate PDF

Beitrag von nostromo » Do 4. Feb 2021, 12:42

@Alle - Danke für die vielen Tipps und Lösungsvorschläge

Meine Lösung habe ich jedoch nicht auf dem letzten Code von @mikele aufgebaut sondern auf der Methode der Festlegung der Druckbereiche auf den jeweils auszudruckenden Sheets.

Dadurch kann ich flexibel steuern welche Bereiche auf verschiedenen Sheets gedruckt werden und welche nicht.
Die Methode des PDF-Exports ändert sich nicht und liefert das erwartete Ergebnis zurück.
cu
nostromo


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten