-
-
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 @dcazacu21,
Service Account will probably run headless. I am not sure that this kind of Excel automation will work in this context.
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
Great Script. I am running it fine locally, even if I start cmd as a service account. However, if I am using an automation solution (RPA) which is running as the service account (service installed in windows) it will simply get stuck. I can't capture stderr either so I don't know how to troubleshoot it. Any pointers on how I could troubleshoot this? Would be very happy making it work after 2 weeks of pulling my hair out 👍