Как открыть pdf в webbrowser windows forms

Обновлено: 05.07.2024

Я создал "Справку пользователя", которая представляет собой файл PDF, и я хочу, чтобы этот файл PDF отображался, если пользователь нажимает кнопку "Справка" в WinForm. Если предположить, что Adobe Reader предварительно установлен на компьютере пользователя.

Как открыть PDF-файл по нажатию кнопки в WinForm?

Я не планирую размещать этот PDF-файл на жестком диске пользователя. Это означает, что я должен вставить этот PDF-файл в калькулятор (winForm) и отображать его при нажатии кнопки.

Пожалуйста, ознакомьте меня с наилучшей практикой для отображения встроенного файла в WinForm.

Я бы включил его в папку с моей программой, добавил ссылку в папку "Пуск", чтобы разрешить прямой доступ (без запуска моего инструмента) и просто при каком-либо событии щелчка System.Diagnostics.Process.Start(@".\Manual.pdf");

Обновить

Хорошо, теперь мы подошли к совершенно новому вопросу: как встроить файл в мое приложение и запустить его?

  1. Щелкните правой кнопкой мыши свой проект и выберите "Добавить - существующий элемент".
  2. Выберите свой файл (не дважды щелкните по нему)
    • Нажмите на маленькую стрелку рядом с кнопкой Добавить и выберите Добавить как ссылку.
  3. Дважды щелкните Свойства - Resources.resx
  4. Нажмите на маленькую стрелку рядом с Добавить ресурс и выберите Добавить существующий файл.
  5. Выберите тот же файл снова в открытом диалоге
  6. Теперь вы можете получить доступ к файлу в вашем коде как byte[] от Properties.Resources.NameOfResource

С помощью этих шагов вы ссылаетесь на ваш файл, где бы он ни находился в вашей структуре. Если вам это нравится, копия вашего файла PDF будет помещена в подпапку Resources вашего проекта, просто пропустите пункты один и два в приведенном выше списке.

Чтобы открыть PDF-файл, вам нужно записать байт [] на диск (возможно, с Path.GetTempFileName() ) и запустите его с помощью Adobe Reader. (Не забудьте удалить файл после использования)

Вы можете сослаться на элемент управления Adobe Reader ActiveX и связать его с вашим приложением.

Просто добавь AcroPDF.PDF.1 на панель инструментов на вкладке COM-компоненты (щелкните правой кнопкой мыши на панели инструментов и выберите Choose Items. ) затем перетащите экземпляр на Winform, чтобы дизайнер создал код для вас. В качестве альтернативы, после добавления необходимой ссылки вы можете использовать следующий код:

Вы можете использовать элемент управления WebBrowser и позволить IE загрузить программу чтения PDF для вас, если она установлена ​​на компьютере.

Однако в последний раз, когда я пытался это сделать, мне сначала нужно было записать файл PDF на диск, чтобы я мог указать на него элемент управления WebBrowser.

Если вы хотите отобразить PDF внутри своего приложения, элемент управления WebBrowser, вероятно, предпочтительнее, чем элемент управления Adobe Reader, поскольку он будет очень плавно открывать файл в PDF Reader или в любом другом браузере, который IE использует по умолчанию для открытия PDF-файлов. Вы просто добавляете элемент управления WebBrowser к существующей или новой форме и переходите к файлу PDF.

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

Есть ли БЕСПЛАТНАЯ библиотека, которая позволит мне открыть PDF-файл и показать его в проекте winform. Я знаю, что могу открыть его в Adobe Reader или чем-то подобном, но мне он всегда кажется таким раздутым, и я бы рассчитывал, что он будет установлен. Есть ли хорошая легкая альтернатива, где я мог бы просто включить dll в свой проект или что-то подобное, избегая внешних зависимостей.

Мне не нужна большая функциональность, просто просмотр, изменение масштаба страницы ..

Я видел несколько библиотек, но они, похоже, предназначены для создания PDF-файлов, а не для просмотра.

Элемент управления ActiveX, установленный вместе с программой чтения acrobat, должен работать: либо вставьте его через конструктор, либо используйте что-то вроде это.

