使用iTextSharp将剃刀WebGrid导出到PDF

本文介绍了如何为您的用户提供使用流行的免费PDF库,ItextSharp将剃须刀网页WebGrid的内容导出到PDF文件的能力。

首先,您需要掌握itextSharp库。您可以通过内置Nuget功能在WebMatrix中执行此操作。单击主菜单和类型的Nuget按钮"iTextSharp"进入searhc盒子。有几种版本的ItextSharp可用 - 最近的是第5版,它在GNU聘用的GNU Affero普通许可证下发布。这不像上一个版本发布的许可证(LGPL / MPL)那样允许。不仅如此,而且4到5之间的功能的差异是如此之小,我选择使用版本4.1.6,这也是我基于我的版本 流行系列ITextSharp文章 on.

一旦确定要使用的版本,请单击“安装”按钮并同意许可证Condiitons。 DLL文件将安装在您的bin文件夹中。

现在你需要一个网格:

@{
    Page.Title = "Export To PDF";
    var db = Database.Open("Northwind");
    var query = "SELECT CustomerID, CompanyName, ContactName, Address, City, Country, Phone FROM Customers";
    var data = db.Query(query);
    var grid = new WebGrid.(data, ajaxUpdateContainerId: "grid");
}
<h1>Export to PDF</h1>
<div id="gridContainer">
    <div id="grid">
        @grid.GetHtml(    
            tableStyle : "table",
            alternatingRowStyle : "alternate",
            headerStyle : "header",
            columns: grid.Columns(
                grid.Column("CustomerID", "ID"),
                grid.Column("CompanyName", "Company Name"),
                grid.Column("ContactName", "Contact Name"),
                grid.Column("Address"),
                grid.Column("City"),
                grid.Column("Country"),
                grid.Column("Phone")
            )
        )
        <img SRC.="/images/pdf-icon.png" id="pdf" alt="Export to PDF" title="Export to PDF" />
    </div>
</div>

当用户点击图像时,它应该导致数据被下载为PDF文件。此刻,它只是一个图像,它看起来在网格下方。这是一点jQuery,将图像移动到网格的页脚区域并在用户筛选它时更改光标:

<script type="text/javascript">
    $(function () {
        $('#pdf').appendTo($('tfoot tr td')).on('hover', function () {
            $(this).css('cursor', 'pointer');
        });
        $('#pdf').on('click', function () {
            $('<iframe src="/GeneratePdf"></iframe>').appendTo('body').hide();
        });
    });
</script>

jQuery代码还将处理程序添加到图像的Click事件中。它创建了一个iframe,它会增加身体元素,然后它使它成为 展示 财产相等 '没有任何' 使用jquery. 隐藏 命令。这 SRC. 对于iframe是一个名为generatepdf.chtml的文件,它负责创建PDF文件。隐藏的IFRAME技术是通过AJAX管理下载的清洁方式,而无需离开当前页面。添加iframe,有效地类似地"sucks"http响应来自 SRC. URL到当前页面。

这是generatepdf.chtml的代码:

@using itextsharp..text;
@using itextsharp..text.pdf;
@{
    Layout = null;
    Response.AddHeader("Content-disposition", "attachment; filename=report.pdf");
    Response.ContentType = "应用/八元门流";
    var db = Database.Open("Northwind");
    var sql = "SELECT CustomerID, CompanyName, ContactName, Address, City, Country, Phone FROM Customers";
    var data = db.Query(sql);
    var columns = data.First().Columns;

    var doc = new Document();
    PdfWriter.GetInstance(doc, Response.OutputStream);
    doc.SetPageSize(PageSize.A4.Rotate());
    var arial = FontFactory.GetFont("Arial", 8, Color.BLACK);
    var arialBold = FontFactory.GetFont("Arial", 10, Font.BOLD, Color.BLACK);
    doc.Open();
    var table = new PdfPTable(columns.Count) {
        TotalWidth = 700f, 
        LockedWidth = true
    };

    foreach(var column in columns){
        table.AddCell(new Phrase(column, arialBold));
    }
    foreach(var row in data){
        foreach(var column in columns){
            table.AddCell(new Phrase(row[column] != null ? row[column].ToString() : string.Empty, arial));
        }
    }
    doc.Add(table);
    doc.Close();
}

与任何旨在提供非HTML响应的文件一样,布局设置为NULL,以防止输出中包含杂散HTML。这 内容性格 值设置为 附件,而且 内容类型 设定为 应用/八元门流。这种组合结果在浏览器中为用户提供了选择 - 保存或打开,而不是尝试显示响应。对数据库执行相同的查询,列名从查询结果中的第一个记录中提取。然后创建了一个pdf文件,而且 pdfwrite.getInstance. 方法用于确保将所得文档写入响应。该文档旋转到横向,为造型创建了几个字体 - 一个8pt Arial Black,另一个是10pt和粗体。创建一个表,并使用粗体字体添加列名,然后添加数据。

本文显示使用数据库帮助器生成要在报告中显示的数据以及如何使用ItextSharp生成PDF文件的容易。如果您想了解更多关于使用ItextSharp的信息,您可以 阅读这些文章.

伴随本文的示例网站的源代码可用作 github repo..