【问题标题】:Word ExportAsFixedFormatWord ExportAsFixedFormat
【发布时间】:2020-10-01 22:52:24
【问题描述】:

我正在尝试编写一个棘手的脚本来导出为 pdf,一些 Word 文件已更正,但带有“简单的修订标记”。 因此,现在我使用 Microsoft 的 ExportAsFixedFormat(),但 WdExportItem 选项是二进制(0 或 7):所有修订标记或无。 有人想知道一个可以帮助我实现这个目标的 api 吗?

下面是我的 powershell 脚本:

$path = 'C:\path'

$wd = New-Object -ComObject Word.Application
Get-ChildItem -Path $path -Include *.doc, *.docx -Recurse |
    ForEach-Object {
        $doc = $wd.Documents.Open($_.Fullname)
        $pdf = $_.FullName -replace $_.Extension, '.pdf'
        $doc.ExportAsFixedFormat($pdf,17,$false,0,0,0,0,7,$false, $false,0,$false, $true)
        $doc.Close()
    }
$wd.Quit()

【问题讨论】:

  • 这能回答你的问题吗? powershell word to pdf
  • 查看我的答案以获得完整的工作和测试程序。这里的诀窍是将Markup Insertions 设置为NoneMarkup Deletions 设置为Hidden
  • ArcSet,不,它没有,因为我的问题不在于导出为 pdf,而是涉及修订标记的规范。威廉回答了我的问题。
  • @BelowSea:如果我回答了你的问题,请接受答案:What should I do when someone answers my question?

标签: powershell ms-word


【解决方案1】:

我正在使用 Word 2019

免责声明:我的程序更改的设置以满足 要求似乎很粘,即,虽然我不保存文档 更改标记设置后,它们会在关闭和 重新打开文档。我的程序不会尝试放置标记 设置回原来的设置

这里的诀窍是以编程方式将Markup Insertions 设置为None 并将Markup Deletions 设置为Hidden

这两行代码完成了这个。请参阅下面的代码,了解完整的工作和测试程序

$wordApp.Options.InsertedTextMark = [Microsoft.Office.Interop.Word.WdInsertedTextMark]::wdInsertedTextMarkNone
$wordApp.Options.DeletedTextMark = [Microsoft.Office.Interop.Word.WdDeletedTextMark]::wdDeletedTextMarkHidden

这里是Word中的对应设置

示例 docx 输入

示例 pdf 输出

代码

cls

try
{
    $path = 'C:\temp\'
    $Error.Clear()

    $wordApp = New-Object -ComObject Word.Application
    $wordApp.Visible = $false
    $docOpen = $false

    $wordDocFqPathList = @(Get-ChildItem -Path $path -Include *.doc, *.docx -Recurse)

    foreach ($wordDocFqPath in $wordDocFqPathList)
    {
        $doc = $wordApp.Documents.Open($wordDocFqPath.FullName, $false, $true)
        $docOpen = $true

        $doc.Activate()

        $doc.ActiveWindow.View.Type = [Microsoft.Office.Interop.Word.WdViewType]::wdPrintView
        $doc.ShowRevisions = $true

        #set tracked changes to show change bars only
        $doc.ActiveWindow.View.RevisionsFilter.View = [Microsoft.Office.Interop.Word.WdRevisionsView]::wdRevisionsViewFinal
        $doc.ActiveWindow.View.RevisionsFilter.Markup = [Microsoft.Office.Interop.Word.WdRevisionsMarkup]::wdRevisionsMarkupSimple
        $wordApp.Options.InsertedTextMark = [Microsoft.Office.Interop.Word.WdInsertedTextMark]::wdInsertedTextMarkNone
        $wordApp.Options.DeletedTextMark = [Microsoft.Office.Interop.Word.WdDeletedTextMark]::wdDeletedTextMarkHidden

        $pdfDocFqPath = $wordDocFqPath.FullName.Replace(".docx", ".pdf").Replace(".doc", ".pdf")

        #https://docs.microsoft.com/en-us/office/vba/api/word.document.exportasfixedformat
        $doc.ExportAsFixedFormat($pdfDocFqPath,`
                                    [Microsoft.Office.Interop.Word.WdExportFormat]::wdExportFormatPDF,`
                                    $false,`
                                    [Microsoft.Office.Interop.Word.WdExportOptimizeFor]::wdExportOptimizeForPrint,`
                                    [Microsoft.Office.Interop.Word.WdExportRange]::wdExportAllDocument,`
                                    0, 0,`
                                    [Microsoft.Office.Interop.Word.WdExportItem]::wdExportDocumentWithMarkup,`
                                    $true, $false)

        $doc.Close([Microsoft.Office.Interop.Word.WdSaveOptions]::wdDoNotSaveChanges)
        $docOpen = $false
    }
}
finally
{
    if ($docOpen -eq $true)
    {
        $doc.Close([Microsoft.Office.Interop.Word.WdSaveOptions]::wdDoNotSaveChanges)
    }

    $wordApp.Quit()
}

【讨论】:

  • 我没有这样看,但是,是的,这些代码行是我的脚本所缺少的。感谢 William Charlton 分享这个技巧!
  • @BelowSea 如果我回答了你的问题,请接受我的回答
猜你喜欢
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 2014-03-04
  • 2015-05-22
相关资源
最近更新 更多