Подтвердить что ты не робот

Отображение файла PDF из Winform

Я просто создаю простой калькулятор в С# (форма окна)

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

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

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

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

4b9b3361

Ответ 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()