giovedì, ottobre 25, 2007

Schemini di Probabilità e Statistica

Oggi ho deciso di provare Scribd, un nuovo servizio Web 2.0 uscito poco tempo fa che consente di pubblicare e consultare online diversi tipi di documenti.

Per l'occasione ho deciso di pubblicare i due schemini, fatti rigorosamente in LaTeX, che ho preparato tempo fa per il corso di Probabilità e Statistica.

Inutile ricordare che commenti, suggerimenti e correzioni sono sempre molto graditi e ben accetti.



martedì, ottobre 09, 2007

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:

$ 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