Как сделать PDF-файлы с помощью C#
11 ответов
есть несколько других вариантов, если Adobe ActiveX не то, что вы ищете (так как Acrobat должен присутствовать на пользовательской машине, и вы не можете отправить его самостоятельно).
для создания предварительного просмотра PDF сначала посмотрите на некоторые другие обсуждения по этой теме на StackOverflow:
- как я могу сделать предварительный просмотр документов?
- получить предварительный просмотр jpeg pdf в windows?
- .NET открыть PDF в winform без внешних зависимостей
- предварительный просмотр и просмотр PDF
в последних двух я говорю о нескольких вещах, которые вы можете попробовать:
вы можете получить в коммерческом рендерер (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
будет доступен для добавления:
вот мой ответ из другого вопроса.
сначала вам нужно сослаться на элемент управления 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 может сделать то, что вы ищете. Я использовал их программное обеспечение генератора и был очень доволен этим.
используйте веб-браузер. Это требует установки 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
вы можете google для компонент просмотра PDF, и придумать больше, чем несколько хитов.
Если вам действительно не нужно вставлять их в свое приложение, вы можете просто потребовать Acrobat Reader или FoxIt (или связать его, если он соответствует их соответствующим условиям лицензирования) и shell out к нему. Это не так круто, но это делает работу бесплатно.