2016-03-07 73 views
2

當我用Word自動打開PDF文件時,它顯示一個對話框,要求我確認轉換(用「不再顯示」複選框)。 enter image description here如何隱藏PDF導入器在Word自動化彈出

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添加其他對話框。

+0

找到什麼,如果你設置'ConfirmConversions'到TRUE;? –

+0

'ConfirmConversions'爲'true'添加一個允許選擇inupt文件格式的其他對話框(純文本; RTF; PDF; ...) – Kalten

+1

這是Word 2013? 2016?這是應用程序的用戶配置設置,可能存儲在Windows註冊表中,但我不知道它是否具有單獨的密鑰或者是二進制「數據」鍵的一部分......找不到並更改註冊表設置我認爲你可以做的不多。請記住,更改註冊表設置可能會對可能依賴此消息的用戶感到煩惱。所以,如果你確實想出並改變它,一定要改回它。 TechNet上的Word IT Pro論壇中的某個人可能知道註冊信息,因爲他們處理註冊表很多。 –

回答

2

解決方案是編輯辦公室註冊表。 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(); 
       } 
      } 
     } 
    } 
} 

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