Предварительный просмотр PDF в C#

Я ищу компонент .NET GUI (отличается от PDFsharp), что предварительный просмотр PDF 1-страничный документ.
В основном мне нужно что-то похожее на PictureBox, где я могу загрузить растровые изображения и показать его.

было бы здорово, если бы этот компонент позволял масштабировать и перемещать изображение внутри.
Бесплатные решения предпочтительнее :)

5 ответов


другой вариант-использовать элемент управления WebBrowser в вашем GUI. Он будет использовать браузер для рендеринга PDF, но я бы сделал этот маршрут, а не возиться с компонентом Adobe Reader ActiveX.

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


вы можете использовать компонент activex, который поставляется с Acrobat Reader.

как визуализировать PDF-файлы с помощью C#


вопрос довольно старый, но предлагаемые решения имеют существенные недостатки:

  • управление WebBrowser полагается на IE и что он может отображать PDF-документы (это верно, только если установлен Adobe Reader)
  • GhostScript лицензируется под AGPL, и для использования в закрытых/коммерческих проектах требуется довольно дорогая лицензия.

к счастью, существует бесплатная альтернатива: инструменты poppler (на основе кодовой базы xpdf), которые лицензированы под GPL и может использоваться как консольная утилита. Из .NET кода он может быть выполнен с системой.Диагностика.Процесс.

для упрощения использования инструментов poppler мы разработали NReco.PdfRenderer .NET-оболочка, которая встраивает двоичные файлы poppler windows (они извлекаются при первом использовании) и предоставляет простой API для рендеринга PDF-страниц в изображение:

var pdfToImg = new NReco.PdfRenderer.PdfToImageConverter();
Image firstPageImg = pdfToImg.GenerateImage( "test.pdf", 1);

компонент не является бесплатным, но его цена очень разумна.


ImageGear для .NET

Не бесплатно. Возможно, имеет больший охват, чем то, о чем вы беспокоитесь. Надеюсь, это как-то поможет.


быстрая библиотека PDF, мои компании PDF SDK, поможет вам визуализировать PDF-файлы. Это не бесплатное ПО, но лицензия позволяет бесплатно распространять скомпилированные приложения, которые вы создаете с его помощью. Поиск бесплатных / открытых исходных компонентов для рендеринга PDF-файлов немного сложнее, чем другие основные задачи манипуляции PDF, потому что рендеринг PDF-файлов может быть довольно сложным.

вот пример исходного кода C#, который показывает, как отобразить PDF в окне изображения на форме.

private void Form1_Load(object sender, EventArgs e)
{
    QuickPDFAX0718.PDFLibrary pdf = new QuickPDFAX0718.PDFLibrary();

    qp.UnlockKey("......Licence Key......");

    // Open PDF File
    int Handle = qp.DAOpenFile("C:\sample.pdf", null);

    // Get Total Number of Pages in a PDF File
    int PageCount = qp.DAGetPageCount(Handle);

    int PageNo = 1;

    // It will get Reference of page 1 from PDF file
    int PageRefNo = qp.DAFindPage(Handle, PageNo);

    // You can change this parameter for Zoom In/Zoom Out purpose
    int Zoom = 76;
    double pageWidth = qp.DAGetPageWidth(Handle, PageRefNo) / Zoom;
    double pageHeight = qp.DAGetPageHeight(Handle, PageRefNo) / Zoom;

    // DPI use for rendering the page. Increase DPI will increate quality of image
    int dpi = 92;

    // Calculate Dimension of final output image
    Bitmap b = new Bitmap(Convert.ToInt32(pageWidth * dpi), Convert.ToInt32(pageHeight * dpi));

    // This will Draw render image on GDI
    using (Graphics g = Graphics.FromImage(b))
    {
    IntPtr dc = g.GetHdc();
    qp.DARenderPageToDC(Handle, PageRefNo, dpi, (int)dc);
    g.ReleaseHdc(dc);
    }

    // Assigne rendered image to PictureBox Control which will display PDF on Windows Form.
    pictureBox1.Image = b;
    pictureBox1.BorderStyle = BorderStyle.Fixed3D;
}

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