Для этого потребуется, чтобы на клиенте была установлена ​​соответствующая версия считывателя, но, поскольку вы указываете, что можете просто запустить ее, в любом случае это не должно быть проблемой. читатель

Я не уверен, что вы называете «зависимостью», поскольку вам всегда придется полагаться на некоторый внешний код для рендеринга PDF, если вы не объедините весь источник рендеринга PDF в свой проект.

Есть несколько коммерческих средств визуализации и очень мало бесплатных.

Большинство других библиотек с открытым исходным кодом используются только для создания и управления страницами PDF, и я не знаю ни одной, которая действительно выполняет рендеринг; это такая сложная проблема, которую правильно решить.

Сначала вам нужно сослаться на элемент управления ActiveX Adobe Reader.

Библиотека типов управления браузером Adobe Acrobat 1.0

% programfiles & \ Common Files \ Adobe \ Acrobat \ ActiveX \ AcroPDF.dll

Затем вы просто перетаскиваете его в свою форму Windows из панели инструментов.

И используйте такой код для инициализации элемента управления ActiveX.

Убедитесь, что когда ваша форма закрывается, вы избавляетесь от элемента управления ActiveX

В противном случае Acrobat может остаться без дела.

Я бы посмотрел на Foxit Reader как на легкую альтернативу Adobe Reader . Он состоит из одного файла .exe, который вы можете связать с вашим приложением и поэтому не требует установки. В соответствии с их лицензионным соглашением это разрешено, если ваше приложение не установлено на мобильных устройствах. Все, что вам нужно сделать, это запустить читалку как новый процесс, указав на соответствующий pdf-файл. Очевидно, недостатком этого подхода является то, что он не будет интегрирован в интерфейс вашего приложения.

Вы можете использовать Spire.PDFViewer из Nuget. См. здесь

Существует бесплатная библиотека PDF. В основном это редактирование содержимого, но это может помочь.

То, как браузер отображает PDF-файл внутри него с помощью плагина. Я не уверен, требуется ли для этого установка приложения.

Вы можете использовать программу Foxit reader ИЛИ Sumatra PDF.
И вы можете разместить элемент управления браузера на своей winform.

Поместите в форму элемент управления WebBrowser. strPdfFile = "C: \ SomeFile.pdf" webBrowser.Url = новый URI (strPdfFile);

У нас это работало, пока не попробовали на системе Win7-64bit. Теперь нужно выполнить некоторую отладку.

Я создал "пользовательскую справку", которая является pdf-файлом, что я хочу, чтобы отобразить этот pdf-файл, если пользователь нажимает на кнопку" справка " в WinForm. Если предполагается, что Adobe reader предварительно установлен на компьютере пользователя.

как открыть файл pdf при нажатии кнопки в winForm?

Я не планирую предоставлять этот pdf-файл на жестком диске пользователя. А это значит, что я должен вставьте этот pdf-файл в калькулятор (winForm) и отобразите его нажатием кнопки.

любезно направьте меня с лучшей практикой для отображения встроенного файла в winForm.

Я бы поставил его в моей папке программы, добавить ссылку в моей папке меню "Пуск", чтобы разрешить прямой доступ (без запуска моего инструмента) и просто на каком-то событии щелчка System.Diagnostics.Process.Start(@".\Manual.pdf");

обновление

хорошо, теперь мы подошли к совершенно новому вопросу: как встроить файл в мое приложение и запустить его?

  1. щелкните правой кнопкой мыши проект и выберите Добавить-Существующий Элемент
  2. Выберите файл (не дважды щелкните по нему)
    • нажмите на маленькую стрелку рядом с кнопкой Добавить и выберите Добавить Как Ссылку
  3. дважды щелкните свойства-ресурсы.resx файл
  4. нажмите маленькую стрелку рядом с Добавить ресурс и выберите Добавить существующий файл
  5. выберите тот же файл еще раз в диалоговом окне открыть
  6. теперь вы можете получить доступ к файлу внутри ваш код как byte[] С Properties.Resources.NameOfResource

С помощью этих шагов вы ссылаетесь на свой файл, где бы он ни существовал в вашей структуре. Если вам нравится, что копия вашего pdf-файла будет помещена в подпапку ресурсов в вашем проекте, просто пропустите пункты один и два в приведенном выше списке.

