Как сделать PDF файлы с помощью С#
Я хочу загружать и рисовать pdf файлы графически с помощью С#. Мне не нужно редактировать их или что-то еще, просто визуализируйте их при заданном уровне масштабирования.
Библиотеки PDF, которые я нашел, по-видимому, сфокусированы на генерации. Как это сделать?
Спасибо.
Ответы
Ответ 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
Это - отличный учебник, чтобы вы начали.
Ответ 9
Отказ от ответственности: я работаю для Atalasoft
У нас есть PDF Rasterizer, который может сделать это для .NET.
http://www.atalasoft.com/products/dotimage/pdfrasterizer/
Ответ 10
Это выглядит правильно: http://code.google.com/p/lib-pdf/
Ответ 11
Вы можете google для компонент просмотра PDF и придумать более нескольких хитов.
Если вам действительно не нужно внедрять их в свое приложение, вы можете просто потребовать Acrobat Reader или FoxIt (или связать его, если он соответствует их соответствующим условиям лицензирования) и shell out. Это не так круто, но это бесплатно делает работу.