-
-
Save mkoertgen/2087bacda9cff0fa68aa to your computer and use it in GitHub Desktop.
A powershell automating Word to generate Pdf |
*.docx | |
*.docx | |
@echo off | |
setlocal | |
set input=%1 | |
if "%input%"=="" set input=*.docx | |
for %%a in (%input%) do powershell -f doc2pdf.ps1 "%%a" "%%~dpna.pdf" | |
) | |
endlocal |
# cf.: | |
# - http://blog.coolorange.com/2012/04/20/export-word-to-pdf-using-powershell/ | |
# - https://gallery.technet.microsoft.com/office/Script-to-convert-Word-f702844d | |
# http://blogs.technet.com/b/heyscriptingguy/archive/2013/03/24/weekend-scripter-convert-word-documents-to-pdf-files-with-powershell.aspx | |
param([string]$DocInput, [string]$PdfOutput = '.\output.pdf') | |
Add-type -AssemblyName Microsoft.Office.Interop.Word | |
# | |
# - optimize for screen/print: wdExportOptimizeForOnScreen / wdExportOptimizeForPrint | |
# - content only/include markups & comments: wdExportDocumentContent / wdExportDocumentWithMarkup | |
# - create bookmarks: wdExportCreateHeadingBookmarks / wdExportCreateWordBookmarks | |
function WordToPdf([string]$wdSourceFile, [string]$wdExportFile) { | |
$wdExportFormat = [Microsoft.Office.Interop.Word.WdExportFormat]::wdExportFormatPDF | |
$wdOpenAfterExport = $false | |
$wdExportOptimizeFor = [Microsoft.Office.Interop.Word.WdExportOptimizeFor]::wdExportOptimizeForOnScreen | |
$wdExportRange = [Microsoft.Office.Interop.Word.WdExportRange]::wdExportAllDocument | |
$wdStartPage = 0 | |
$wdEndPage = 0 | |
$wdExportItem = [Microsoft.Office.Interop.Word.WdExportItem]::wdExportDocumentContent | |
$wdIncludeDocProps = $true | |
$wdKeepIRM = $true | |
$wdCreateBookmarks = [Microsoft.Office.Interop.Word.WdExportCreateBookmarks]::wdExportCreateHeadingBookmarks | |
$wdDocStructureTags = $true | |
$wdBitmapMissingFonts = $true | |
$wdUseISO19005_1 = $false | |
$wdApplication = $null; | |
$wdDocument = $null; | |
# How to: Programmatically Close Documents (without changes) | |
# http://msdn.microsoft.com/en-us/library/af6z0wa2.aspx | |
$doNotSaveChanges = [Microsoft.Office.Interop.Word.WdSaveOptions]::wdDoNotSaveChanges | |
try | |
{ | |
$wdApplication = New-Object -ComObject "Word.Application" | |
$wdDocument = $wdApplication.Documents.Open($wdSourceFile) | |
$wdDocument.ExportAsFixedFormat( | |
$wdExportFile, | |
$wdExportFormat, | |
$wdOpenAfterExport, | |
$wdExportOptimizeFor, | |
$wdExportRange, | |
$wdStartPage, | |
$wdEndPage, | |
$wdExportItem, | |
$wdIncludeDocProps, | |
$wdKeepIRM, | |
$wdCreateBookmarks, | |
$wdDocStructureTags, | |
$wdBitmapMissingFonts, | |
$wdUseISO19005_1 | |
) | |
} | |
catch | |
{ | |
$wshShell = New-Object -ComObject WScript.Shell | |
$wshShell.Popup($_.Exception.ToString(), 0, "Error", 0) | |
$wshShell = $null | |
} | |
finally | |
{ | |
if ($wdDocument) | |
{ | |
$wdDocument.Close([ref]$doNotSaveChanges) | |
$wdDocument = $null | |
} | |
if ($wdApplication) | |
{ | |
$wdApplication.Quit() | |
$wdApplication = $null | |
} | |
[GC]::Collect() | |
[GC]::WaitForPendingFinalizers() | |
} | |
} | |
$FullInput = (Get-Item ${DocInput}).FullName | |
# http://stackoverflow.com/questions/3038337/powershell-resolve-path-that-might-not-exist | |
$FullOutput = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(${PdfOutput}) | |
Write-Host "Converting ${FullInput} to ${FullOutput}..." | |
WordToPdf ${FullInput} ${FullOutput} |
Hi mkoertgen, thank you very much for your reply! We actually made the script running by making sure in C:\windows\system32\config\systemprofile we have a folder called Desktop.
I think this is because most likely the script is being ran as system account? (correct me if I'm wrong).
It seems the script is running fine now, so thank you very much for this one, it's great!
I am now in talks with support for the RPA solution we use as it seems it is issuing commands now as system, instead of our service account. Don't know why but I hope the will tell me.
Thank you again for your work! very good script
Hi mkoerthen, I have another question related to this script. Is there such a granularity where we can export documents with markups, but not include comments and formatting?
Or is there a possibility to include a macro in your script which would hide comments and formatting?
Thanks in advance!
Dan
Hi @mkoertgen,
Is there a option to have all bookmarks collapsed in the resulting PDF?
Thanks,
Xianhua
Hi @dcazacu21,
Service Account will probably run headless. I am not sure that this kind of Excel automation will work in this context.