чтобы открыть pdf-файл, вам нужно записать байт[] на диск (возможно, с помощью Path.GetTempFileName() ) и запустите его с помощью Adobe Reader. (Не забудьте удалить файл после использование)

вы можете ссылаться на элемент управления Adobe Reader ActiveX и связывать его с приложением.

просто добавить AcroPDF.PDF.1 на панель инструментов на вкладке компоненты COM (щелкните правой кнопкой мыши панель инструментов и выберите Choose Items. ) затем перетащите экземпляр на Winform, чтобы дизайнер создал код для вас. В качестве альтернативы, после добавления необходимой ссылки вы можете использовать следующий код:

можно использовать управления WebBrowser и пусть IE загружает PDF-ридер для вас, если он установлен на машине.

однако в последний раз, когда я пробовал это, мне пришлось сначала записать файл PDF на диск, чтобы я мог указать на него элемент управления WebBrowser.

Если вы хотите отобразить pdf внутри вашего приложения, элемент управления WebBrowser, вероятно, предпочтительнее элемента управления Adobe Reader, так как он откроет файл очень плавно в PDF Reader или любом другом IE, используемом по умолчанию для открытия PDF-файлов. Просто добавьте элемент управления WebBrowser в существующую или новую форму и перейдите к файлу pdf.

никогда не предполагайте, что у пользователя есть Adobe или любые другие сторонние элементы управления или библиотеки, установленные на их машинах, всегда упаковывайте их с помощью executable или у вас могут быть проблемы.

Если у вашего пользователя установлен Adobe Reader (или любой другой PDF reader), вы можете использовать:

надеюсь, что это помогает.

Примечание: очевидно, это не удастся, если у пользователя не установлены приложения для чтения PDF.

Я бы предложил преобразовать ваш pdf-файл в файл справки Microsoft, чтобы вам не нужно было устанавливать Adobe Reader (он глючит и имеет слишком много проблем с безопасностью). Этого нельзя ожидать от пользователей.

в ответ на комментарий пускателя:

да, вам нужно будет создать файл справки в виде HTML-документа вместо pdf. Нет простого способа конвертировать pdf в HTML.

возможно встроить Adobe Reader в вашу форму в качестве компонента ActiveX. Но это означает, что вам нужно убедиться, что Reader установлен на клиентской машине, чтобы это работало.

в случае, если он не должен быть строго встроен, вы можете просто запустить PDF-файл и позволить любому зрителю открыть его.

в этом случае созданное приложение должно работать на нескольких ПК. Для ссылки на файл, который находится не в сети, а в самой папке Programm, используйте следующий фрагмент кода:

прежде всего включите следующую библиотеку:

затем использовать , picturebox или все чтобы создать ClickEvent и использовать следующий код фрагмент:

|палец вверх|

получение встроенного файла не должно быть проблемой вообще. Это не зависит от бытия.формат PDF, и вы можете просто искать отдельное решение.

для отображения, если вы не знаете, что Acrobat или аналогичный установлен (ну, даже Edge может открыть эти файлы в настоящее время), или если вы хотите отобразить файл, встроенный в приложение WinForms, есть

Codeproject Решение

написано в VB, опираясь на множество (частично коммерческих, если ваше решение является коммерческим) библиотек.

PdfiumViewer

отлично, а также доступен через NuGet.

Это все-в-одном решение для отображения и поставляется с более дружественной лицензией Apache 2.0.

edit, добавлен пример кода, для вашего удобства :) я включала следующее

это создает форму на лету, конечно, вы также можете использовать конструктор.

Ко мне в список попало 7 библиотек, о которых я скажу несколько слов, а для самой популярной (судя по ответам на stackoverflow), я напишу, как с помощью неё сделать простейший документ. Сразу скажу, что это iTextSharp и работа с ней будет описана в конце статьи.

Обзор библиотек

1. iTextSharp
Библиотека iText позволяет создавать и манипулировать PDF документами. Она позволяет разработчикам совершенствовать веб и прикладные приложения с помощью динамической генерации и/или манипуляции над PDF документами.

