A Sabrina, unica vera mia grande passione.
Tech misc‎ > ‎

Doc2Pdf

Converte un file Microsoft Word in Pdf.

Lo script pilota Word attraverso la sua interfaccia COM ("Word.Application") e genera un file postscript. Poi lo converte in PDF.

Affinchè lo script funzioni correttamente, è necessario installare un stampate PostScript con l'output rediretto su FILE:
Per far ciò è necessario scaricare dal sito Adobe:
  • driver postscript generico
  • file PPD Adobe (PostScript Printer Description)
Installare quindi il driver, assegnargli il PPD corretto, dirigere l'output su FILE: e assegnare un nome (ad esempio GenericPS).

Funzionano anche altri driver postscript ed altri PPD. E' consiglibile comunque che l'output sia rediretto su FILE: (questo per evitare, in caso di errore nello script, di stampare realmente su qualche stampante installata).


Passi dello script:
  • apertura di Word
  • apertura del file doc
  • impostazione della stampante su "GenericPS"
  • stampa del doc su "GenericPS" e creazione file postscript
  • conversione del postscript in pdf (via Ghostscript)


Prerequisiti:



Sorgente:


' --------------------------------------------------------
'
'   Doc2PDF 0.1
'
'   info@fhtino.it
'
' --------------------------------------------------------
Dim cfgGhostScript
Dim objFSO
Dim workDir
Dim errFlag


cfgGhostScript  = "C:\Programmi\gs\gs8.13\bin\gswin32c.exe"

Set objFSO=CreateObject("Scripting.FileSystemObject")

wscript.echo "/\/\/\/\/\ START /\/\/\/\/\"

workDir = objFSO.GetFolder(".").Path & "\"
docFile = "in2.doc"

wscript.echo "DocFile: " & docFile

' --- conversione ---
wscript.echo "convertDoc2PS: start"
errFlag=convertDoc2PS(workDir & docFile, workDir & docFile & ".ps")
wscript.echo "convertDoc2PS: end "

if (errFlag=0) then
	wscript.echo "convertPS2PDFGhostScript: start"
	errFlag=convertPS2PDFGhostScript(workDir & docFile & ".ps", workDir & docFile & ".pdf")
	wscript.echo "convertPS2PDFGhostScript: end"
	if (errFlag=0) then
		wscript.echo "OK"
	else
		wscript.echo "Error PS-->PDF"
	end if
else
	wscript.echo "Error DOC-->PS"
end if

wscript.echo "/\/\/\/\/\ END /\/\/\/\/\"
wscript.quit


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

function convertDoc2PS(byval docFile, byval psFile)
	Dim objWrdApp
	Dim objWrdDoc
	Dim oldActivePrinter
	
	Set objWrdApp=CreateObject("Word.Application")
	objWrdApp.visible=false
	Set objWrdDoc=objWrdApp.Documents.Open(docFile,false,true)
	oldActivePrinter=objWrdApp.activePrinter
	objWrdApp.activePrinter="GenericPS"
	objWrdApp.options.PrintBackGround=false
	objWrdApp.printOut ,,,psFile
	objWrdApp.activePrinter=oldActivePrinter
	objWrdApp.Quit false
	Set objWrdApp=Nothing
	Set objWrdDoc=Nothing	
	
	convertDoc2PS=0
end function

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

function convertPS2PDFGhostScript(byval psFile, byval pdfFile)
	Dim execString
	Dim objWshShell
	Dim intRC
	execString = cfgGhostScript
	execString = execString & " -sFONTPATH=c:\winnt\fonts\ "
	execString = execString & " -dNOPAUSE "
	execString = execString & " -q "
	execString = execString & " -dBATCH "
	execString = execString & " -sDEVICE=pdfwrite "
	execString = execString & " -dCompatibilityLevel=1.3 "
	execString = execString & " -dProcessColorModel=/DeviceCMYK " 
	execString = execString & " -dEmbedAllFonts=true "
	execString = execString & " -dSubsetFonts=true "
	execString = execString & " -dAutoRotatePages=/None "
	execString = execString & " -dAutoFilterColorImages=false "
	execString = execString & " -dColorImageFilter=/FlateEncode "
	execString = execString & " -dEncodeColorImages=true "
	execString = execString & " -dColorConversionStrategy=/LeaveColorUnchanged "
	execString = execString & " -dDownsampleColorImages=false "
	execString = execString & " -dDownsampleGrayImages=false "
	execString = execString & " -dDownsampleMonoImages=false "
	execString = execString & " -r1200 "
	execString = execString & " -sOutputFile=" & """" & pdfFile & """"
	execString = execString & " " & """" & psFile & """"
	set objWshShell = CreateObject("WScript.Shell")
	intRC=objWshShell.Run(execString,7,true)
	set objWshShell = Nothing
	if intRC<>0 then
		wscript.echo "error: " & intRC
		convertPS2PDFGhostScript=1
		exit function
	end if
	convertPS2PDFGhostScript=0
end function

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