Exportar desde writer a pdf con contraseña

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
JoTacoronte
Mensajes: 10
Registrado: Lun Oct 05, 2015 11:13 am

Exportar desde writer a pdf con contraseña

Mensaje por JoTacoronte »

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: 10
Registrado: Lun Oct 05, 2015 11:13 am

Re: Exportar desde writer a pdf con contraseña

Mensaje por JoTacoronte »

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Exportar desde writer a pdf con contraseña

Mensaje por mauricio »

Hola... aquí un ejemplo de como exportar un archivo Calc a PDF con contraseña con Python, en Basic debe ser muy similar.

Código: Seleccionar todo

import uno
from com.sun.star.beans import PropertyValue


def propiedades(valores):
    return [PropertyValue(n, 0, v, 0) for n, v in valores.items()]
    
    
def main():
    desktop = XSCRIPTCONTEXT.getDesktop()
    ruta = uno.systemPathToFileUrl('/home/mau/prueba.ods')
    doc = desktop.loadComponentFromURL(ruta, '_blank', 0, ())
    
    filter_data = propiedades({
        'DocumentOpenPassword': 'letmein', 
        'EncryptFile': True, 
        })
    args = {
        'FilterName': 'calc_pdf_Export', 
        'FilterData': uno.Any('[]com.sun.star.beans.PropertyValue', tuple(filter_data))}
    ruta = uno.systemPathToFileUrl('/home/mau/archivo.pdf')
    doc.storeToURL(ruta, propiedades(args))
    
    doc.close(True)
    
    return
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Exportar desde writer a pdf con contraseña

Mensaje por mauricio »

Ahora pueden hacerlo desde Basic, usando EasyMacro:

https://gitlab.com/mauriciobaeza/zaz-ea ... ort-to-pdf

Código: Seleccionar todo

Sub documents_pdf()
    app = createUnoService("net.elmau.zaz.EasyMacro")
	
    path = "/home/mau/writer.odt"
    args = Array( _
        Array("Hidden", True) _
    )
    doc = app.open_doc(path, args)

    'Using options
    path = ""
    args = Array( _
        Array("PageRange", "2"), _
        Array("EncryptFile", True), _
        Array("DocumentOpenPassword", "letmein") _
    )
    path_pdf = app.to_pdf(doc, path, args)
    msg = app.format("PDF save in: {}", path_pdf)
    MsgBox msg
		
    doc.close(True)
End Sub
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder