Segue abaixo. Há uns problemas:
- pela lógica da macro que peguei original, ela gera um slide por vez,
apagando temporariamente os outros. Isso causa problema se o numero do
slide aparecer na tela (vai sair sempre como 1)
- deve haver algum bug de memoria do Libreoffice, pois testei numa
pasta com varias apresentacoes (cada uma com uns 30 slides), e ele
"abortou" durante a 3a. apresentacao. Não deu nem erro: simplesmente
parou e fechou o programa. Mas nao parece problema da macro
Não testei mais, mas para o que precisava, ficou ótimo.
[]s
REM ***** BASIC *****
Sub gerarMiniImpress
' Macro para gerar arquivo JPG de cada slide de varias apresentacoes
numa pasta
'
-----------------------------------------------------------------------------
dim pathArquivo as string
pathArquivo =
"C:\Users\Usuario\Documents\AAGilvan\Empresa\UniFeso\Disciplinas\HCC\Aulas\"
nomeArquivo = Dir(pathArquivo + "*.odp") 'Acessa pasta e pega o
primeiro arquivo
Do While (nomeArquivo <> "") ' Repete enquando houver arquivo na pasta
docAnalisado = pathArquivo + nomeArquivo
' Abre documento para descobrir quantas paginas possui
oDoc = abreDocumento( docAnalisado )
numPaginas = oDoc.getDrawPages().getCount()
' Apos descobrir, fecha sem salvar
oDoc.dispose()
' Pega nome do documento, mas sem a extensao (sufixo)
docAnalisadoSemSufixo = Left(docAnalisado, Len(docAnalisado) - 4)
' Faz laco para percorrer cada pagina
For j = 0 To numPaginas - 1
' Abre documento
oDoc = abreDocumento(docAnalisado)
' Apaga todas as paginas, menos a que interessa
apagarPaginasExceto(oDoc, j)
' Cria o nome do arquivo a salvar
novoNome = docAnalisadoSemSufixo + "-Thumb" + CSTR(j+1)
' Exporta como JPG
exportarParaJPG( oDoc, novoNome )
' Fecha sem salvar
oDoc.dispose()
Next j
nomeArquivo = Dir() 'Pega o proximo arquivo
Loop
End Sub
Function abreDocumento( docAux )
' Abre documento Impress
Dim args(0) As New com.sun.star.beans.PropertyValue
' Define a propriedade Hidden como TRUE para abrir escondido
args(0).Name = "Hidden"
args(0).Value = TRUE
oDoc = StarDesktop.LoadComponentFromURL( ConvertToURL( docAux ),
"_blank", 0, args() )
' Retorna com doc
abreDocumento() = oDoc
End Function
Sub apagarPaginasExceto( oDoc, paginaManter )
numPaginas = oDoc.getDrawPages().getCount()
maiorPagina = numPaginas - 1 ' Pois 10 paginas vai de 0 a 9
' Delete the last page, then the page before that,
' then the page before that, until we get to the
' page to keep.
' This deletes all pages AFTER the page to keep.
paginaApagar = maiorPagina
Do While paginaApagar > paginaManter
' Pega a pagina
oPage = oDoc.getDrawPages().getByIndex( paginaApagar )
' Remove a pagina
oDoc.getDrawPages().remove( oPage )
paginaApagar = paginaApagar - 1
Loop
' Delete all the pages before the page to keep.
For i = 0 To paginaManter - 1
' Delete the first page.
paginaApagar = 0
' Get the page.
oPage = oDoc.getDrawPages().getByIndex( paginaApagar )
' Tell the document to remove it.
oDoc.getDrawPages().remove( oPage )
Next i
End Sub
Sub exportarParaJPG( oDoc, cFilename )
Dim sFileUrl As String
sFileUrl = ConvertToURL( cFilename + ".jpg" )
oDrawPage = oDoc.getDrawPages().getByIndex(0)
'creating filter data
Dim aFilterData (7) as new com.sun.star.beans.PropertyValue
'properties valid for all filters
aFilterData(0).Name = "PixelWidth" '
aFilterData(0).Value = 320 'oDrawPage.Width*(72/2540) 'convert =>
mm => inches => pixels (72 points per inch)
aFilterData(1).Name = "PixelHeight"
aFilterData(1).Value = 240 'oDrawPage.Height*(72/2540) 'convert =>
mm => inches => pixels (72 points per inch)
'filter data for the image/jpeg MediaType
aFilterData(2).Name = "Quality"
aFilterData(2).Value = 90
aFilterData(3).Name = "ColorMode"
aFilterData(3).Value = 0
'filter data for the image/png MediaType
'aFilterData(2).Name ="Compression"
'aFilterData(2).Value = 9
'aFilterData(3).Name ="Interlaced"
'aFilterData(3).Value = 0
'filter data for the image/gif MediaType
'aFilterData(2).Name ="Translucent"
'aFilterData(2).Value = true
'aFilterData(3).Name ="Interlaced"
'aFilterData(3).Value = 0
'filter data for the image/bmp MediaType
'aFilterData(2).Name ="Color"
'aFilterData(2).Value = 7
'aFilterData(3).Name ="ExportMode"
'aFilterData(3).Value = 0
'aFilterData(4).Name ="Resolution"
'aFilterData(4).Value = 300
'aFilterData(5).Name ="RLE_Coding"
'aFilterData(5).Value = true
'aFilterData(6).Name ="LogicalWidth"
'aFilterData(6).Value = 2000
'aFilterData(7).Name ="LogicalHeight"
'aFilterData(7).Value = 2000
Dim aArgs (2) as new com.sun.star.beans.PropertyValue
aArgs(0).Name = "MediaType"
aArgs(0).Value = "image/jpeg"
aArgs(1).Name = "URL"
aArgs(1).Value = sFileUrl
aArgs(2).Name = "FilterData"
aArgs(2).Value = aFilterData()
xExporter = createUnoService( "com.sun.star.drawing.GraphicExportFilter" )
xExporter.setSourceDocument( oDrawPage )
xExporter.filter( aArgs() )
End Sub
Em 24 de julho de 2012 07:48, DenisDobbin <[email protected]> escreveu:
> oi Gilvan,
>
> se puder, posta ai... seria interessante ver esse codigo...
>
>
> [ ]'s
>
>
>
>
> Denis Dobbin
> -------------------
>
>
>
> ________________________________
> De: Gilvan Vilarim <[email protected]>
> Para: [email protected]
> Enviadas: Segunda-feira, 23 de Julho de 2012 20:49
> Assunto: Re: [pt-br-usuarios] RESOLVIDO: Gerar miniaturas de apresentacao
>
> Uau, consegui resolver. Fucei na net umas macros e descobri como ler
> varios arquivos dentro de uma pasta. Consegui entao adaptar para mim e
> fazer o seguinte: minha macro pega todos os arquivos de apresentacao
> que eu tiver numa pasta, e gera um arquivo JPG para cada slide de cada
> apresentacao.
>
> Ficou bem legal; tá misturando um pouco de ingles com portugues no
> código mas funciona. Se algum usuário que programa macros quiser, me
> avise que eu mando o codigo.
>
> []s
>
--
Você está recebendo e-mails da lista [email protected]
# Informações sobre os comandos disponíveis (em inglês):
mande e-mail vazio para [email protected]
# Cancelar sua assinatura: mande e-mail vazio para:
[email protected]
# Arquivo de mensagens: http://listarchives.libreoffice.org/pt-br/usuarios/