Convertire documenti di Microsoft Office in PDF tramite la riga di comando
Oggi mi sono definitivamente ed ufficialmente rotto i cojoni.
Sono stufo ed arcistufo di trovare gente che si ostina ad utilizzare gli orrendi formati proprietari di Microsoft Office per divulgare documenti et similia. Mi riferisco in particolare ad alcuni docenti che non riescono a capire che le slides sarebbe meglio distribuirle in formato PDF piuttosto che in quel cesso di PPT.
Quante volte desidero studiare al PC con un sistema leggero e minimale, un semplice Fluxbox come WM e xpdf per leggere i PDF. E invece no! Devo caricare quel bisonte di OpenOffice per poter leggere le slides o gli esercizi (questi ultimi il più delle volte in formato DOC). Poi, già che ci sono, mi metto lì e, non avendo un cazzo da fare, butto nel cesso il poco tempo prezioso che ho per esportare in PDF tutti i files, uno per uno.
Alchè oggi ho detto "basta!!!".
Ho quindi stilato, dopo qualche breve ricerca su Google, una mini-guida che spiega come convertire qualsiasi documento di Microsoft Office in PDF usando semplicemente la riga di comando. Prima di tutto, è necessario avere OpenOffice installato sul proprio sistema, poichè il tutto si baserà sull'uso di una macro creata appositamente per lo scopo.
Per prima cosa, lanciare il binario generico di OpenOffice con:
Sono stufo ed arcistufo di trovare gente che si ostina ad utilizzare gli orrendi formati proprietari di Microsoft Office per divulgare documenti et similia. Mi riferisco in particolare ad alcuni docenti che non riescono a capire che le slides sarebbe meglio distribuirle in formato PDF piuttosto che in quel cesso di PPT.
Quante volte desidero studiare al PC con un sistema leggero e minimale, un semplice Fluxbox come WM e xpdf per leggere i PDF. E invece no! Devo caricare quel bisonte di OpenOffice per poter leggere le slides o gli esercizi (questi ultimi il più delle volte in formato DOC). Poi, già che ci sono, mi metto lì e, non avendo un cazzo da fare, butto nel cesso il poco tempo prezioso che ho per esportare in PDF tutti i files, uno per uno.
Alchè oggi ho detto "basta!!!".
Ho quindi stilato, dopo qualche breve ricerca su Google, una mini-guida che spiega come convertire qualsiasi documento di Microsoft Office in PDF usando semplicemente la riga di comando. Prima di tutto, è necessario avere OpenOffice installato sul proprio sistema, poichè il tutto si baserà sull'uso di una macro creata appositamente per lo scopo.
Per prima cosa, lanciare il binario generico di OpenOffice con:
$ ooffice
Quindi, per creare una nuova macro, cliccare rispettivamente su Tools ---> Macros ---> Organize Macros ---> OpenOffice.org Basic come riportato in figura:
Cliccare poi su My Macros, Standard e quindi sul pulsante New come in figura:
A questo punto, cancellare il testo che potrebbe essere presente nell'editor di testo e copiare il seguente codice (in Visual Basic, bleeeaaah!!!):
Sub DocumentToPDF(strFile as string)
Dim oDoc as Object
Dim strFilterSubName as String
strUrl = ConvertToUrl( strFile )
oDoc = StarDesktop.loadComponentFromURL( strUrl, "_blank", 0, array(MakePropertyValue("Hidden",true)))
If not IsNull(oDoc) Then
strFilterSubName = ""
' select appropriate filter
If oDoc.SupportsService("com.sun.star.presentation.PresentationDocument") Then
strFilterSubName = "impress_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then
strFilterSubName = "calc_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.text.WebDocument") Then
strFilterSubName = "writer_web_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.text.GlobalDocument") Then
strFilterSubName = "writer_globaldocument_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.text.TextDocument") Then
strFilterSubName = "writer_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.drawing.DrawingDocument") Then
strFilterSubName = "draw_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.formula.FormulaProperties") Then
strFilterSubName = "math_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.chart.ChartDocument") Then
strFilterSubName = "chart_pdf_Export"
Else
'
EndIf
EndIf
If Len(strFilterSubName) > 0 Then
oDoc.storeToUrl( ConvertToUrl( strFile & ".pdf" ), array(MakePropertyValue("FilterName", strFilterSubName ),MakePropertyValue("CompressMode", "1" )))
EndIf
oDoc.close(True)
End Sub
Function MakePropertyValue( Optional cName As String, Optional uValue ) As com.sun.star.beans.PropertyValue
oPropertyValue = createUnoStruct( "com.sun.star.beans.PropertyValue" )
If Not IsMissing( cName ) Then
oPropertyValue.Name = cName
EndIf
If Not IsMissing( uValue ) Then
oPropertyValue.Value = uValue
EndIf
MakePropertyValue() = oPropertyValue
End Function
Dim oDoc as Object
Dim strFilterSubName as String
strUrl = ConvertToUrl( strFile )
oDoc = StarDesktop.loadComponentFromURL( strUrl, "_blank", 0, array(MakePropertyValue("Hidden",true)))
If not IsNull(oDoc) Then
strFilterSubName = ""
' select appropriate filter
If oDoc.SupportsService("com.sun.star.presentation.PresentationDocument") Then
strFilterSubName = "impress_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then
strFilterSubName = "calc_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.text.WebDocument") Then
strFilterSubName = "writer_web_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.text.GlobalDocument") Then
strFilterSubName = "writer_globaldocument_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.text.TextDocument") Then
strFilterSubName = "writer_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.drawing.DrawingDocument") Then
strFilterSubName = "draw_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.formula.FormulaProperties") Then
strFilterSubName = "math_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.chart.ChartDocument") Then
strFilterSubName = "chart_pdf_Export"
Else
'
EndIf
EndIf
If Len(strFilterSubName) > 0 Then
oDoc.storeToUrl( ConvertToUrl( strFile & ".pdf" ), array(MakePropertyValue("FilterName", strFilterSubName ),MakePropertyValue("CompressMode", "1" )))
EndIf
oDoc.close(True)
End Sub
Function MakePropertyValue( Optional cName As String, Optional uValue ) As com.sun.star.beans.PropertyValue
oPropertyValue = createUnoStruct( "com.sun.star.beans.PropertyValue" )
If Not IsMissing( cName ) Then
oPropertyValue.Name = cName
EndIf
If Not IsMissing( uValue ) Then
oPropertyValue.Value = uValue
EndIf
MakePropertyValue() = oPropertyValue
End Function
Qui un piccolo screenshot:
Fatto ciò, salvare e chiudere OpenOffice.
Ok, ora arriva la parte più interessante.
Se siete in una directory in cui avete un mix letale di files PPT, DOC, XLS, ecc..., vi basta il semplice e comodo comando seguente per convertire tutti i suddetti files direttamente in PDF, senza dovervi neanche preoccupare di esplicitare il formato di origine (ci pensa la macro a rilevarlo):
Se siete in una directory in cui avete un mix letale di files PPT, DOC, XLS, ecc..., vi basta il semplice e comodo comando seguente per convertire tutti i suddetti files direttamente in PDF, senza dovervi neanche preoccupare di esplicitare il formato di origine (ci pensa la macro a rilevarlo):
$ for i in `ls *`; do ooffice "macro:///Standard.Module1.DocumentToPDF(`pwd`/$i)"; done
Naturalmente, ora ci si può sbizzarrire a fare script di ogni genere e sorta in base alle proprie necessità. Inoltre, per il comando sopra riportato non è necessario l'uso di X, perciò si possono convertire i files tranquillamente in modalità solo testuale.
Cià! :-D
Cià! :-D
12 commenti:
meno male che non lavori uomo... alla fine usano tutti la suite di office e la gente nemmeno sa che esiste open office, figurarsi il resto!
E pensare che per quello che lo usano andrebbe benissimo OO e anzi, farebbe risparmiare alla nostra regione, nonchè stato, nonchè TU ed IO singoli cittadini molti quattrini che invece mandiamo direttamente in america così possono comprarsi armi sempre + fighe con cui andare a rubare nelle altre nazioni... scusate il cinismo, mi è scappata ;)
In questi casi dovresti chiedere ai professori in questione di mettere delle slide in un formato aperto, anche perchè credo siano tenuti a farlo.
ciao andrea,
ho installato OO su una maccchia senza server X, quindi creo la macro in un file di testo.
Come faccio a registrarla e dove devo mettere il file della macro?!
Guarda, il codice della macro va scritto dentro al seguente file:
~/.openoffice.org2/user/basic/Standard/Module1.xba
Presta solo la dovuta attenzione poichè tutti i files di configurazione di OOo sono in XML.
Piuttosto, ti consiglio di seguire passo passo la guida su una macchina con server X, e poi copiare i files in questione sulla tua.
Se avrete ancora un po' di pazienza, sto ultimando uno shell script che dovrebbe fare tutto da solo. Ma non so ancora quando lo rilascerò (il tempo è un maledetto tiranno).
Come promesso poco tempo fa, ho ultimato e pubblicato la prima versione dello script in grado sia di installare da solo la macro per OpenOffice che di convertire un insieme di files di Microsoft Office direttamente in PDF.
Lo trovate qui:
http://barberaware.org/snippet/detail.php?type=snippet&id=8
Have fun!!!
se dovessi fare questa operazione da visual basic 6 che cosa devo cambiare al codice. Un Grazie anticipato a chi mi risponde
pubblisirio@libero.it
Hi there, of course this post is truly pleasant and I have learned lot of things from
it regarding blogging. thanks.
my webpage cleaning services chicago
My web page :: housekeep
Hmm it looks like your site ate my first comment (it was extremely long) so
I guess I'll just sum it up what I submitted and say, I'm thoroughly
enjoying your blog. I as well am an aspiring blog writer but I'm still new to everything. Do you have any suggestions for novice blog writers? I'd really appreciate it.
hardwood floors
my weblog hardwood floor
my site > hardwood floors installation
I have been surfing online more than 4 hours today,
yet I never found any interesting article like yours.
It's pretty worth enough for me. Personally, if all webmasters and bloggers made good content as you did, the internet will be much more useful than ever before.
Feel free to visit my blog ... cls222.kostanye.ru
My web site - http://openrpg.wrathof.com/faq1/Hair_Loss_Treatments_For_Men
I do believe all the ideas you've presented in your post. They're really
convincing and can definitely work. Nonetheless, the posts are too brief for starters.
Could you please lengthen them a little from next time?
Thanks for the post.
my weblog: cleaning companies
Sweet blog! I found it while searching on Yahoo News.
Do you have any tips on how to get listed in Yahoo News?
I've been trying for a while but I never seem to get there! Appreciate it
zezima
Also visit my web-site :: pinfile-C:\Unindexed\unindexed.txt%
You're so awesome! I do not suppose I have read something like this before. So good to discover somebody with a few genuine thoughts on this issue. Seriously.. thanks for starting this up. This web site is one thing that's needed on
the web, someone with some originality!
back massager
Here is my blog ambien
Posta un commento