Doc2pdf – Convertire file docx in pdf via script

Doc2pdf – Convertire file docx in pdf via script:

Allora, come sappiamo dalla versione 2007 Office integra al suo interno la possibilità di salvataggio in PDF (ricordo che per la versione 2007 è necessario scaricare un componente aggiuntivo che trovate qui). Ma se si trattasse di convertire più di un file ? Ecco che un piccolissimo script risolverà nuovamente il nostro problema.

Cominciamo con il ringraziare Michael Suodenjoki autore dello script , qui potete visitare il suo sito ed eventualmente trovare altre risorse utiliti.

Lo script è scritto in “Visual Basic Scripting”, quindi quello che dovete fare è copiare il codice qui sotto incollarlo in un nuovo file di testo e salvarlo con estensione vbs.

'************************************************

'

' DOC2PDF.VBS Microsoft Scripting Host Script (Requires Version 5.6 or newer)

' --------------------------------------------------------------------------------

'

' Author: Michael Suodenjoki

' Created: 2007.07.07

'

' This script can create a PDF file from a Word document provided you're using

' Word 2007 and have the 'Office Add-in: Save As PDF' installed.

'

' Constants

Const WdDoNotSaveChanges = 0

' see WdSaveFormat enumeration constants:

' http://msdn2.microsoft.com/en-us/library/bb238158.aspx

Const wdFormatPDF = 17 ' PDF format.

Const wdFormatXPS = 18 ' XPS format.

' Global variables

Dim arguments

Set arguments = WScript.Arguments

' ***********************************************

' ECHOLOGO

'

' Outputs the logo information.

'

Function EchoLogo()

If Not (arguments.Named.Exists("nologo") Or arguments.Named.Exists("n")) Then

WScript.Echo "doc2pdf Version 2.0, Michael Suodenjoki 2007"

WScript.Echo "=================================================="

WScript.Echo ""

End If

End Function

' ***********************************************

' ECHOUSAGE

'

' Outputs the usage information.

'

Function EchoUsage()

If arguments.Count=0 Or arguments.Named.Exists("help") Or _

arguments.Named.Exists("h") _

Then

WScript.Echo "Generates a PDF from a Word document file using Word 2007."

WScript.Echo ""

WScript.Echo "Usage: doc2pdf.vbs
[/o: ]"

WScript.Echo ""

WScript.Echo "Available Options:"

WScript.Echo ""

WScript.Echo " /nologo - Specifies that the logo shouldn't be displayed"

WScript.Echo " /help - Specifies that this usage/help information " + _

"should be displayed."

WScript.Echo " /debug - Specifies that debug output should be displayed."

WScript.Echo ""

WScript.Echo "Parameters:"

WScript.Echo ""

WScript.Echo " /o: Optionally specification of output file (PDF)."

WScript.Echo ""

End If

End Function

' ***********************************************

' CHECKARGS

'

' Makes some preliminary checks of the arguments.

' Quits the application is any problem is found.

'

Function CheckArgs()

' Check that is specified

If arguments.Unnamed.Count <> 1 Then

WScript.Echo "Error: Obligatory parameter missing!"

WScript.Quit 1

End If

bShowDebug = arguments.Named.Exists("debug") Or arguments.Named.Exists("d")

End Function

' ***********************************************

' DOC2PDF

'

' Converts a Word document to PDF using Word 2007.

'

' Input:

' sDocFile - Full path to Word document.

' sPDFFile - Optional full path to output file.

'

' If not specified the output PDF file

' will be the same as the sDocFile except

' file extension will be .pdf.

'

Function DOC2PDF( sDocFile, sPDFFile )

Dim fso ' As FileSystemObject

Dim wdo ' As Word.Application

Dim wdoc ' As Word.Document

Dim wdocs ' As Word.Documents

Dim sPrevPrinter ' As String

Set fso = CreateObject("Scripting.FileSystemObject")

Set wdo = CreateObject("Word.Application")

Set wdocs = wdo.Documents

sDocFile = fso.GetAbsolutePathName(sDocFile)

' Debug outputs...

If bShowDebug Then

WScript.Echo "Doc file = '" + sDocFile + "'"

WScript.Echo "PDF file = '" + sPDFFile + "'"

End If

sFolder = fso.GetParentFolderName(sDocFile)

If Len(sPDFFile)=0 Then

sPDFFile = fso.GetBaseName(sDocFile) + ".pdf"

End If

If Len(fso.GetParentFolderName(sPDFFile))=0 Then

sPDFFile = sFolder + "" + sPDFFile

End If

' Enable this line if you want to disable autoexecute macros

' wdo.WordBasic.DisableAutoMacros

' Open the Word document

Set wdoc = wdocs.Open(sDocFile)

' Let Word document save as PDF

' - for documentation of SaveAs() method,

' see http://msdn2.microsoft.com/en-us/library/bb221597.aspx

wdoc.SaveAs sPDFFile, wdFormatPDF

wdoc.Close WdDoNotSaveChanges

wdo.Quit WdDoNotSaveChanges

Set wdo = Nothing

Set fso = Nothing

End Function

' *** MAIN **************************************

Call EchoLogo()

Call EchoUsage()

Call CheckArgs()

Call DOC2PDF( arguments.Unnamed.Item(0), arguments.Named.Item("o") )

Set arguments = Nothing

 

Per eseguire lo script dovrete aprire il prompt dei comandi ed usare questo codice:

C:> cscript /nologo <percorso di doc2pdf.vbs> /nologo <percorso del file docx>

Il file generato avrà per semplicità lo stesso nome del file originale con estensione pdf.

Se voleste anche cambiare nome al file pdf potete aggiungere il parametro /o:.

Poi con un bel ciclo For possiamo processare tutti i file dentro una directory per esempio con:

FOR %a IN (*.docx) DO cscript /nologo doc2pdf.vbs /nologo "%a"


se eseguite il ciclo for all’interno di un batch ricordatevi di raddoppiare “%”:

FOR %%a IN (*.docx) DO cscript /nologo doc2pdf.vbs /nologo "%%a"

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *