Отображение файла PDF из Winform
Я просто создаю простой калькулятор в С# (форма окна)
Я создал "User Help", который является pdf файлом, и я хочу отобразить этот pdf файл, если пользователь нажимает кнопку "Справка" в WinForm. Если предположить, что Adobe Reader предварительно установлен на пользовательском компьютере....
Как открыть файл pdf при нажатии кнопки в winForm?
Я не планирую предоставить этот pdf файл на жестком диске пользователя. Это означает, что мне нужно встроить этот pdf файл в калькулятор (winForm) и отобразить его при нажатии кнопки.
Прошу вас посоветоваться с лучшей практикой для отображения встроенного файла в winForm.
Ответы
Ответ 1
Я бы включил его в свою папку с программой, добавлю ссылку в свою папку "Пуск", чтобы разрешить прямой доступ (без запуска моего инструмента) и просто на некоторое событие click System.Diagnostics.Process.Start(@".\Manual.pdf");
Update
Хорошо, теперь мы переходим к совершенно новому вопросу: как вставить файл в мое приложение и запустить его?
Для этого вопроса вы найдете здесь несколько ответов, но вот короткая версия:
- Щелкните правой кнопкой мыши свой проект и выберите "Добавить" - существующий элемент
- Выберите свой файл (не дважды щелкните его).
- Нажмите маленькую стрелку рядом с кнопкой Добавить и выберите Добавить как ссылку
- Дважды щелкните по Properties - Resources.resx
- Нажмите маленькую стрелку рядом с надписью "Добавить ресурс" и выберите "Добавить существующий файл"
- В открывшемся диалоговом окне снова выберите тот же файл
- Теперь вы можете получить доступ к файлу в своем коде как
byte[]
из Properties.Resources.NameOfResource
С помощью этих шагов вы ссылаетесь на свой файл, где бы он ни находился в вашей структуре. Если вам нравится, копия вашего pdf файла будет помещена в подпапку Resources в вашем проекте, просто пропустите точки один и два в приведенном выше списке.
Чтобы открыть pdf файл, вам придется записать байт [] на диск (возможно, с Path.GetTempFileName()
) и запустить его с помощью Adobe Reader. (Не забудьте удалить файл после использования)
Ответ 2
Вы можете ссылаться на элемент управления Adobe Reader ActiveX и связывать его с вашим приложением.
Просто добавьте AcroPDF.PDF.1
в панель инструментов на вкладке COM Components (панель инструментов правой кнопки мыши и нажмите Choose Items...
), а затем перетащите экземпляр на свою Winform, чтобы дизайнер создал код для вас. Кроме того, после добавления нужной ссылки вы можете использовать следующий код:
AxAcroPDFLib.AxAcroPDF pdf = new AxAcroPDFLib.AxAcroPDF();
pdf.Dock = System.Windows.Forms.DockStyle.Fill;
pdf.Enabled = true;
pdf.Location = new System.Drawing.Point(0, 0);
pdf.Name = "pdfReader";
pdf.OcxState = ((System.Windows.Forms.AxHost.State)(new System.ComponentModel.ComponentResourceManager(typeof(ViewerWindow)).GetObject("pdfReader.OcxState")));
pdf.TabIndex = 1;
// Add pdf viewer to current form
this.Controls.Add(pdf);
pdf.LoadFile(@"C:\MyPDF.pdf");
pdf.setView("Fit");
pdf.Visible = true;
Ответ 3
Вы можете использовать элемент управления WebBrowser и позволить IE загружать PDF-ридер для вас, если он установлен на компьютере.
Однако в последний раз, когда я это пробовал, мне сначала пришлось записать файл PDF на диск, поэтому я мог бы указать на него элемент управления WebBrowser.
Ответ 4
Если у вашего пользователя есть Adobe Reader (или любой другой PDF-ридер), установленный на их машине, вы можете использовать:
System.Diagnostics.Process.Start(
"My-PDF-file.pdf");
Надеюсь, что это поможет.
Примечание. Очевидно, что это не сработает, если у пользователя нет приложений PDF Reader.
Ответ 5
В коде google есть проект С# pdf viewer. http://code.google.com/p/pdfviewer-win32/
есть зритель, и есть библиотека, которую он использует, которая использует mupdf и xpdf для рендеринга pdf-документов в вашей программе winforms. В настоящее время я разрабатываю библиотеку пользовательского управления для людей, которые могут использовать и переходить в свои программы для просмотра PDF файлов. он работает очень хорошо.
Ответ 6
Если вы хотите отобразить pdf файл в своем приложении, элемент управления WebBrowser, вероятно, предпочтительнее, чем элемент управления Adobe Reader, поскольку он будет очень легко открывать файл в PDF-Reader или независимо от того, что IE использует по умолчанию для открытия PDF файлов. Вы просто добавляете элемент управления WebBrowser в существующую или новую форму и переходите к файлу pdf.
Никогда не предполагайте, что у пользователя есть Adobe или любые другие элементы управления или библиотеки третьих сторон, установленные на их компьютерах, всегда упаковывайте их в свой исполняемый файл или у вас могут быть проблемы.
Управление Adobe Reader, очевидно, также не интегрируется с .NET как внутренним компонентом Windows. Как правило, я всегда предпочитаю использовать встроенные средства .Net для сторонних поставщиков. Что касается вложения файла в фактический исполняемый файл; не произойдет, пока Microsoft не решит, что какой-либо старый PDF файл может быть обработан в CLS и скомпилирован в MSIL. То, что у вас есть при разработке любого приложения в .NET, - это код, который может быть скомпилирован в промежуточную MSIL для перевода в среде выполнения CLR в собственный код и выполнен в ОС.
WebBrowser1.Navigate("SomePDF.pdf");
Ответ 7
Я бы предложил преобразовать ваш pdf файл в файл справки Microsoft, чтобы вам не нужно было устанавливать Adobe Reader (это ошибка и слишком много проблем с безопасностью). Вы не можете ожидать от пользователей этого.
В ответ на комментарий стартера:
Да, вам нужно будет создать файл справки как документ HTML вместо pdf. Нет простого способа конвертировать PDF в HTML.
Ответ 8
Возможно, вы сможете встроить Adobe Reader в свою форму в качестве компонента ActiveX. Но это означает, что вам нужно будет убедиться, что Reader установлен на клиентской машине для работы.
В случае, если он не должен быть строго встроен, вы можете просто запустить PDF файл и позволить любому зрителю открыть его.
Ответ 9
Как открыть файл PDF с относительным путем
В этом случае созданное приложение должно запускаться на нескольких ПК. Чтобы ссылаться на файл, который отсутствует в сети, но в самой папке Programm, используйте следующий фрагмент кода:
Прежде всего, включите следующую библиотеку:
using System.IO;
Затем используйте Кнопка, picturebox или для создания ClickEvent и используйте следующий фрагмент кода:
private void pictureBox2_Click(object sender, EventArgs e)
{
//get current folderpath of the .exe
string ProgramPath = AppDomain.CurrentDomain.BaseDirectory;
//jump back relative to the .exe-Path to the Resources Path
string FileName = string.Format("{0}Resources\\Master_Thesis_Expose.pdf", Path.GetFullPath(Path.Combine(ProgramPath, @"..\..\")));
//Open PDF
System.Diagnostics.Process.Start(@"" + FileName + "");
}
| Thumb up |
Ответ 10
Получение встроенного файла не должно быть проблемой. Это не зависит от того, является ли он форматом .pdf, и вы можете просто искать там отдельное решение.
Для отображения, если вы не знаете, Acrobat или аналогичный установлен (ну, даже Edge может открыть эти файлы в настоящее время), или если вы хотите отобразить файл, встроенный в приложение WinForms, есть
https://www.codeproject.com/Articles/37458/PDF-Viewer-Control-Without-Acrobat-Reader-Installe
написан на VB, полагаясь на множество (частично коммерческих, если ваше решение является коммерческим) библиотек.
PdfiumViewer
https://github.com/pvginkel/PdfiumViewer
отлично, а также доступен через NuGet.
The PdfiumViewer library primarily consists out of three components:
•The PdfViewer control. This control provides a host for the PdfRenderer control and has a default toolbar with limited functionality;
•The PdfRenderer control. This control implements the raw PDF renderer. This control displays a PDF document, provides zooming and scrolling functionality and exposes methods to perform more advanced actions;
•The PdfDocument class provides access to the PDF document and wraps the Pdfium library.
Это многофункциональное решение для отображения и поставляется с более дружественной лицензией Apache 2.0.
Ответ 11
AxAcroPDF1.LoadFile("C:ShippingForm.pdf")
AxAcroPDF1.src = "C:ShippingForm.pdf"
AxAcroPDF1.setShowToolbar(False)
AxAcroPDF1.setView("fitH")
AxAcroPDF1.setLayoutMode("SinglePage")
AxAcroPDF1.setShowScrollbars(False)
AxAcroPDF1.Show()