Как визуализировать PDF с использованием C # - PullRequest
46 голосов
/ 06 февраля 2009

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

PDF-библиотеки, которые я нашел, похоже, сосредоточены на генерации. Как мне это сделать?

Спасибо.

Ответы [ 11 ]

50 голосов
/ 19 января 2015

Google открыл свой превосходный движок рендеринга PDF - PDFium - который он написал с помощью Foxit Software.

Существует пакет Cget nuget PdfiumViewer , который создает оболочку C # для PDFium и позволяет отображать и печатать PDF-файлы.

Я использовал его и был очень впечатлен качеством рендеринга.


PDFium работает напрямую с потоками, поэтому не требует записи данных на диск.

Это мой пример из приложения WinForms

    public void LoadPdf(byte[] pdfBytes)
    {
        var stream = new MemoryStream(pdfBytes);
        LoadPdf(stream)
    }

    public void LoadPdf(Stream stream)
    {
        // Create PDF Document
        var pdfDocument = PdfDocument.Load(stream);

        // Load PDF Document into WinForms Control
        pdfRenderer.Load(pdfDocument);
    }

Редактировать: Чтобы получить элемент управления pdfRenderer в WinForm: добавьте пакет PdfiumViewer NuGet в проект; откройте папку пакетов проектов в проводнике Windows и перетащите файл PdfiumViewer.dll в окно Toolbox; Элемент управления с именем PdfRenderer будет доступен для добавления:

Adding PdfRenderer control to WinForms

43 голосов
/ 17 февраля 2009

Существует несколько других вариантов на случай, если Adobe ActiveX - это не то, что вам нужно (поскольку Acrobat должен присутствовать на компьютере пользователя, и вы не можете отправить его самостоятельно).

Для создания предварительного просмотра PDF, сначала взгляните на некоторые другие обсуждения по теме StackOverflow:

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

  • Вы можете получить коммерческий рендер ( PDFViewForNet , PDFRasterizer.NET , ABCPDF , ActivePDF , XpdfRasterizer и другие в других ответах ...).
    Большинство из них довольно дорогие, особенно, если все, что вам нужно, это сделать предварительный просмотр / миниатюры.

  • В дополнение к фрагменту кода Омара Шейна, есть статья CodeProject , которая показывает, как использовать Adobe ActiveX, но она может быть устаревшей, легко нарушаемой новыми выпусками и ее легальностью мутный (в основном это нормально для внутреннего использования, но вы не можете отправить его и вы не можете использовать его на сервере для создания изображений PDF).

  • Вы можете взглянуть на исходный код SumatraPDF , программы просмотра PDF с открытым исходным кодом для Windows.

  • Существует также Poppler , движок рендеринга, который использует Xpdf в качестве движка рендеринга. Все это замечательно, но им потребуется немало усилий, чтобы заставить их работать и взаимодействовать с .Net, и они, как правило, распространяются по лицензии GPL.

  • Возможно, вы захотите использовать GhostScript в качестве интерпретатора, поскольку рендеринг страниц - довольно простой процесс.
    Недостатком является то, что вам нужно будет либо повторно упаковать его, чтобы установить его вместе с приложением, либо сделать его обязательным условием (или, по крайней мере, частью процесса установки).
    Это не большая проблема, и это, безусловно, проще, чем заставить другие движки рендеринга взаимодействовать с .Net.
    Я сделал небольшой проект, который вы найдете на Developer Express форумах в виде вложения.
    Будьте осторожны с лицензионными требованиями для GhostScript до.
    Если вы не можете уйти с этим, то коммерческое программное обеспечение, вероятно, ваш единственный выбор.

12 голосов
/ 17 февраля 2009

Вот мой ответ на другой вопрос.

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

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

% программных файлов & \ Common Files \ Adobe \ Acrobat \ ActiveX \ AcroPDF.dll

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

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

private void InitializeAdobe(string filePath)
{
    try
    {
        this.axAcroPDF1.LoadFile(filePath);
        this.axAcroPDF1.src = filePath;
        this.axAcroPDF1.setShowToolbar(false);
        this.axAcroPDF1.setView("FitH");
        this.axAcroPDF1.setLayoutMode("SinglePage");
        this.axAcroPDF1.Show();
    }
    catch (Exception ex)
    {
        throw;
    }
}

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

this.axAcroPDF1.Dispose();
this.axAcroPDF1 = null;

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

3 голосов
/ 10 апреля 2017

PdfiumViewer великолепен, но относительно тесно связан с System.Drawing и WinForms. По этой причине я создал свою собственную оболочку для PDFium: PDFiumSharp

Страницы могут быть отображены на PDFiumBitmap , который, в свою очередь, может быть сохранен на диск или открыт в виде потока . Таким образом, любой фреймворк, способный загружать изображение в формате BMP из потока, может использовать эту библиотеку для отображения страниц PDF.

Например, в приложении WPF вы можете использовать следующий метод для рендеринга страницы PDF:

using System.Linq;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using PDFiumSharp;

static class PdfRenderer
{
    public static ImageSource RenderPage(string filename, int pageIndex, string password = null, bool withTransparency = true)
    {
        using (var doc = new PdfDocument(filename, password))
        {
            var page = doc.Pages[pageIndex];
            using (var bitmap = new PDFiumBitmap((int)page.Width, (int)page.Height, withTransparency))
            {
                page.Render(bitmap);
                return new BmpBitmapDecoder(bitmap.AsBmpStream(), BitmapCreateOptions.None, BitmapCacheOption.OnLoad).Frames.First();
            }
        }
    }
}
3 голосов
/ 24 марта 2009

ABCpdf сделает это и многое другое для вас.

Не только он будет отображать ваш PDF в различных форматах (например, JPEG, GIF, PNG, TIFF, JPEG 2000; векторные EPS, SVG, Flash и PostScript), но он также может делать это в различных цветовых пространствах например, серый, RGB, CMYK) и битовая глубина (например, 1, 8, 16 бит на компонент).

И это только часть того, что он будет делать!

Подробнее см .:

http://www.websupergoo.com/abcpdf-8.htm

Да, и вы можете получить бесплатные лицензии по схеме бесплатной лицензии.

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

0 голосов
/ 05 февраля 2013

Это похоже на правильную вещь: http://code.google.com/p/lib-pdf/

0 голосов
/ 09 октября 2009

Отказ от ответственности: я работаю на Atalasoft

У нас есть PDF Rasterizer, который может сделать это для .NET

http://www.atalasoft.com/products/dotimage/pdfrasterizer/

0 голосов
/ 06 февраля 2009

Самая простая библиотека, которую я использовал, это Библиотека Паоло Гиоса . Это в основном

Create GiosPDFDocument object
Create TextArea object
Add text, images, etc to TextArea object
Add TextArea object to PDFDocument object
Write to stream

Этот отличный учебник, с которого можно начать.

0 голосов
/ 06 февраля 2009

Вы можете поискать в Google компонент для просмотра PDF и получить несколько совпадений.

Если вам действительно не нужно встраивать их в ваше приложение, вы можете просто потребовать Acrobat Reader или FoxIt (или связать их, если они соответствуют их условиям лицензирования) и выложить для Это. Это не так круто, но это делает работу бесплатно.

0 голосов
/ 06 февраля 2009

Используйте элемент управления веб-браузера. Для этого нужно установить Adobe Reader, но, скорее всего, он у вас есть. Установите URL-адрес элемента управления в расположение файла.

...