[Libreoffice-commits] core.git: wizards/source
Jean-Pierre Ledure (via logerrit)
logerrit at kemper.freedesktop.org
Thu Aug 19 15:17:36 UTC 2021
wizards/source/scriptforge/SF_Session.xba | 113 +++++++++++++++++++++++
wizards/source/scriptforge/python/scriptforge.py | 3
wizards/source/sfdocuments/SF_Calc.xba | 15 ++-
wizards/source/sfdocuments/SF_Chart.xba | 2
wizards/source/sfdocuments/SF_Document.xba | 101 ++++++++++++++++++++
wizards/source/sfdocuments/SF_Writer.xba | 11 ++
6 files changed, 240 insertions(+), 5 deletions(-)
New commits:
commit 407b53dd2246e727d19fe94c82cb357af2e4f8ed
Author: Jean-Pierre Ledure <jp at ledure.be>
AuthorDate: Thu Aug 19 15:58:22 2021 +0200
Commit: Jean-Pierre Ledure <jp at ledure.be>
CommitDate: Thu Aug 19 17:16:59 2021 +0200
ScriptForge - (PDF Export) get/set options, export as PDF file
Next methods are introduced in SF_Session:
- GetPDFExportOptions to extract a dictionary of the
40+ existing options for PDF export
- SetPDFExportOptions to update the existing options
When applied the options are permanent also for user manual exports
Those methods are not available in Python.
Next method to export a document to PDF:
- ExportAsPDF: it uses the options set above and/or takes
next specific and transitional options:
pages, password, watermark
This method is implemented for use from Basic and Python
Change-Id: Ic5c4190cff579e62137930f422638aad98e61a16
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120740
Tested-by: Jean-Pierre Ledure <jp at ledure.be>
Tested-by: Jenkins
Reviewed-by: Jean-Pierre Ledure <jp at ledure.be>
diff --git a/wizards/source/scriptforge/SF_Session.xba b/wizards/source/scriptforge/SF_Session.xba
index 63fd4c57bf0a..db3cb9449889 100644
--- a/wizards/source/scriptforge/SF_Session.xba
+++ b/wizards/source/scriptforge/SF_Session.xba
@@ -318,6 +318,61 @@ Catch:
GoTo Finally
End Function ' ScriptForge.SF_Session.ExecutePythonScript
+REM -----------------------------------------------------------------------------
+Public Function GetPDFExportOptions() As Variant
+''' Return the actual values of the PDF export options
+''' The PDF options are described on https://wiki.openoffice.org/wiki/API/Tutorials/PDF_export
+''' PDF options are set at each use of the Export as ... PDF command by the user and kept
+''' permanently until their reset by script or by a new export
+''' Args:
+''' Returns:
+''' A ScriptForge dictionary instance listing the 40+ properties and their value
+''' Examples:
+''' Dim dict As Object
+''' Set dict = session.GetPDFExportOptions()
+''' MsgBox dict.Item("Quality")
+
+Dim vDict As Variant ' Returned value
+Dim oConfig As Object ' com.sun.star.configuration.ConfigurationProvider
+Dim oNodePath As Object ' com.sun.star.beans.PropertyValue
+Dim oOptions As Object ' configmgr.RootAccess
+Dim vOptionNames As Variant ' Array of PDF options names
+Dim vOptionValues As Variant ' Array of PDF options values
+Dim i As Long
+
+Const cstThisSub = "Session.GetPDFExportOptions"
+Const cstSubArgs = ""
+
+ If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
+ Set vDict = Nothing
+
+Check:
+ SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
+
+Try:
+ ' Get the (read-only) internal PDF options
+ Set oConfig = SF_Utils._GetUNOService("ConfigurationProvider")
+ Set oNodePath = SF_Utils._MakePropertyValue("nodepath", "/org.openoffice.Office.Common/Filter/PDF/Export/")
+ Set oOptions = oConfig.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", Array(oNodePath))
+
+ ' Copy the options into a ScriptForge dictionary
+ Set vDict = CreateScriptService("dictionary")
+ vOptionNames = oOptions.getElementNames()
+ vOptionValues = oOptions.getPropertyValues(vOptionNames)
+ '
+ For i = 0 To UBound(vOptionNames)
+ vDict.Add(vOptionNames(i), vOptionValues(i))
+ Next i
+
+
+Finally:
+ GetPDFExportOptions = vDict
+ SF_Utils._ExitFunction(cstThisSub)
+ Exit Function
+Catch:
+ GoTo Finally
+End Function ' ScriptForge.SF_Session.GetPDFExportOptions
+
REM -----------------------------------------------------------------------------
Public Function GetProperty(Optional ByVal PropertyName As Variant) As Variant
''' Return the actual value of the given property
@@ -665,6 +720,64 @@ CatchMail:
GoTo Finally
End Sub ' ScriptForge.SF_Session.SendMail
+REM -----------------------------------------------------------------------------
+Public Function SetPDFExportOptions(Optional ByRef PDFOptions As Variant) As Boolean
+''' Modify the actual values of the PDF export options from an options dictionary
+''' The PDF options are described on https://wiki.openoffice.org/wiki/API/Tutorials/PDF_export
+''' PDF options are set at each use of the Export as ... PDF command by the user and kept
+''' permanently until their reset by script (like this one) or by a new export
+''' The changed options are applicable on any subsequent ExportToPDF user command or to any SaveAsPDF script execution
+''' Args:
+''' PDFOptions: a ScriptForge dictionary object
+''' Returns:
+''' True when successful
+''' Examples:
+''' Dim dict As Object
+''' Set dict = session.GetPDFExportOptions()
+''' dict.ReplaceItem("Quality", 50)
+''' session.SetPDFExportOptions(dict)
+
+Dim bSetPDF As Boolean ' Returned value
+Dim oConfig As Object ' com.sun.star.configuration.ConfigurationProvider
+Dim oNodePath As Object ' com.sun.star.beans.PropertyValue
+Dim oOptions As Object ' configmgr.RootAccess
+Dim vOptionNames As Variant ' Array of PDF options names
+Dim vOptionValues As Variant ' Array of PDF options values
+Dim oDict As Object ' Alias of PDFOptions
+Dim i As Long
+
+Const cstThisSub = "Session.SetPDFExportOptions"
+Const cstSubArgs = "PDFOptions"
+
+ If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
+ bSetPDF = False
+
+Check:
+ If SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
+ If Not SF_Utils._Validate(PDFOptions, "PDFOptions", V_OBJECT, , , "DICTIONARY") Then GoTo Finally
+ End If
+
+Try:
+ ' Get the (updatable) internal PDF options
+ Set oConfig = SF_Utils._GetUNOService("ConfigurationProvider")
+ Set oNodePath = SF_Utils._MakePropertyValue("nodepath", "/org.openoffice.Office.Common/Filter/PDF/Export/")
+ Set oOptions = oConfig.createInstanceWithArguments("com.sun.star.configuration.ConfigurationUpdateAccess", Array(oNodePath))
+
+ ' Copy the options from the ScriptForge dictionary in argument to property values
+ Set oDict = PDFOptions
+ oOptions.setPropertyValues(oDict.Keys, oDict.Items)
+ oOptions.commitChanges()
+
+ bSetPDF = True
+
+Finally:
+ SetPDFExportOptions = bSetPDF
+ SF_Utils._ExitFunction(cstThisSub)
+ Exit Function
+Catch:
+ GoTo Finally
+End Function ' ScriptForge.SF_Session.SetPDFExportOptions
+
REM -----------------------------------------------------------------------------
Public Function SetProperty(Optional ByVal PropertyName As Variant _
, Optional ByRef Value As Variant _
diff --git a/wizards/source/scriptforge/python/scriptforge.py b/wizards/source/scriptforge/python/scriptforge.py
index 23b505a36ef7..714418ffd09c 100644
--- a/wizards/source/scriptforge/python/scriptforge.py
+++ b/wizards/source/scriptforge/python/scriptforge.py
@@ -1762,6 +1762,9 @@ class SFDocuments:
def CloseDocument(self, saveask = True):
return self.ExecMethod(self.vbMethod, 'CloseDocument', saveask)
+ def ExportAsPDF(self, filename, overwrite = False, pages = '', password = '', watermark = ''):
+ return self.ExecMethod(self.vbMethod, 'ExportAsPDF', filename, overwrite, pages, password, watermark)
+
def PrintOut(self, pages = '', copies = 1):
return self.ExecMethod(self.vbMethod, 'PrintOut', pages, copies)
diff --git a/wizards/source/sfdocuments/SF_Calc.xba b/wizards/source/sfdocuments/SF_Calc.xba
index 89afc16fc6ea..390e4b274165 100644
--- a/wizards/source/sfdocuments/SF_Calc.xba
+++ b/wizards/source/sfdocuments/SF_Calc.xba
@@ -928,7 +928,7 @@ Try:
' Initialize sheet and range
Set oSheet = _Component.getSheets.getByName(SheetName)
Set oRange = _ParseAddress(Range)
- ' Create the chart and get the corresponding chart instance
+ ' Create the chart and get ihe corresponding chart instance
oSheet.getCharts.addNewByName(ChartName, oRectangle, Array(oRange.XCellRange.RangeAddress), ColumnHeader, RowHeader)
Set oChart = Charts(SheetName, ChartName)
oChart._Shape.Name = ChartName ' Both used-defined and internal names match ChartName
@@ -1525,6 +1525,7 @@ Public Function Methods() As Variant
, "DMax" _
, "DMin" _
, "DSum" _
+ , "ExportAsPDF" _
, "GetColumnName" _
, "GetFormula" _
, "GetValue" _
@@ -2425,6 +2426,16 @@ Public Function CloseDocument(Optional ByVal SaveAsk As Variant) As Boolean
CloseDocument = [_Super].CloseDocument(SaveAsk)
End Function ' SFDocuments.SF_Calc.CloseDocument
+REM -----------------------------------------------------------------------------
+Public Function ExportAsPDF(Optional ByVal FileName As Variant _
+ , Optional ByVal Overwrite As Variant _
+ , Optional ByVal Pages As Variant _
+ , Optional ByVal Password As Variant _
+ , Optional ByVal Watermark As Variant _
+ ) As Boolean
+ ExportAsPDF = [_Super].ExportAsPDF(FileName, Overwrite, Pages, Password, Watermark)
+End Function ' SFDocuments.SF_Calc.ExportAsPDF
+
REM -----------------------------------------------------------------------------
Public Sub RunCommand(Optional ByVal Command As Variant)
[_Super].RunCommand(Command)
@@ -3218,4 +3229,4 @@ CatchDuplicate:
End Function ' SFDocuments.SF_Calc._ValidateSheet
REM ============================================ END OF SFDOCUMENTS.SF_CALC
-</script:module>
+</script:module>
\ No newline at end of file
diff --git a/wizards/source/sfdocuments/SF_Chart.xba b/wizards/source/sfdocuments/SF_Chart.xba
index 357a2826488b..175fecfccaf8 100644
--- a/wizards/source/sfdocuments/SF_Chart.xba
+++ b/wizards/source/sfdocuments/SF_Chart.xba
@@ -812,4 +812,4 @@ Private Function _Repr() As String
End Function ' SFDocuments.SF_Chart._Repr
REM ============================================ END OF SFDOCUMENTS.SF_CHART
-</script:module>
+</script:module>
\ No newline at end of file
diff --git a/wizards/source/sfdocuments/SF_Document.xba b/wizards/source/sfdocuments/SF_Document.xba
index 40c39822d531..00aa22fc08b4 100644
--- a/wizards/source/sfdocuments/SF_Document.xba
+++ b/wizards/source/sfdocuments/SF_Document.xba
@@ -459,6 +459,102 @@ Catch:
GoTo Finally
End Function ' SFDocuments.SF_Document.CloseDocument
+REM -----------------------------------------------------------------------------
+Public Function ExportAsPDF(Optional ByVal FileName As Variant _
+ , Optional ByVal Overwrite As Variant _
+ , Optional ByVal Pages As Variant _
+ , Optional ByVal Password As Variant _
+ , Optional ByVal Watermark As Variant _
+ ) As Boolean
+''' Store the document to the given file location in PDF format
+''' Args:
+''' FileName: Identifies the file where to save. It must follow the SF_FileSystem.FileNaming notation
+''' Overwrite: True if the destination file may be overwritten (default = False)
+''' Pages: the pages to print as a string, like in the user interface. Example: "1-4;10;15-18". Default = all pages
+''' Password: password to open the document
+''' Watermark: the text for a watermark to be drawn on every page of the exported PDF file
+''' Returns:
+''' False if the document could not be saved
+''' Exceptions:
+''' DOCUMENTSAVEASERROR The destination has its readonly attribute set or overwriting rejected
+''' Examples:
+''' oDoc.ExportAsPDF("C:\Me\myDoc.pdf", Overwrite := True)
+
+Dim bSaved As Boolean ' return value
+Dim oSfa As Object ' com.sun.star.ucb.SimpleFileAccess
+Dim sFile As String ' Alias of FileName
+Dim sFilter As String ' One of the pdf filter names
+Dim vFilterData As Variant ' Array of com.sun.star.beans.PropertyValue
+Dim vProperties As Variant ' Array of com.sun.star.beans.PropertyValue
+Dim FSO As Object ' SF_FileSystem
+Const cstThisSub = "SFDocuments.Document.ExportAsPDF"
+Const cstSubArgs = "FileName, [Overwrite=False], [Pages=""""], [Password=""""], [Watermark=""""]"
+
+ If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo CatchError
+ bSaved = False
+
+Check:
+ If IsMissing(Overwrite) Or IsEmpty(Overwrite) Then Overwrite = False
+ If IsMissing(Pages) Or IsEmpty(Pages) Then Pages = ""
+ If IsMissing(Password) Or IsEmpty(Password) Then Password = ""
+ If IsMissing(Watermark) Or IsEmpty(Watermark) Then Watermark = ""
+
+ If ScriptForge.SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
+ If Not _IsStillAlive() Then GoTo Finally
+ If Not SF_Utils._ValidateFile(FileName, "FileName") Then GoTo Finally
+ If Not SF_Utils._Validate(Overwrite, "Overwrite", V_BOOLEAN) Then GoTo Finally
+ If Not SF_Utils._Validate(Pages, "Pages", V_STRING) Then GoTo Finally
+ If Not SF_Utils._Validate(Password, "Password", V_STRING) Then GoTo Finally
+ If Not SF_Utils._Validate(Watermark, "Watermark", V_STRING) Then GoTo Finally
+ End If
+
+ ' Check destination file overwriting
+ Set FSO = CreateScriptService("FileSystem")
+ sFile = FSO._ConvertToUrl(FileName)
+ If FSO.FileExists(FileName) Then
+ If Overwrite = False Then GoTo CatchError
+ Set oSfa = ScriptForge.SF_Utils._GetUNOService("FileAccess")
+ If oSfa.isReadonly(sFile) Then GoTo CatchError
+ End If
+
+Try:
+ ' Setup arguments
+ sFilter = LCase(_DocumentType) & "_pdf_Export"
+ ' FilterData parameters are added only if they are meaningful
+ vFilterData = Array()
+ If Len(Pages) > 0 Then
+ vFilterData = ScriptForge.SF_Array.Append(vFilterData _
+ , ScriptForge.SF_Utils._MakePropertyValue("PageRange", Pages))
+ End If
+ If Len(Password) > 0 Then
+ vFilterData = ScriptForge.SF_Array.Append(vFilterData _
+ , ScriptForge.SF_Utils._MakePropertyValue("EncryptFile", True) _
+ , ScriptForge.SF_Utils._MakePropertyValue("DocumentOpenPassword", Password))
+ End If
+ If Len(Watermark) > 0 Then
+ vFilterData = ScriptForge.SF_Array.Append(vFilterData _
+ , ScriptForge.SF_Utils._MakePropertyValue("Watermark", Watermark))
+ End If
+
+ ' Finalize properties and export
+ vProperties = Array( _
+ ScriptForge.SF_Utils._MakePropertyValue("FilterName", sFilter) _
+ , ScriptForge.SF_Utils._MakePropertyValue("FilterData", vFilterData))
+ _Component.StoreToURL(sFile, vProperties)
+ bSaved = True
+
+Finally:
+ ExportAsPDF = bSaved
+ ScriptForge.SF_Utils._ExitFunction(cstThisSub)
+ Exit Function
+Catch:
+ GoTo Finally
+CatchError:
+ ScriptForge.SF_Exception.RaiseFatal(DOCUMENTSAVEASERROR, "FileName", FileName, "Overwrite", Overwrite _
+ , "FilterName", "PDF Export")
+ GoTo Finally
+End Function ' SFDocuments.SF_Document.ExportAsPDF
+
REM -----------------------------------------------------------------------------
Public Function GetProperty(Optional ByVal PropertyName As Variant) As Variant
''' Return the actual value of the given property
@@ -500,6 +596,7 @@ Public Function Methods() As Variant
Methods = Array( _
"Activate" _
, "CloseDocument" _
+ , "ExportAsPDF" _
, "PrintOut" _
, "RunCommand" _
, "Save" _
@@ -745,7 +842,7 @@ Try:
, ScriptForge.SF_Utils._MakePropertyValue("FilterOptions", FilterOptions) _
)
If Len(Password) > 0 Then ' Password is to add only if <> "" !?
- vProperties = ScriptForge.SF_Array.Append(vproperties _
+ vProperties = ScriptForge.SF_Array.Append(vProperties _
, ScriptForge.SF_Utils._MakePropertyValue("Password", Password))
End If
End If
@@ -844,7 +941,7 @@ Try:
, ScriptForge.SF_Utils._MakePropertyValue("FilterOptions", FilterOptions) _
)
If Len(Password) > 0 Then ' Password is to add only if <> "" !?
- vProperties = ScriptForge.SF_Array.Append(vproperties _
+ vProperties = ScriptForge.SF_Array.Append(vProperties _
, ScriptForge.SF_Utils._MakePropertyValue("Password", Password))
End If
End If
diff --git a/wizards/source/sfdocuments/SF_Writer.xba b/wizards/source/sfdocuments/SF_Writer.xba
index 7d839c7b5ba6..4acdd5c750f0 100644
--- a/wizards/source/sfdocuments/SF_Writer.xba
+++ b/wizards/source/sfdocuments/SF_Writer.xba
@@ -219,6 +219,7 @@ Public Function Methods() As Variant
Methods = Array( _
"Activate" _
, "CloseDocument" _
+ , "ExportAsPDF" _
, "Forms" _
, "PrintOut" _
, "RunCommand" _
@@ -491,6 +492,16 @@ Public Function CloseDocument(Optional ByVal SaveAsk As Variant) As Boolean
CloseDocument = [_Super].CloseDocument(SaveAsk)
End Function ' SFDocuments.SF_Writer.CloseDocument
+REM -----------------------------------------------------------------------------
+Public Function ExportAsPDF(Optional ByVal FileName As Variant _
+ , Optional ByVal Overwrite As Variant _
+ , Optional ByVal Pages As Variant _
+ , Optional ByVal Password As Variant _
+ , Optional ByVal Watermark As Variant _
+ ) As Boolean
+ ExportAsPDF = [_Super].ExportAsPDF(FileName, Overwrite, Pages, Password, Watermark)
+End Function ' SFDocuments.SF_Writer.ExportAsPDF
+
REM -----------------------------------------------------------------------------
Public Sub RunCommand(Optional ByVal Command As Variant)
[_Super].RunCommand(Command)
More information about the Libreoffice-commits
mailing list