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.
Exportar desde writer a pdf con contraseña
-
- Mensajes: 10
- Registrado: Lun Oct 05, 2015 11:13 am
Exportar desde writer a pdf con contraseña
OpenOffice 4.1.1 - Windows 8.1 Pro x64
-
- Mensajes: 10
- Registrado: Lun Oct 05, 2015 11:13 am
Re: Exportar desde writer a pdf con contraseña
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.
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
Re: Exportar desde writer a pdf con contraseña
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
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: Exportar desde writer a pdf con contraseña
Ahora pueden hacerlo desde Basic, usando EasyMacro:
https://gitlab.com/mauriciobaeza/zaz-ea ... ort-to-pdf
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
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro