我正在使用 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()
}