【问题标题】:How to hide pdf importer popup in word automation如何在 Word 自动化中隐藏 pdf 导入器弹出窗口
【发布时间】:2016-06-20 21:25:30
【问题描述】:

当我使用 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 添加另一个对话框。

【问题讨论】:

  • 如果将ConfirmConversions 设置为true 会怎样?
  • ConfirmConversions to true 添加另一个对话框,允许选择输入文件格式(纯文本;RTF;PDF;...)
  • 这是 Word 2013? 2016 年?这是应用程序的用户配置设置,可能存储在 Windows 注册表中,但我不知道它是否有单独的键或者是二进制“数据”键的一部分......没有弄清楚并更改注册表设置 我认为您无能为力。请记住,更改注册表设置可能会让可能依赖此消息的用户感到烦恼。因此,如果您确实弄清楚并更改了它,请务必将其更改回来。 TechNet 上 Word IT Pro 论坛中的某个人可能知道注册表信息,因为他们经常处理注册表。
  • 我无法抗拒,这里是:'只需单击“不再显示”复选框'。现在说真的,我在打开一百个pdf文件的excel宏中遇到了同样的问题——我所做的是打开第一个WordApplication可见的文件,让用户处理对话框,然后制作应用程序对剩余文件不可见。我添加了一个警告,指示用户单击该复选框(这就是笑话的原因)——这对于我的特定场景来说已经足够了。那时在每个用户的机器上编辑注册表并不是我的选择。希望有更好的办法。

标签: c# .net pdf ms-word office-interop


【解决方案1】:

解决方案是编辑办公室注册表。 Software\Microsoft\Office\{version}\Word\Options : DisableConvertPdfWarning

下面的代码添加或编辑注册表项并在处理时恢复状态。

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();
                }
            }
        }
    }
}

这个功能可以找到office版本

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 2020-07-01
    • 1970-01-01
    • 2022-12-31
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    相关资源
    最近更新 更多