Exportar desde writer a pdf con contraseña

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

Exportar desde writer a pdf con contraseña

Notapor JoTacoronte » 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.
OpenOffice 4.1.1 - Windows 8.1 Pro x64
JoTacoronte
 
Mensajes: 5
Registrado: Lun Oct 05, 2015 11:13 am

Re: Exportar desde writer a pdf con contraseña

Notapor JoTacoronte » Lun May 06, 2019 9:15 am

Hola.
Aún no he conseguido establecer por código la contraseña del fichero pdf al realizar la conversión.

Aunque lo he conseguido utilizando un soft portable, ejecutándolo con shell (writer):

------------------------------------------------------------------------------
PDFTK Builder Portable
https://portableapps.com/apps/office/pd ... r_portable
------------------------------------------------------------------------------
Ejecutando: pdftk "path1/fichero.pdf" output "path2/fichero.pdf" user_pw PASSWORD
------------------------------------------------------------------------------

Siendo el código:
' Exportar los pdf con contraseña
Dim sParametros As String
Dim pass As String
pass = "test"
sParametrosCertificado = pathPdfOriginal & " output " & pathPdfOriginalPass & " user_pw " & pass
Shell("E:/Portables/PDFTKBuilderPortable/App/pdftkbuilder/pdftk", 1, sParametros

Aunque no estoy contento, ya que supongo que se pueda hacer por código directamente.
Seguiré investigando.
Si alguien se le ocurre algo a ver si puede comentarlo.

Gracias y un saludo.
OpenOffice 4.1.1 - Windows 8.1 Pro x64
JoTacoronte
 
Mensajes: 5
Registrado: Lun Oct 05, 2015 11:13 am


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados