使用Powershell将文本文件转换为PDF文件

时间:2014-05-27 14:54:00

标签: .net pdf powershell file-conversion

我有一个文本文件,其上有简单的固件版本。我需要使用powershell脚本将文本文件转换为安全的pdf文件。

此外,有没有办法在转换文件时将日期和时间戳放在文件上?

我不知道该怎么做我使用PowerShell相当新,谢谢!

2 个答案:

答案 0 :(得分:2)

我让它与Word 2010一起使用,但它也适用于2007:

# File paths
$txtPath = "C:\Users\Public\test.txt"
$pdfPath = "C:\Users\Public\test.pdf"

# Required Word Variables
$wdExportFormatPDF = 17
$wdDoNotSaveChanges = 0

# Create a hidden Word window
$word = New-Object -ComObject word.application
$word.visible = $false

# Add a Word document
$doc = $word.documents.add()

# Put the text into the Word document
$txt = Get-Content $txtPath
$selection = $word.selection
$selection.typeText($txt)

# Set the page orientation to landscape
$doc.PageSetup.Orientation = 1

# Export the PDF file and close without saving a Word document
$doc.ExportAsFixedFormat($pdfPath,$wdExportFormatPDF)
$doc.close([ref]$wdDoNotSaveChanges)
$word.Quit()

答案 1 :(得分:1)

必须假设用户安装了Word或其他一些此类应用程序的替代方法是在脚本中包含一个库,该脚本将支持将文本转换为PDF。 iTextSharp专门设计用于与.Net一起创建和维护PDF文档。你可以得到它here

唯一的规定是它是使用AGPL(免费!)许可证结构的许可软件,除非您计划将其打包在您自己的软件或某些软件中,并且不打算将其作为开源软件。听起来你只是在写一个脚本,这应该不是问题。如果你是iTextSharp的go find a v4 copy,你实际上可以逃脱,而不必将所有内容透露为开源,所以你可能想要走这条路。

与powershell一起使用它的好参考是slipsec.com/blog post 414,这是我自己通常引用借用代码的地方,我必须自己使用这个库(两次,但我认为这很乏味且烦人所以我不使用它经常,但我很少需要批量或自动生成PDF文档。

所以,细节...这会加载DLL,创建生成PDF文件所需的对象(它使用字体Ariel,字体大小为10)。

然后它读取源文件(C:\ temp \ source.txt用作示例),并将内容添加到$paragraph对象,为每行添加一个New Line字符,否则是smashes所有的文字都变成了一个丑陋的大块。

然后打开文件对象(有效创建文件),将$paragraph对象添加到文件中,然后关闭文件。不需要保存,添加$paragraph对象将数据直接写入驱动器。

[System.Reflection.Assembly]::LoadFrom("C:\path\to\itextsharp\itextsharp.dll")

$doc = New-Object iTextSharp.text.Document
$fileStream = New-Object IO.FileStream("C:\temp\output.pdf", [System.IO.FileMode]::Create)
[iTextSharp.text.pdf.PdfWriter]::GetInstance($doc, $filestream)

#iTextSharp provides a class to work with fonts, but first we have to register them:
[iTextSharp.text.FontFactory]::RegisterDirectories()
$arial = [iTextSharp.text.FontFactory]::GetFont("arial", 10)

$paragraph = New-Object iTextSharp.text.Paragraph

$paragraph.add((gc C:\temp\source.txt|%{"$_`n"})) | Out-Null
$doc.open()
$doc.add($paragraph) | Out-Null
$doc.close()