当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 将 Word 转换为 PDF [2 种方法]

作者:精品下载站 日期:2024-12-14 05:28:53 浏览:13 分类:玩电脑

PowerShell 将 Word 转换为 PDF [2 种方法]


[玩转系统] PowerShell 将 Word 转换为 PDF [2 种方法]

使用 Microsoft Word COM 对象

要将给定的 Microsoft Word 文档转换为 PDF:

  • 使用 New-Object cmdlet 创建 COM 对象。
  • 使用 Open() 方法打开 MS Word 文件。
  • 使用 SaveAs() 方法保存 PDF 文件。
  • 使用 Close() 方法关闭 Word 文档。
  • 使用 Quit() 方法退出 Word 应用程序。

使用 MS Word COM 对象:

$wordApplication = New-Object -ComObject Word.Application
$document = $wordApplication.Documents.Open("E:\Test\file.docx")
$pdfFilePath = "E:\Test\PDFFile.pdf"
$document.SaveAs([ref] $pdfFilePath, [ref] 17)
$document.Close()
$wordApplication.Quit()

我们必须在本地计算机上安装 Microsoft Word 才能使用上述解决方案。首先,我们使用带有 -ComObject 参数的 New-Object cmdlet 创建一个新的 Word COM 对象并将其分配给 $wordApplication 变量。什么是 COM 对象,为什么我们要创建 Word COM 对象;我们可以制作一个简单的物体,对吧?

在 PowerShell 中,组件对象模型组件(也称为 COM 组件)是一种二进制接口标准,它允许软件组件相互交互,而不管它们是使用任何编程语言或操作系统进行编程或开发的。

COM 对象提供了许多属性、方法和事件,我们可以在 PowerShell 脚本中使用它们来执行自动化并与其他应用程序进行通信。由于我们要与 Microsoft Word 应用程序交互,因此必须使用 COM 对象。

为了在 PowerShell 中使用 COM 对象,我们使用 New-Object cmdlet 创建引用 COM 组件的 COM 对象实例,并让我们调用其函数/方法、访问属性和处理事件。

因此,上述脚本中的第一行创建了一个代表 Microsoft Word 应用程序的 COM 对象,并将其分配给 PowerShell 中的 $wordApplication 变量;现在,该变量将用于打开、操作和完成其他与 Word 相关的作业。

COM 对象特定于 Windows 操作系统,需要将它们代表的组件或应用程序安装在我们的本地计算机上。请记住,熟悉 PowerShell 文档和最佳实践至关重要,因为 COM 对象有时涉及复杂的数据类型转换(转换)和内存管理。

接下来,我们使用 $wordApplication 对象的 Document 属性的 Open() 方法,该方法将源文件的路径作为参数并将其打开;该文档对象已分配给 $document 变量。之后,我们定义了一个名为 $pdfFilePath 的变量,并使用转换后的 PDF 文件(我们的输出文件)的文件路径和名称对其进行初始化。

然后,我们使用 $document 对象的 SaveAs() 方法将提供的 Word 文档保存为 PDF 文件。 SaveAs() 方法有两个参数;第一个是输出文件的文件路径和名称,第二个是 PDF 的文件格式常量 (17);两个参数均使用 [ref] 作为引用传递。最后,我们使用Close()方法关闭Word文档,并使用Quit()方法退出Word应用程序。

在上面的示例中,我们转换了一个文件,该文件必须具有 .docx 扩展名,但是如果我们有多个文件怎么办?其中一些带有 .doc 扩展名,另一些带有 .docx 扩展名?在这种情况下,我们将使用以下解决方案。

使用 MS Word COM 对象:

$sourceFilesPath = "E:\Test"
$wordApplication = New-Object -ComObject Word.Application
Get-ChildItem -Path $sourceFilesPath -Filter *.doc? | ForEach-Object {
    $document = $wordApplication.Documents.Open($_.FullName)
    $pdfFilePath = "$($_.DirectoryName)$($_.BaseName).pdf"
    $document.SaveAs([ref] $pdfFilePath, [ref] 17)
    $document.Close()
}
$wordApplication.Quit()

