Exportar desde writer a pdf con contraseña
Publicado: Jue May 02, 2019 1:50 pm
Buenas tardes.
Enhorabuena por el foro.
Estoy intentando crear un fichero pdf con contraseña a partir de un fichero odt.
Entorno utilizado:
- Windows 10 x64
- Libre Office 6.1.5.2(x64)
La creación del pdf sin contraseña no es problema, pues se genera perfectamente.
Para generar el pdf utilizo el procedimiento, cuyo código pueden ver en el pie de esta pregunta.
La única forma que encontré de poner la contraseña al pdf, fue no añadir el parámetro "FilterData" en el método ExportAsPdf (…, solicitarPass = true ...), ya que de esta forma, writer me muestra el cuadro de diálogo para generar pdf y es ahí donde la pongo.
Posiblemente exista alguna forma de poner la contraseña por código, como por ejemplo:
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 ),
Probablemente haciendo uso del parámetro "PreparedPasswords", pero he probado a darle valores sin éxito.
A ver si algún compañero lo ha logrado. Muchas gracias.
Procedimiento para exportar a pdf:
' ---------------------------------------------------------------------------------------------
' Nombre: ExportAsPdf
' Descripción: Exporta a pdf ficheros writer
' Parámetros:
' - path: Ruta completa del archivo de salida en formato pdf.
' - oDoc: Objeto de tipo documento odt a convertir en pdf.
' - abrirDocumento: Determina si, tras realizar la conversión se debe abrir o no el archivo.
' ---------------------------------------------------------------------------------------------
Sub ExportAsPdf ( path As String, oDoc As Object, solicitarPass As Boolean, Optional abrirDocumento As Boolean )
Dim document As object
Dim dispatcher As object
' Comprobar si existe el fichero
If Not PuedoGenerarDocumento ( path ) Then
Exit Sub
End If
document = oDoc.CurrentController.Frame
dispatcher = createUnoService ( "com.sun.star.frame.DispatchHelper" )
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = ConvertToUrl ( path )
args1(1).Name = "FilterName"
args1(1).Value = "writer_pdf_Export"
If Not solicitarPass Then
args1(2).Name = "FilterData"
args1(2).Value = Array ( Array ( "UseLosslessCompression", 0, true, com.sun.star.beans.PropertyState.DIRECT_VALUE ), _
Array ( "Quality", 0, 90, com.sun.star.beans.PropertyState.DIRECT_VALUE ), _
Array ( "ReduceImageResolution", 0, false, 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 ( "ExportNotes", 0, false, com.sun.star.beans.PropertyState.DIRECT_VALUE ), _
Array ( "ExportBookmarks", 0, true, 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 ( "IsAddStream", 0, false,com.sun.star.beans.PropertyState.DIRECT_VALUE ), _
Array ( "EmbedStandardFonts", 0, false,com.sun.star.beans.PropertyState.DIRECT_VALUE ), _
Array ( "FormsType", 0, 0, com.sun.star.beans.PropertyState.DIRECT_VALUE ), _
Array ( "ExportFormFields", 0, true,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, false,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 ( "_OkButtonString", 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 ( "",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE ) )
End If
dispatcher.executeDispatch ( document, ".uno:ExportToPDF", "", 0, args1 () )
If Not IsMissing ( abrirDocumento ) And abrirDocumento = True Then
'Abrir el fichero
Dim extShell As Object
set extShell = CreateObject ( "Shell.Application" )
extShell.Open path
extShell = Nothing
End if
End Sub
Un saludo a todos.
Enhorabuena por el foro.
Estoy intentando crear un fichero pdf con contraseña a partir de un fichero odt.
Entorno utilizado:
- Windows 10 x64
- Libre Office 6.1.5.2(x64)
La creación del pdf sin contraseña no es problema, pues se genera perfectamente.
Para generar el pdf utilizo el procedimiento, cuyo código pueden ver en el pie de esta pregunta.
La única forma que encontré de poner la contraseña al pdf, fue no añadir el parámetro "FilterData" en el método ExportAsPdf (…, solicitarPass = true ...), ya que de esta forma, writer me muestra el cuadro de diálogo para generar pdf y es ahí donde la pongo.
Posiblemente exista alguna forma de poner la contraseña por código, como por ejemplo:
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 ),
Probablemente haciendo uso del parámetro "PreparedPasswords", pero he probado a darle valores sin éxito.
A ver si algún compañero lo ha logrado. Muchas gracias.
Procedimiento para exportar a pdf:
' ---------------------------------------------------------------------------------------------
' Nombre: ExportAsPdf
' Descripción: Exporta a pdf ficheros writer
' Parámetros:
' - path: Ruta completa del archivo de salida en formato pdf.
' - oDoc: Objeto de tipo documento odt a convertir en pdf.
' - abrirDocumento: Determina si, tras realizar la conversión se debe abrir o no el archivo.
' ---------------------------------------------------------------------------------------------
Sub ExportAsPdf ( path As String, oDoc As Object, solicitarPass As Boolean, Optional abrirDocumento As Boolean )
Dim document As object
Dim dispatcher As object
' Comprobar si existe el fichero
If Not PuedoGenerarDocumento ( path ) Then
Exit Sub
End If
document = oDoc.CurrentController.Frame
dispatcher = createUnoService ( "com.sun.star.frame.DispatchHelper" )
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = ConvertToUrl ( path )
args1(1).Name = "FilterName"
args1(1).Value = "writer_pdf_Export"
If Not solicitarPass Then
args1(2).Name = "FilterData"
args1(2).Value = Array ( Array ( "UseLosslessCompression", 0, true, com.sun.star.beans.PropertyState.DIRECT_VALUE ), _
Array ( "Quality", 0, 90, com.sun.star.beans.PropertyState.DIRECT_VALUE ), _
Array ( "ReduceImageResolution", 0, false, 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 ( "ExportNotes", 0, false, com.sun.star.beans.PropertyState.DIRECT_VALUE ), _
Array ( "ExportBookmarks", 0, true, 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 ( "IsAddStream", 0, false,com.sun.star.beans.PropertyState.DIRECT_VALUE ), _
Array ( "EmbedStandardFonts", 0, false,com.sun.star.beans.PropertyState.DIRECT_VALUE ), _
Array ( "FormsType", 0, 0, com.sun.star.beans.PropertyState.DIRECT_VALUE ), _
Array ( "ExportFormFields", 0, true,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, false,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 ( "_OkButtonString", 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 ( "",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE ) )
End If
dispatcher.executeDispatch ( document, ".uno:ExportToPDF", "", 0, args1 () )
If Not IsMissing ( abrirDocumento ) And abrirDocumento = True Then
'Abrir el fichero
Dim extShell As Object
set extShell = CreateObject ( "Shell.Application" )
extShell.Open path
extShell = Nothing
End if
End Sub
Un saludo a todos.