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:
$ 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
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):
$ 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