'' 完毕:
Imports System.IO
Imports System.Drawing
Imports System.Collections.Generic
Imports System.Data
Imports System.Linq
Imports System.Reflection
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Html
'' 此示例展示了如何呈现报告(产品列表)
'' 来自标准 NWind 示例数据库)使用 {{mustache}}
'' HTML 模板。
''
'' 数据查询和 HTML 格式与使用的类似
'' 在ProductList 示例中。但与该示例不同的是,这里
'' 我们使用HTML模板文件ProductListTemplate.html
'' 从资源加载,并使用 {{mustache}} 将其绑定到数据。
'' 更改模板文件(保留 {{mustache}} 绑定)
'' 可用于轻松自定义报告的外观。
''
'' 此示例使用 Stubble.Core 包来绑定数据到模板。
''
'' 请参阅HelloWorldHtml顶部评论中的注释
'' 有关将 GcDocs.Html 添加到项目的详细信息的示例代码。
Public Class ProductListTemplate
Sub CreatePDF(ByVal stream As Stream)
Using ds = New DataSet()
'' 获取数据:
ds.ReadXml(Path.Combine("Resources", "data", "DsNWind.xml"))
Dim dtProds = ds.Tables("Products")
Dim dtSupps = ds.Tables("Suppliers")
Dim products =
From prod In dtProds.Select()
Join supp In dtSupps.Select()
On prod("SupplierID") Equals supp("SupplierID")
Order By prod("ProductName")
Select New With {
.ProductID = prod("ProductID"),
.ProductName = prod("ProductName"),
.Supplier = supp("CompanyName"),
.QuantityPerUnit = prod("QuantityPerUnit"),
.UnitPrice = $"{prod("UnitPrice"):C}"
}
'' 加载模板 - HTML 文件,其中包含 {{mustache}} 数据引用:
Dim template = File.ReadAllText(Path.Combine("Resources", "Misc", "ProductListTemplate.html"))
'' 将模板绑定到数据:
Dim builder = New Stubble.Core.Builders.StubbleBuilder()
'' 渲染绑定的 HTML:
Dim boundTemplate = builder.Build().Render(template, New With {.Query = products})
Dim tmp = Path.GetTempFileName()
'' 创建一个用于呈现 HTML 的 GcHtmlBrowser 实例:
Using browser = Util.NewHtmlBrowser()
'' PdfOptions 允许您提供 HTML 到 PDF 转换的选项:
Dim pdfOptions = New PdfOptions() With {
.Margins = New PdfMargins(0.2F, 1, 0.2F, 1),
.DisplayHeaderFooter = True,
.HeaderTemplate = "<div style='color:#1a5276 font-size:12px width:1000px margin-left:0.2in margin-right:0.2in'>" +
"<span style='float:left'>Product Price List</span>" +
"<span style='float:right'>Page <span class='pageNumber'></span> of <span class='totalPages'></span></span>" +
"</div>",
.FooterTemplate = "<div style='color: #1a5276 font-size:12em width:1000px margin-left:0.2in margin-right:0.2in'>" +
"<span>(c) MESCIUS inc. All Rights Reserved.</span>" +
"<span style='float:right'>Generated on <span class='date'></span></span></div>"
}
'' 将生成的 HTML 渲染到临时文件:
Using htmlPage = browser.NewPage(boundTemplate)
htmlPage.SaveAsPdf(tmp, pdfOptions)
End Using
End Using
'' 将创建的 PDF 从临时文件复制到目标流:
Using ts = File.OpenRead(tmp)
ts.CopyTo(stream)
End Using
'' 清理:
File.Delete(tmp)
End Using
'' 完毕:
End Sub
End Class