Как визуализировать PDF с использованием C#
Я хочу загрузить и нарисовать PDF-файлы графически с помощью C#. Мне не нужно редактировать их или что-то еще, просто визуализировать их с заданным уровнем масштабирования.
Библиотеки pdf, которые я нашел, похоже, ориентированы на генерацию. Как мне это сделать?
Благодарю.
14 ответов
Есть несколько других вариантов на случай, если Adobe ActiveX - это не то, что вам нужно (поскольку Acrobat должен присутствовать на компьютере пользователя, а вы не можете его отгрузить самостоятельно).
Для создания предварительного просмотра PDF, сначала взгляните на некоторые другие обсуждения по теме Stackru:
- Как я могу сделать предварительный просмотр документов?
- Получить предварительный просмотр в формате PDF на Windows?
- .NET открыть PDF в winform без внешних зависимостей
- Предварительный просмотр и просмотр PDF
В последних двух я говорю о нескольких вещах, которые вы можете попробовать:
Вы можете получить коммерческий рендеринг ( PDFViewForNet, PDFRasterizer.NET, ABCPDF, ActivePDF, XpdfRasterizer и другие в других ответах...).
Большинство из них довольно дорогие, особенно, если все, что вам нужно, это сделать предварительный просмотр / миниатюры.В дополнение к фрагменту кода Омара Шейна, есть статья CodeProject, которая показывает, как использовать Adobe ActiveX, но она может быть устаревшей, легко ломаться новыми выпусками, и ее легальность неясна (в основном это хорошо для внутреннего использования, но вы можете не отправлять, и вы не можете использовать его на сервере для создания изображений PDF).
Вы можете взглянуть на исходный код SumatraPDF, программы просмотра PDF с открытым исходным кодом для Windows.
Существует также Poppler, движок рендеринга, который использует Xpdf в качестве движка рендеринга. Все это замечательно, но им потребуется немало усилий, чтобы заставить их работать и взаимодействовать с.Net, и они, как правило, распространяются по лицензии GPL.
Возможно, вы захотите использовать GhostScript в качестве интерпретатора, потому что рендеринг страниц - довольно простой процесс.
Недостатком является то, что вам нужно будет либо повторно упаковать его, чтобы установить его вместе с приложением, либо сделать его обязательным условием (или, по крайней мере, частью процесса установки).
Это не большая проблема, и это, безусловно, проще, чем втиснуть другие движки рендеринга в сотрудничество с.Net.
Я сделал небольшой проект, который вы найдете на форумах Developer Express в виде приложения.
Будьте осторожны с лицензионными требованиями для GhostScript через.
Если вы не можете уйти с этим, то коммерческое программное обеспечение, вероятно, ваш единственный выбор.
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
будет доступно добавить:
Вот мой ответ на другой вопрос.
Для начала вам нужно обратиться к элементу управления 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;
в противном случае Акробат может остаться без дела.
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();
}
}
}
}
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. Если вы хотите пойти по этому пути, сначала тщательно проверьте законность.
Вы можете добавить пакет NuGet CefSharp.WinForms в свое приложение, а затем добавить в форму элемент управления ChromiumWebBroweser. В коде можно написать:
chromiumWebBrowser1.Load(filePath);
Это самое простое решение, которое я нашел, оно полностью бесплатное и не зависит от настроек компьютера пользователя, как при использовании элемента управления WebBrowser по умолчанию.
Вы также можете просто вернуть byte[] PDF-файла в виде файла. Вот пример возврата обработанного PDF-файла в веб-приложении C# из локального PDF-файла. В идеале PDF-файл должен храниться в базе данных как byte[].
public async Task<ActionResult> ViewDocument(GetPdf pdfdata)
{
MemoryStream ms = new MemoryStream();
FileStream stream = new FileStream("Graph.pdf", FileMode.Open, FileAccess.Read);
stream.CopyTo(ms);
return File(ms.ToArray(), "application/pdf");
}
Используйте контроль веб-браузера. Для этого нужно установить Adobe Reader, но, скорее всего, он у вас есть. Установите URL-адрес элемента управления в расположение файла.
Отказ от ответственности: я работаю на Atalasoft
У нас есть PDF Rasterizer, который может сделать это для.NET
Я хотел бы упомянуть здесь библиотеку Docotic.Pdf. Он может конвертировать PDF в изображение на C # и VB.NET . И он также может отображать и печатать PDF-документы .
Библиотека на 100% управляется без внешних зависимостей. Это не зависит от System.Drawing.dll или GDI+. Вы получите согласованный результат в Windows, Linux, macOS, iOS и Android.
Я один из разработчиков Docotic.Pdf, поэтому он мне очень нравится. Пожалуйста, попробуйте, и, вероятно, вам тоже понравится.
Самая простая библиотека, которую я использовал, - это библиотека Паоло Гиоса. Это в основном
Create GiosPDFDocument object
Create TextArea object
Add text, images, etc to TextArea object
Add TextArea object to PDFDocument object
Write to stream
Это отличный учебник, с которого можно начать.
Вы можете найти компонент для просмотра PDF в Google и получить более чем несколько просмотров.
Если вам действительно не нужно встраивать их в ваше приложение, вы можете просто потребовать Acrobat Reader или FoxIt (или связать их, если они соответствуют их условиям лицензирования) и выложить на него. Это не так круто, но это делает работу бесплатно.
Dynamic PDF Viewer от программного обеспечения ceTe может сделать то, что вы ищете. Я использовал их генератор программного обеспечения и был очень доволен этим.