В этом году мне довелось поработать
на Asp.NET проекте, в котором
активно и всесторонне используется работа с PDF – начиная с генерации отчетов в
формате PDF и
конвертацией других документов в PDF, и заканчивая пользовательским редактированим PDF документов
на странице веб-приложения. О средствах работы с PDF, которые я использовал на пректе и
пойдет речь ниже. Несмотря на то что все они – платные, я думаю каждая из библиотек
заслуживает внимания, так как
предоставляет весьма обширные и полезные возможности.
Итак, давайте приступим.
Active Reports for .NET
Сайт разработчика: https://activereports.grapecity.com/
Продукт предоставляет возможность
создавать и генерировать отчеты используя для этого графический редактор в Visual Studio. Созданный отчет можно
экспортировать один доступных форматов, включая PDF.
Процес
создания отчета напоминает создание формы в WinForms. Класс отчета представляет собой типизированный
наследник DataDynamics.ActiveReports.ActiveReport. После того как разметка
создана, в code behind можно указать источник данных для отчета и после этого сгенерировать
отчет. После генерации отчет можно отобразить используя встроенные средства,
или же экспортировать отчет в один из возможных форматов, одним из которых
является PDF.
Вот
простейший пример как это можно сделать:
ContractFormReport report = new ContractFormReport();
report.DataSource
= data;
report.Run();
var pdf
= new DataDynamics.ActiveReports.Export.Pdf.PdfExport();
pdf.Export(report.Document, filename);
В результате получим PDF файл,
с требуемыми данными и необходимой разметкой.
Syncfusion PDF
Сайт разработчика: https://www.syncfusion.com/products/file-formats/pdf
Данное средство позволяет
выполнять различные операции с существующими документами– конвертация документов
Microsoft Word и Microsoft Excel в
PDF, склеивание
нескольких доументов в один, генерация
содержимого PDF с помощью предоставляемого API из кода и
многое другое.
На самом деле библиотека
предосталвяет практически все что нужно для создания PDF документа
и/или изменения его содержимого из кода.
Вот к примеру как можно
осуществить конвертацию файла Excel в PDF:
private
static PdfLoadedDocument
ConvertExcelFileToPDF(byte[] data)
{
try
{
Stream
stream = new MemoryStream(data);
ExcelToPdfConverter
converter = new ExcelToPdfConverter(stream);
PdfDocument
pdfDoc = new PdfDocument();
ExcelToPdfConverterSettings
settings = new ExcelToPdfConverterSettings();
settings.LayoutOptions = LayoutOptions.Automatic;
settings.TemplateDocument =
pdfDoc;
settings.DisplayGridLines = GridLinesDisplayStyle.Invisible;
pdfDoc =
converter.Convert(settings);
pdfDoc.Form.Flatten = true;
MemoryStream
pdfGenerated = new MemoryStream();
pdfDoc.Save(pdfGenerated);
pdfDoc.Close(true);
return
new PdfLoadedDocument(pdfGenerated);
}
catch
(Exception ex)
{
// handle exception
}
return null;
}
А вот так можно склеить несколько
PDF файлов
в один:
var
list = new List<PdfLoadedDocument>();
//obtain
list of PDFs here somehow
fd = new PdfDocument();
PdfDocument.Merge(fd, list.ToArray());
fd.Save(filename):
Как можно увидеть из примеров
выше, все достаточно прозрачно. Пользовать Syncfusion API просто и
удобно – так буквально с помощью нескольких строчек можно решить достаточно нетривиальную
задачу.
RadPDF
Сайт разработчика: http://www.radpdf.com/
Данное средство предоставляет
возможность разместить на веб-странице элемент управления который позволит
редактировать документ PDF. С помощью RadPDF можно добавлять текст,
изображения, различные геометрические фигуры, изменять формат страниц,
добавлять заметки и аннотации в документ PDF. Все эти изменения по факту хранятся в специальный таблицах в
базе данных, и впоследствии из можно изменить. Разумеется можно получить
обновленный PDF файл со всеми изменениями – файл средствами RadPDF сохранятеся
в базе данных, откуда его можно впоследствии пересохранить в отдельный файл.
Инструмент достаточно интересен в
первую очередь тем, что предоставляет уникальную возможность визуального редактирования
документа.
Ниже представлен скриншот и простейший
код использования.
Разметка для добавления элемента управления на страницу:
<%@
Register Assembly="RadPdf" Namespace="RadPdf.Web.UI"
TagPrefix="radPdf" %>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml" >
<head
runat="server">
<title>RAD PDF Sample</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<radPdf:PdfWebControl id="PdfWebControl1"
runat="server" height="600px" width="100%" />
</div>
</form>
</body>
</html>
Код загрузки PDF документа:
using
System;
partial
class _Default
: System.Web.UI.Page
{
protected void Page_Load(object
sender, EventArgs e)
{
if (!IsPostBack)
{
//Get PDF
as byte array from file
byte[]
pdfData = System.IO.File.ReadAllBytes(@"C:\demo.pdf");
//Load
PDF byte array into RAD PDF
this.PdfWebControl1.CreateDocument("Document Name", pdfData);
}
}
}
Заключение
В общем и целом, рассмотренные
инструменты весьма эффективны и чрезвычайно полезны, причем каждый по своему.
Они предоставляют профессиональную поддержку на всех этапах работы с PDF –
начиная от создания документа и заканчивая его редактированием и финальным
рецензированием. Active Reports и Syncfusion PDF в дополнению к своим возможностям по работе с PDF обладают
также не менее эффективными решениями для работы и с другими распространенными
офисными форматами документов.
Каплей дегтя здесь является
только то, что за возможность использования этих незаменимых инстурментов
придется заплатить, и весьма не мало. Но я думаю, что данная инфестиция
оправдана, особенно для проектов, которые предполагнают активную работу с
документами и отчетами.