Как сделать PDF-файлы с помощью C#

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

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

спасибо.

11 ответов


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

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

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

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

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

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

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

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


Google имеет открытый источник его отличный механизм рендеринга PDF -PDFium - что он написал С помощью программного обеспечения Foxit.

существует пакет nuget C# под названием 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);
    }

Edit: чтобы получить pdfRenderer управление в WinForm: добавьте PdfiumViewer пакет NuGet в проект; откройте папку пакеты проектов в Проводнике Windows и перетащите на Toolbox окно; элемент управления под названием PdfRenderer будет доступен для добавления:

Adding PdfRenderer control to WinForms


вот мой ответ из другого вопроса.

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

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

%programfiles&\Общие файлы\Адоб\программы Acrobat\ActiveX с\AcroPDF.dll файлы

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

и используйте такой код для инициализации 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;

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


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

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

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

для более подробной информации см.:

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

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

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


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();
            }
        }
    }
}

Dynamic PDF Viewer от cete software может сделать то, что вы ищете. Я использовал их программное обеспечение генератора и был очень доволен этим.

http://www.dynamicpdf.com/


используйте веб-браузер. Это требует установки Adobe reader, но, скорее всего, у вас все равно есть. Задайте UrL-адрес элемента управления для расположения файла.


самый простой lib, который я использовал, это Паоло Джиос библиотека. Это в основном

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

этой - Это отличный учебник, чтобы вы начали.


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

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

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


Это выглядит как правильная вещь:http://code.google.com/p/lib-pdf/


вы можете google для компонент просмотра PDF, и придумать больше, чем несколько хитов.

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