【问题标题】:Convert text file to PDF file using Powershell使用 Powershell 将文本文件转换为 PDF 文件
【发布时间】:2016-07-24 00:47:28
【问题描述】:

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

另外,有没有办法在文件转换时在文件上加上日期和时间戳?

我不太清楚怎么做我是使用powershell的新手,谢谢!

【问题讨论】:

  • 您能更具体地了解文本文件吗?运行脚本的计算机是否安装了 Word 2010/2013?
  • 我的机器安装了 Word 2007。它需要在几乎所有机器上运行,而且我不能假设他们已经安装了 word。这是唯一的方法吗?文本文件只有用尾线分隔的文本,更具体地说只有零件和固件编号等。我可以在 c# 中做到这一点,但经过一些研究,如果没有另一个库,我似乎无法做到 nativley
  • 我认为可以使用 Microsoft.Office.Interop.Word 在 PowerShell/C# 中执行此操作。在我看来,Word 不是唯一的方法,但您需要第三方库/软件。这个link 也可能有帮助。
  • Powershell 本身不具备与 PDF 相互转换的能力。您需要将脚本与库打包以执行转换,或者需要能够假设它们将安装 Word 或其他一些将为您执行转换的应用程序。
  • 谢谢大家的帮助

标签: .net pdf powershell file-conversion


【解决方案1】:

我让它可以在 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()

【讨论】:

  • 这种情况下的pdf是否需要在我们运行脚本之前创建?
  • 您不需要预先创建 PDF。
  • @TimFerrill 希望这个问题现在仍然可以得到解答,但是有什么办法可以做到这一点并使 PDF 页面变成横向而不是纵向?
  • @chrisdoubleu13 当然可以。添加了一行来处理页面方向。
【解决方案2】:

假设用户安装了 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对象,每行添加一个换行符,否则将全部粉碎文本变成一大堆丑陋的东西。

然后它打开文件对象(有效地创建文件),将$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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 2016-11-24
    • 2022-07-27
    • 1970-01-01
    相关资源
    最近更新 更多