Возможности библиотеки:
Рисования: точки, линии, коробки, круги, кривые Безье, многоугольники, звезды, комплекс путей и форм.
Текст: поддержка юникода, кернинг текста при использовании Helvetica и Times-Roman семейств основных шрифтов, вставка гиперссылок, просто использовать табличный класс с гибкостью отчетных возможностей.
Поддерживает вставку следующих типов изображений: PNG, JPEG, BMP

Быстрый старт с помощью iTextSharp

Как я уже писал ранее, данная библиотека была выбрана не из-за того, что я протестировал все описанные и выбрал её, а по причине того, что на неё чаще всего ссылаются и советуют. Итак, переходим на сайт проекта, видим, что можно купить книжку, а также скачать файлы:
Желания что-то собирать самому, у меня нет, поэтому качаю не исходные коды, а сразу библиотеку itextsharp-5.0.5-dll.zip. С одной библиотекой быстрого старта не выйдет, поэтому качаем примеры iTextSharp.tutorial.01.zip. Открыв архив примеров, я понял, что старт будет гораздо быстрее, чем я думал, т.к. там есть целых 13 глав примеров. Сразу подумал, что на этом можно закончить, но всё же решил сделать небольшое приложение.

Распишу по шагам, что нужно для использования библиотеки:
— Я создаю WinForms приложение.
— Добавляю ссылку на itextsharp.dll.
— Устанавливаю кнопку на форму и добавляю следующий код в обработчик нажатия:

var doc = new Document();
PdfWriter.GetInstance(doc, new FileStream (Application.StartupPath + @"\Document.pdf" , FileMode .Create));
doc.Open();
iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(Application.StartupPath + @"/images.jpg" );
jpg.Alignment = Element.ALIGN_CENTER;
doc.Add(jpg);
PdfPTable table = new PdfPTable(3);
PdfPCell cell = new PdfPCell( new Phrase( "Simple table" ,
new iTextSharp.text. Font (iTextSharp.text. Font .FontFamily.TIMES_ROMAN, 16,
iTextSharp.text. Font .NORMAL, new BaseColor(Color.Orange))));
cell.BackgroundColor = new BaseColor(Color.Wheat);
cell.Padding = 5;
cell.Colspan = 3;
cell.HorizontalAlignment = Element.ALIGN_CENTER;
table.AddCell(cell);
table.AddCell( "Col 1 Row 1" );
table.AddCell( "Col 2 Row 1" );
table.AddCell( "Col 3 Row 1" );
table.AddCell( "Col 1 Row 2" );
table.AddCell( "Col 2 Row 2" );
table.AddCell( "Col 3 Row 2" );
jpg = iTextSharp.text.Image.GetInstance(Application.StartupPath + @"/left.jpg" );
cell = new PdfPCell(jpg);
cell.Padding = 5;
cell.HorizontalAlignment = PdfPCell.ALIGN_LEFT;
table.AddCell(cell);
cell = new PdfPCell( new Phrase( "Col 2 Row 3" ));
cell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE;
cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER;
table.AddCell(cell);
jpg = iTextSharp.text.Image.GetInstance(Application.StartupPath + @"/right.jpg" );
cell = new PdfPCell(jpg);
cell.Padding = 5;
cell.HorizontalAlignment = PdfPCell.ALIGN_RIGHT;
table.AddCell(cell);
doc.Add(table);
doc.Close();

* This source code was highlighted with Source Code Highlighter .

example

Результат работы данного кода:

Выводы

По каждой из приведенных библиотек в интернете можно найти уйму информации (начинать рекомендую с сайтов разработчиков), готовя данную подборку библиотек, я встречал разные мнения, хоть все библиотеки, казалось бы, предназначены для работы с pdf, но возможности у них разные, всё зависит от Ваших потребностей. Честно скажу, что все из них я не использовал, я лишь попробовал несколько из них и остановился на iTextSharp.

Пожелание: Если Вы указываете, что остановились на той или иной библиотеке, то не поленитесь указать, что явилось для Вас решающим при выборе.

Сводка

Дополнительные сведения

