如何在 Word 自动化中隐藏 pdf 导入器弹出窗口
How to hide pdf importer popup in word automation
当我使用 Word 自动化打开 PDF 文件时,它会显示一个对话框,要求我确认转换(带有 "do not show again" 复选框)。
Word will now convert your PDF to an editable Word document. This may
take a while. The resulting Word document will be optimized to allow
you to edit the text, so it might not look exactly like the original
PDF, especially if the file contained lots of graphics.
如何隐藏这个对话框?
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\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);
}
}
当我使用 Word 自动化打开 PDF 文件时,它会显示一个对话框,要求我确认转换(带有 "do not show again" 复选框)。
Word will now convert your PDF to an editable Word document. This may take a while. The resulting Word document will be optimized to allow you to edit the text, so it might not look exactly like the original PDF, especially if the file contained lots of graphics.
如何隐藏这个对话框?
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\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);
}
}