Word ExportAsFixedFormat - PullRequest
       9

Word ExportAsFixedFormat

0 голосов
/ 21 февраля 2020

Я пытаюсь сделать хитрый скрипт для экспорта в pdf, некоторые файлы Word, которые исправлены, но с "ПРОСТОЙ меткой ревизии". Так что сейчас я использую ExportAsFixedFormat () от Microsoft, но опция 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()

1 Ответ

0 голосов
/ 23 февраля 2020

Я использую Word 2019

Отказ от ответственности: настройки, которые моя программа изменяет в соответствии с требованиями, кажутся липкими, то есть, хотя я не сохраняю документ после изменения настроек разметки они сохраняются при закрытии и повторном открытии документа. Моя программа не пытается вернуть настройки разметки к исходным настройкам

Хитрость здесь заключается в том, чтобы программно установить Markup Insertions на None и Markup Deletions на Hidden

Эти две строки кода выполняют sh this. См. Код ниже для полной работающей и протестированной программы

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

Вот соответствующие настройки в Word

enter image description here

Пример ввода документа

enter image description here

Пример вывода PDF

enter image description here

Код

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)
        $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()
        $docOpen = $false
    }
}
finally
{
    if ($docOpen -eq $true)
    {
        $doc.Close()
    }

    $wordApp.Quit()
}
...