此代码与前面的示例类似。但在这里,我们使用 Get-ChildItem 从给定的 $sourceFilesPath 检索所有文件,并使用 -Filter 参数过滤它们以抓取文件.doc.docx 扩展名。接下来,我们使用 ForEach-Object cmdlet 一次循环遍历所有文件,打开它,存储输出文件的路径和名称,将文件另存为 PDF 并关闭 Word 文档。最后,在检查完所有 Word 文件后,我们使用 Quit() 方法退出 Word 应用程序。

我们还可以使用 Microsoft Office Interop API 将 MS Word 文件转换为 PDF 文件。请参阅以下示例进行演示。

使用 MS Office 互操作 API:

Add-Type -AssemblyName Microsoft.Office.Interop.Word
$sourceFilesPath = "E:\Test"
$wordApplication = New-Object -ComObject Word.Application
Get-ChildItem -Path $sourceFilesPath -Filter *.doc? | ForEach-Object {
    $document = $wordApplication.Documents.Open($_.FullName)
    $pdfFilePath = "$($_.DirectoryName)$($_.BaseName).pdf"
    $document.SaveAs([ref] $pdfFilePath, [ref] [Microsoft.Office.Interop.Word.WdExportFormat]::wdExportFormatPDF)
    $document.Close()
}
$wordApplication.Quit()

首先,我们将 Microsoft Office Interop API 添加为 Add-Type -AssemblyName Microsoft.Office.Interop.Word,它表示一个 Word 文档。我们使用其 wdExportFormatPDF 字段作为 SaveAs() 方法中的参数将文档导出为 PDF 格式。它是 MS Office Interop API 中 17(PDF 文件格式常量)的替代方案。

使用 Microsoft 打印到 PDF 打印机

要将 MS Word 文件转换为 PDF:

  • 使用New-Object cmdlet 创建Word COM 对象。
  • 使用 Open() 方法打开提供的 Word 文档。
  • 使用 PrintOut() 方法将 Word 文档打印为 PDF 文件。
  • 使用 Close() 方法关闭 Word 文档。
  • 使用 Quit() 方法退出 Word 应用程序。

使用 MS Print 转 PDF 打印机:

$wordApplication = New-Object -ComObject Word.Application
$document = $wordApplication.Documents.Open("E:\Test\file.docx")
$pdfFilePath = "E:\Test\PDFFile.pdf"
$document.PrintOut([ref] $false, [ref] $false, [ref] 0, [ref] $pdfFilePath)
$document.Close()
$wordApplication.Quit()

此代码片段与上一节中的第一个示例相同,但有一点不同。我们使用 $document 对象的 PrintOut() 方法在指定的目标 $pdfFilePath 处将 Word 文件打印为 PDF 文件。 该方法采用四个参数,简要描述如下:

  1. $false 表示我们不想将文件打印到物理打印机。
  2. $false 表示我们不想显示Print 对话框。
  3. 0 指定打印给定 Word 文档的所有页面。
  4. $pdfFilePath 指明 PDF 文件的存储目标。

所有参数均使用 [ref] 作为引用传递。我们还可以使用相同的代码但使用 PrintOut() 方法对 .doc.docx 文件执行此操作。

使用 MS Print 转 PDF 打印机:

$sourceFilesPath = "E:\Test"
$wordApplication = New-Object -ComObject Word.Application
Get-ChildItem -Path $sourceFilesPath -Filter *.doc? | ForEach-Object {
    $document = $wordApplication.Documents.Open($_.FullName)
    $pdfFilePath = "$($_.DirectoryName)$($_.BaseName).pdf"
    $document.PrintOut([ref] $false, [ref] $false, [ref] 0, [ref] $pdfFilePath)
    $document.Close()
}
$wordApplication.Quit()

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