[英]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\\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();
}
}
}
}
}
可以使用此功能找到辦公室版本
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.