пятница, 29 мая 2015 г.

Средства для работы с PDF в ASP.NET



В этом году мне довелось поработать на 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 обладают также не менее эффективными решениями для работы и с другими распространенными офисными форматами документов.
Каплей дегтя здесь является только то, что за возможность использования этих незаменимых инстурментов придется заплатить, и весьма не мало. Но я думаю, что данная инфестиция оправдана, особенно для проектов, которые предполагнают активную работу с документами и отчетами.