ProductListTemplate.vb
''
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
''
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
'' このサンプルは、{{mustache}} HTML テンプレートを使用してレポート
'' (標準の NWind サンプルデータベースの商品リスト)をレンダリングする方法を示します。
''
'' データクエリと HTML 形式は、ProductList サンプルで使用されているものと似ています。
'' ただし、そのサンプルとは異なり、ここではリソースからロードされた HTML テンプレート
'' ファイル ProductListTemplate.html を使用し、
'' {{mustache}} を使用してデータにバインドします。変更したテンプレートファイル
'' ({{mustache}} バインディングを保持)を使用することで、レポートの外観を簡単に
'' カスタマイズできます。
''
'' このサンプルでは、Stubble.Core パッケージを
'' 使用してデータをテンプレートにバインドします。
''
'' DsHtml をプロジェクトに追加する方法の詳細については、HelloWorldHtml サンプル
'' コードの上部にあるコメントのメモを参照してください。
Public Class ProductListTemplate
Sub CreatePDF(ByVal stream As Stream)
Using ds = New DataSet()
'' データを取得します。
ds.ReadXml(Path.Combine("Resources", "data", "GcNWind.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}"
}
'' テンプレートをロードします - {{mustache}}データ参照を含む HTML ファイル。
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
'' PDF ドキュメントを保存します。
End Sub
End Class