簡體   English   中英

如何在word自動化中隱藏pdf導入器彈出窗口

[英]How to hide pdf importer popup in word automation

當我使用Word自動化打開PDF文件時,它會顯示一個對話框,要求我確認轉換(使用“不再顯示”復選框)。 在此輸入圖像描述

Word現在將您的PDF轉換為可編輯的Word文檔。 可能還要等一下。 生成的Word文檔將進行優化,以允許您編輯文本,因此它可能看起來不像原始PDF,特別是如果文件包含大量圖形。

如何隱藏此對話框?

var application = new Microsoft.Office.Interop.Word.Application();
application.Visible = false;

try { application.ShowStartupDialog = false; }
catch { }
try { application.DisplayAlerts = WdAlertLevel.wdAlertsNone; }
catch { }

var doc = application.Documents.Open(
    inputFilePath,
    ConfirmConversions: false,
    ReadOnly: true,
    AddToRecentFiles: false,
    Revert: true,
    NoEncodingDialog: true);

PS:ConfirmConversions:true添加其他對話框。

解決方案是編輯Office注冊表。 Software\\Microsoft\\Office\\{version}\\Word\\OptionsDisableConvertPdfWarning

下面的代碼添加或編輯注冊表項並在處置時恢復狀態。

public class WordPdfImportWarningRemover : IDisposable
{
    private const string RegistryDirectoryFormat = @"Software\Microsoft\Office\{0}\Word\Options";
    private const string RegistringKeyName = "DisableConvertPdfWarning";
    private object _oldValue;
    private RegistryValueKind _oldValueKind;
    private bool _keyExists;
    private bool _registryExists;

    public WordPdfImportWarningRemover()
    {
        EditRegistry("16.0");
    }

    public WordPdfImportWarningRemover(string version)
    {
        if(version == null)
            throw new ArgumentNullException(nameof(version));

        EditRegistry(version);
    }

    private void EditRegistry(string version)
    {
        RegistryKey officeOptions = Registry.CurrentUser.OpenSubKey(string.Format(RegistryDirectoryFormat, version), true);
        if (officeOptions != null)
        {
            using (officeOptions)
            {
                _registryExists = true;
                var keys = officeOptions.GetValueNames();
                if (keys.Contains(RegistringKeyName))
                {
                    _keyExists = true;
                    _oldValue = officeOptions.GetValue(RegistringKeyName);
                    _oldValueKind = officeOptions.GetValueKind(RegistringKeyName);
                }
                else
                {
                    _keyExists = false;
                }
                officeOptions.SetValue(RegistringKeyName, 1, RegistryValueKind.DWord);
                officeOptions.Close();
            }
        }
        else
        {
            _registryExists = false;
        }
    }

    public void Dispose()
    {
        if (_registryExists)
        {
            RegistryKey officeOptions = Registry.CurrentUser.OpenSubKey(string.Format(RegistryDirectoryFormat, "16.0"), true);
            if (officeOptions != null)
            {
                using (officeOptions)
                {
                    if (_keyExists)
                    {
                        officeOptions.SetValue(RegistringKeyName, _oldValue, _oldValueKind);
                    }
                    else
                    {
                        officeOptions.DeleteValue(RegistringKeyName, false);
                    }

                    officeOptions.Close();
                }
            }
        }
    }
}

可以使用此功能找到辦公室版本

private static string FindWordVersion()
{
    var application = new Microsoft.Office.Interop.Word.Application();
    try
    {
        string version = application.Version;
        return version;
    }
    finally
    {
        application.Quit(SaveChanges: false);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM