Exporteren van een PDF

Forumregels
In dit forum geen vragen stellen, het is uitsluitend bedoeld voor het plaatsten en toelichten van code. Stel vragen in het forum Macro's.
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Exporteren van een PDF

Bericht door RPG »

In OpenOffice wordt vaak gebruik gemaakt van argumenten voor een aanroep. Het meest bekend is dat van de dispatcher. Wanneer de dispacher gebruikt wordt in de frame omgeving dan heten die argumenten de mediadesciptor. De Service MediaDescriptor wordt in de link beschreven. De argumenten van de mediadescriptor kunnen niet alleen gebruikt worden in de dispatcher maar ook in methodes zoals storetoUrl en nog anderen. StoretoUrl kan gebruikt worden om een document te exporteren naar een PDF document.

Bij het exporteren van een document naar een PDF heeft de mediadescriptor ook mogelijkheden om argumenten door te geven om het PDF document vorm te geven en welk deel van het oorspronkelijk document geëxporteerd moet worden.
De media-descriptor heeft een speciaal argument voor het doorgeven van de gegevens. Het heet Filterdata. Filterdata wordt niet alleen gebruikt voor PDF documenten maar ook voor het exporteren of importeren van CSV.

links
API/Tutorials/PDF export - Apache OpenOffice WikiIn bovenstaande link staat een beschrijving in detail over argumenten voor een geëxporteerd PDF document.

Filter Options - Apache OpenOffice Wiki Dit is voor verschillende filters. Het filter voor CSV wordt daar in detail beschreven.


The StarDesktop - Apache OpenOffice Wiki

Diegene die in staat is om zelf iets te programmeren in BASIC is het vinden van deze informatie al mooi. Het zelf programmeren van goede code er omheen is nog niet eenvoudig. Het is aan te bevelen om te zoeken op het Engelse forum. Voor macro's zoek ik bijna altijd naar voorbeelden van Villeroy. Villeroy heeft de persoonlijke eigenschappen om moeilijke code goed uit te leggen en ook voorbeelden te maken die door anderen goed te gebruiken zijn.

Ik zal er twee voorbeelden bij doen.
Het eerste voorbeeld zal een opgegeven gebied doorgeven aan het filter. Daar wordt voor een niet zichtbare selectie en dus export gezorgd.

Het tweede voorbeeld: Er moet een gebied zichtbaar geselecteerd worden. Dit gebied wordt geëxporteerd.

Deze code is feitelijk bedoeld voor mensen die ook zelf kunnen coderen. Hier gaat het feitelijk om te bepalen wat moet geëxporteerd worden. Ik merk ook zelf dat de code zeer verraderlijk is. Tot op het laatste moment blijkt dat er in bepaalde situaties er een fout kan optreden.

Code: Selecteer alles

sub printToPDF_EnSelect

' Definieer eerst array
dim mPrintPDFARG(1) as new com.sun.star.beans.PropertyValue

'Dit is een array speciaal voor een PDF document
Dim FilterProps(0) as New com.sun.star.beans.PropertyValue


' Filter voor een werkblad naar een pdf document
mPrintPDFARG(0).Name = "FilterName"
mPrintPDFARG(0).Value = "calc_pdf_Export"


dim oDoc
dim oActiveSheet
dim oPrintrange 
dim oRanges ' Is een service die een aantal ranges kan bevatten
' We hebben dit nodig voor het exporteren van een bepaald deel

const sGegevens ="$A$36:$F52;$A$60:$F64" ' Dit is het gebied wat ge exporteerd moet worden
oDoc = thiscomponent 'Wordt gericht naar het document waarmee wij willen werken
oActiveSheet=oDoc.getcurrentcontroller.getActiveSheet
oRanges = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges")
dim sRangeGebied
for each sRangeGebied in split(sGegevens,";")
' 	' Hier wordt geregeld wat naar de PDF wordt gestuurd
oPrintrange= oActiveSheet.getCellRangeByName(sRangeGebied) ' Haal de gewenste range op
' Den er aan dat de separator een ; is
oRanges.addRangeAddress(oPrintrange.getRangeAddress,false) ' Voeg het toe tot de gewenste range

next


' voeg het nu toe naar het filter gedeelte voor PDF
	FilterProps(0).Name = "Selection"
	FilterProps(0).Value =oRanges 
	
	mPrintPDFARG(1).Name = "FilterData"
	mPrintPDFARG(1).Value = FilterProps


dim sPDFNaam
sPDFNaam ="/home/romgro/Documenten/opof/data/calc2/Hulpprogrammas/VoorPDF/exportpdf/laatditzien.pdf"
oDoc.storetourl(converttourl(sPDFNaam),mPrintPDFARG())
end sub

Code: Selecteer alles

sub export_Selected_area

' Definieer eerst array
dim mPrintPDFARG(1) as new com.sun.star.beans.PropertyValue

'Dit is een array speciaal voor een PDF document
Dim FilterProps(0) as New com.sun.star.beans.PropertyValue


' Filter voor een werkblad naar een pdf document
mPrintPDFARG(0).Name = "FilterName"
mPrintPDFARG(0).Value = "calc_pdf_Export"


dim oDoc
dim oActiveSheet
dim oPrintrange 
dim oRanges ' Is een service die een aantal ranges kan bevatten
' We hebben dit nodig voor het exporteren van een bepaald deel

const sGegevens ="$A$36:$E158"
oDoc = thiscomponent 'Wordt gericht naar het document waarmee wij willen werken
oActiveSheet=oDoc.getcurrentcontroller.getActiveSheet
oRanges = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges")
dim oSelection
oSelection = oDoc.getCurrentController.getselection
mri oSelection 
dim sRangeGebied
dim sRangeParameter
sRangeParameter=oSelection.AbsoluteName
for each sRangeGebied in split(sRangeParameter,";")
	' Hier wordt geregeld wat naar de PDF wordt gestuurd
	oPrintrange= oActiveSheet.getCellRangeByName(sRangeGebied) ' Haal de gewenste range op
	' Den er aan dat de separator een ; is
	oRanges.addRangeAddress(oPrintrange.getRangeAddress,false) ' Voeg het toe tot de gewenste range
next




if 1=0 then 
'Het kan ook op deze manier
if HasUnoInterfaces(oSelection,"com.sun.star.sheet.XSheetCellRanges") then
	'er zijn meerdere selecties
	for each sRangeGebied in oSelection.getRangeAddresses
	oRanges.addRangeAddress(sRangeGebied,false)
	next
else ' er is maar een enkele selectie
	'Ik heb geen test voor een groot gebied
	oRanges.addRangeAddress(oSelection.getRangeAddress,false)
end if
end if


' voeg het nu toe naar het filter gedeelte voor PDF
	FilterProps(0).Name = "Selection"
	FilterProps(0).Value =oRanges
	
	mPrintPDFARG(1).Name = "FilterData"
	mPrintPDFARG(1).Value = FilterProps


dim sPDFNaam
sPDFNaam ="/home/romgro/Documenten/opof/data/calc2/Hulpprogrammas/VoorPDF/exportpdf/laatditzien.pdf"
oDoc.storetourl(converttourl(sPDFNaam),mPrintPDFARG())
end sub
LibreOffice 7.4.3.2 op openSUSE Leap 15.4