Generate Word documents with PowerShell
Inthe previous post I mentioned that I was asked to produce a PDF document with source code for a library. In that post I reviewed how to detect and fix file encoding and process files line by line. In this post I'll show how to create Word/PDF documents from PowerShell.
Here's a complete script to dump text files into a Word document. It supposes that all files in UTF8 already.
Let's go through the logic.
First we need to create a document. To create a document we need to create a Word instance:$word = New-Object -ComObject word.application $word.Visible = $false $doc = $word.documents.add()
As we have the document we can make some setup for default layout. I'm changing spacing between lines and make margins narrower:$doc.Styles["Normal"].ParagraphFormat.SpaceAfter = 0 $doc.Styles["Normal"].ParagraphFormat.SpaceBefore = 0 $margin = 36 # 1.26 cm $doc.PageSetup.LeftMargin = $margin $doc.PageSetup.RightMargin = $margin $doc.PageSetup.TopMargin = $margin $doc.PageSetup.BottomMargin = $margin
To write text into the document we need Selection object:$selection = $word.Selection
Having the selection it's easy to put some text - TypeText . To finish a paragraph we must call TypeParagraph .
Here's we're creating a heading (with a file name) and its content.$selection.Style = "Heading 1" $selection.TypeText($relativePath) $selection.TypeParagraph() $selection.Style = "Normal" $selection.TypeText($temp); $selection.TypeParagraph()
To save file (as docx):$outputPath = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent $outputPath = $outputPath + "\sources.docx" $doc.SaveAs($outputPath) $doc.Close() $word.Quit()
To save a file as PDF we'll need to supply additional parameter for SaveAs method - wdFormatPDF value from WdSaveFormat enumeration. To use the enumeration we have to load its assembly:Add-Type -AssemblyName "Microsoft.Office.Interop.Word" $doc.SaveAs([ref]$outputPath, [ref] [Microsoft.Office.Interop.Word.WdSaveFormat]::wdFormatPDF) $doc.Close([Microsoft.Office.Interop.Word.WdSaveOptions]::wdDoNotSaveChanges) $word.Quit() Saving as PDF is actually "export" so if we just call Close() the Word instance will seem to hang. Actually it'll show save dialog. To prevent this we're passing WdSaveOptions.wdDoNotSaveChanges
本文系统（windows）相关术语:三级网络技术 计算机三级网络技术 网络技术基础 计算机网络技术