Ogni giorno vi trovate a dover convertire decine di documenti Office in file PDF per poterli poi archiviare, o spedire via mail ai clienti, va bene che ci sono le stampanti virtuali che creano i PDF, però quanto tempo perdete ad aprire il singolo file di Office, inviarlo in stampa e convertirlo in PDF, oppure salvarlo in formato PDF se avete delle versioni recenti della suite di programmi per l'ufficio. Utilizzando un paio di script PowerShell è possibile convertire, in una sola volta, gruppi di file Office in formato PDF attendendo solo qualche momento a seconda del numero di file presenti.

Dalle prove fatte la conversione è sempre stata buona, l'impaginazione mantenuta e non ho notato modifiche inattese ai caratteri utilizzati nel documento originale.
Chiaramente non posso garantire che questo avvenga con tutti i tipi di documenti Office, magari pieni di tabelle, grafici o impaginazioni strane. Non vi resta che provare i due script e valutare i risultati.
Dovete solo creare una cartella temporanea dove copiare i file da convertire (non fatelo mai con i file originali per non rischiare di perderli), modificare, con notepad, la prima riga dello script e inserire il percorso della vostra cartella. I PDF saranno salvati nella stessa cartella che contiene i file di Office.
In allegato all'articolo trovate i due file PS1 degli script già pronti all'uso.
Questo è lo script per la conversione dei file DOC e DOCX:
$documents_path = 'D:\Temp'$word_app = New-Object -ComObject Word.Application# This filter will find .doc as well as .docx documentsGet-ChildItem -Path $documents_path -Filter *.doc? | ForEach-Object {$document = $word_app.Documents.Open($_.FullName)$pdf_filename = "$($_.DirectoryName)\$($_.BaseName).pdf"$document.SaveAs([ref] $pdf_filename, [ref] 17)$document.Close()}$word_app.Quit()
Mentre con questo script convertite i file XLS e XLSX:
$path = "D:\temp"$xlFixedFormat = "Microsoft.Office.Interop.Excel.xlFixedFormatType" -as [type]$excelFiles = Get-ChildItem -Path $path -include *.xls, *.xlsx -recurse$objExcel = New-Object -ComObject excel.application$objExcel.visible = $falseforeach($wb in $excelFiles){$filepath = Join-Path -Path $path -ChildPath ($wb.BaseName + ".pdf")$workbook = $objExcel.workbooks.open($wb.fullname, 3)$workbook.Saved = $true"saving $filepath"$workbook.ExportAsFixedFormat($xlFixedFormat::xlTypePDF, $filepath)$objExcel.Workbooks.close()}$objExcel.Quit()
Il file PDF è poi apribile con un qualsiasi programma compatibile con questo formato e ha, almeno nelle prove che ho fatto, mantenuto sempre l'impaginazione originale.
