Macro para exportar para PDF na mesma pasta e com o mesmo nome do arquivo original

Preciso de uma macro que exporte arquivos .odt para o formato .pdf.

O código a seguir seria suficiente se não fosse o fato de que os arquivos .odt a serem convertidos são localizados em pastas diferentes e com nomes diferentes. Preciso que a macro seja capaz de exportar cada pdf para a mesma pasta e com o mesmo nome do arquivo .odt que estiver aberto. Ou seja: apenas quero ter uma cópia em pdf para cada arquivo .odt localizados em diversas pastas (mantendo o nome original do arquivo).

sub Exporta_PDF
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///C:/Users/nomedeusuario/Documentos/teste).pdf"
args1(1).Name = "FilterName"
args1(1).Value = "writer_pdf_Export"

dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())


end sub

Preciso de algo parecido com o código abaixo que funcione no LibreOffice:

sub printPdf(cFile as string)

dim dispatcher as object
cURL = ConvertToURL( cFile )
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
dim args2(0) as new com.sun.star.beans.PropertyValue

cFile = Replace( cFile, "\", "/" )

nPosExtension = InStr( cFile, "." )
cFile = Mid$( cFile, 1, nPosExtension - 1 )

args1(0).Name = "URL"
args1(0).Value = "file:///" + cFile + ".pdf"
args1(1).Name = "FilterName"
args1(1).Value = "writer_pdf_Export"
args2(0).Name = "Hidden"
args2(0).Value = True

oDoc = StarDesktop.loadComponentFromURL(cURL, "_blank", 0, args2())

dispatcher.executeDispatch(oDoc.getCurrentController, ".uno:ExportDirectToPDF", "", 0, args1())

end sub

Fonte: [Solved] Export a template.ott to pdf via commandline (View topic) • Apache OpenOffice Community Forum

O código abaixo faz o que você quer. Estou tentando descobrir como exportar para pdf várias planilhas separadamente utilizando um laço.

Sub EXPORTTOPDF

dim URLStr     as string
dim document   as object
dim dispatcher as object
dim caminho    as string
dim planilha   as object
dim args(2) as new com.sun.star.beans.PropertyValue

	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	URLStr = ThisComponent.getURL()
    caminho = DirectoryNameoutofPath(URLStr, "/")
	planilha = ThisComponent.CurrentController.ActiveSheet

	args(0).Name = "URL"
	args(0).Value = caminho & "/" & planilha.name & ".pdf"
	args(1).Name = "FilterName"
	args(1).Value = "calc_pdf_Export"

	dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args())

End Sub

1 Like