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

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

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

Библиотеки PDF, которые я нашел, по-видимому, сфокусированы на генерации. Как это сделать?

Спасибо.

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

Существует пакет С# nuget, называемый PdfiumViewer, который дает оболочку С# вокруг 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 будет доступен для добавления:

Добавление элемента управления PdfRenderer в WinForms

Ответ 3

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

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

Библиотека типов библиотек Adobe Acrobat версии 1.0

% programfiles &\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;

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

Ответ 4

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

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

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

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

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

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

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

Ответ 5

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

Ответ 6

Динамический PDF Viewer из программного обеспечения ceTe может делать то, что вы ищете. Я использовал их генераторское программное обеспечение и был очень доволен этим.

http://www.dynamicpdf.com/

Ответ 7

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

Ответ 8

Самый простой lib, который я использовал, - библиотека Paolo Gios. Это в основном

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

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

Ответ 11

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

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