2015-04-29 5 views
1

Я установил последнюю версию Adobe Reader на своем ПК (Adobe Acrobat Reader DC). Теперь я хотел бы использовать AxAcroPDFLib в C#, чтобы открыть и показать файл PDF в моем приложении Windows Forms.Попытка открыть PDF-файл с помощью AxAcroPDFLib

Проблема в том, что если я пытаюсь использовать метод LoadFile(), тогда он говорит, что этот метод не существует.

Я загрузил Adobe Acrobat 7.0 Browser Тип управления Library 1.0 COM ссылки в моем проекте, и я добавил Adobe PDF Reader, COM компонент к моей панели инструментов (Tools/Выбор элементов панели инструментов .../COM Components) ,

enter image description here

Что не так? Как открыть файл PDF с помощью этой библиотеки? Я нашел много учебников в Интернете, и все говорят, что я должен использовать метод LoadFile ... Пожалуйста, помогите, спасибо!

+1

Пробовали ли вы использовать метод и посмотреть, если у вас ошибка компилятора или нет? (игнорируйте тот факт, что он не отображается в intellisense) Он получает строковый параметр, который должен содержать путь к файлу PDF. –

+0

Да, есть ошибка компилятора: «Ошибка « AxAcroPDFLib.AxAcroPDF »не содержит определение «LoadFile» и метод расширения «LoadFile», принимающий первый аргумент типа «AxAcroPDFLib.AxAcroPDF», могут быть найдены (вам не хватает директивы using или ссылки на сборку? » –

+0

Какая версия .Net framework используется для вашего приложения, используя Попробуйте изменить версию .Net framework, может быть, AxAcroPDFLib LoadFile несовместим с определенной версией .NET Framework. –

ответ

3

Это больше не поддерживается в Adobe Reader DC. Установите Adobe Reader v11, и он будет работать.

1

Это все еще возможно. Вам просто нужно вызвать метод по-разному.

public void LoadFile(string path) 
{ 
    this.GetOcx().GetType().InvokeMember("LoadFile", BindingFlags.InvokeMethod | 
     BindingFlags.OptionalParamBinding, null, this.GetOcx(), new object[1] { path }); 
} 

См this post for details.

+0

Использование System.Reflection как это действительно сработало для меня. Почему некоторым людям это не нравится? – gridtrak

+0

Я думаю, что downvotes - это потому, что у моего первоначального ответа была только ссылка на исходный пост, а не на полный код. – Scott

1

объект Cast, представляющий элемент управления (типа AxAcroPDFLib.AxAcroPDF) для AcroPDFLib.IAcroAXDocShim интерфейса:

var acro = (AcroPDFLib.IAcroAXDocShim)axAcroPDFControl.GetOcx(); 
acro.LoadFile(fileName); 

Оказывается, что все полезные методы теперь доступны в рамках этого интерфейса. Работает, если установлен Adobe Reader DC.

Немного расширение может быть определено:

public static class AcroExtensions 
{ 
    public static AcroPDFLib.IAcroAXDocShim AsAcroPDF(this AxAcroPDFLib.AxAcroPDF source) 
    { 
     return (AcroPDFLib.IAcroAXDocShim)source.GetOcx(); 
    } 
} 

Тогда вы можете написать:

axAcroPDFControl.AsAcroPDF().LoadFile(fileName) 
1

Только в случае, если кто еще нуждается в решении. Я использую Adobe Acrobat DC и фактически имею метод AxAcroPDF.LoadFile(). Тем не менее, она не работает, то есть ничего не happenns:/

Таким образом, я использовал AxAcroPDF.src свойство с URL для локального файла

axAcroPdf1.src = "file:///c:/my.pdf" 

Надеется, что это помогает

Смежные вопросы