Документы ActiveX — это внедряемые объекты OLE, которые ведут себя иначе, чем элементы управления ActiveX, чем традиционные объекты OLE. В отличие от традиционного внедренного объекта, документ ActiveX не предназначен для вложенного объекта в более крупном документе. Вместо этого он считается полным документом, который просто просматривается (например, с помощью Microsoft Internet Explorer), или собираются в один ресурс с другими документами (например, с помощью файла подшивки Microsoft Office). Документ ActiveX, размещенный в элементе управления WebBrowser, всегда активен; Таким образом, в отличие от традиционных внедренных объектов OLE, нет смысла на активацию на месте.

  1. On the Project menu, click Add Reference.
  2. In the Add Reference dialog box, click Browse.
  3. Найдите и выберите файл Аксшдоквв. dll и файл SHDocVw. dll.
  4. Чтобы добавить ссылки на проекты для этих двух файлов, нажмите кнопку ОК.

Note (Примечание ) В Visual Studio 2005 вам не нужно выполнять шаг 2.

В форме Form1 дважды щелкните элемент Button1. При этом событие Button1_Click добавляется в форму Form1.

В окне кода для формы Form1 добавьте в список следующее пространство имен:

Определите частный член в классе Form1 следующим образом:

В конце метода InitializeComponent класса Form1 добавьте следующий код для обработки событий Form1_Load, Form1_Closed и axWebBrowser1_NavigateComplete2:

Замените приведенный ниже код.

Факторы, которые следует учитывать при использовании элемента управления WebBrowser

При использовании элемента управления WebBrowser следует учитывать следующее:

Элемент управления WebBrowser не поддерживает слияние меню.

В Internet Explorer версии 5,0 и более поздних можно отобразить закрепленные панели инструментов с помощью следующего кода:

Существует несколько известных проблем, связанных с наличием нескольких элементов управления WebBrowser в проекте, и при этом каждый элемент управления загрузился с помощью одного и того же типа документа Office (то есть все документы Word или все листы Excel). Корпорация Майкрософт рекомендует использовать только один элемент управления для каждого проекта и просматривать по одному документу за раз.

Чаще всего проблема связана с панелями команд Microsoft Office, которые отключены. Если в одной форме есть два элемента управления WebBrowser, которые загружаются с документами Word, и если панель инструментов отображается с помощью одного из описанных выше методов, то активен и работает только один набор панелей инструментов. Другой отключен и не может использоваться.

Чтобы очистить элемент управления WebBrowser по текущему содержимому, в диалоговом окне события Click другой кнопки (или в другом соответствующем месте кода) перейдите к пустой странице по умолчанию, используя следующий код:

Факторы, которые следует учитывать при использовании элемента управления WebBrowser совместно с программой Microsoft Office 2007

По умолчанию приложения Office 2007 не открывают документы Office в веб-браузере. Такое поведение также влияет на элемент управления WebBrowser. Рекомендуется использовать настраиваемый контейнер документов ActiveX вместо элемента управления WebBrowser при разработке приложений, которые открывают документы Office для 2007.

Для существующих приложений, для которых требуется обратная совместимость с элементом управления WebBrowser, можно изменить реестр для настройки Internet Explorer. С помощью этого метода можно настроить Internet Explorer для открытия документа Office 2007 в веб-браузере. Чтобы получить дополнительные сведения, щелкните следующий номер статьи базы знаний Майкрософт:

927009 новое окно, которое открывается при попытке просмотреть документ 2007 Office в Windows Internet Explorer 7

Изменение реестра с помощью метода, описанного в статье базы знаний Майкрософт 927009, влияет на элемент управления WebBrowser, который используется в приложении. Изменения также влияют на все экземпляры Internet Explorer. Кроме того, этот метод может не работать в будущих версиях наборов Microsoft Office. Поэтому мы рекомендуем использовать этот метод только для обеспечения совместимости с существующим приложением.

Ссылки

Для получения дополнительных сведений об использовании элемента управления WebBrowser щелкните следующий номер статьи базы знаний Майкрософт:

243058 как использовать элемент управления WebBrowser для открытия документа Office

927009 новое окно, которое открывается при попытке просмотреть документ 2007 Office в Windows Internet Explorer 7

Читайте также: