日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Magicodes.IE基础教程之导出Pdf

發(fā)布時間:2023/12/4 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Magicodes.IE基础教程之导出Pdf 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

說明

本教程主要說明如何使用Magicodes.IE.Pdf完成Pdf收據(jù)導(dǎo)出


要點(diǎn)

  • 導(dǎo)出PDF數(shù)據(jù)

  • 自定義PDF模板

  • 導(dǎo)出單據(jù)

  • 如何批量導(dǎo)出單據(jù)

導(dǎo)出特性說明

PdfExporterAttribute

PdfExporterAttribute特性用于設(shè)置Pdf導(dǎo)出的總體設(shè)置,比如方向、紙張等。主要包含如下設(shè)置:

  • Name:文檔標(biāo)題

  • FontSize:字體大小

  • Orientation: 方向(橫向或縱向)

  • PaperKind: 紙張類型(默認(rèn)A4)

  • IsWriteHtml: 是否輸出HTML模板

  • IsEnablePagesCount:是否啟用分頁數(shù)

  • Encoding:編碼,默認(rèn)utf-8

  • HeaderSettings:導(dǎo)出頭部設(shè)置

  • FooterSettings:導(dǎo)出底部設(shè)置


ExporterHeaderAttribute

ExporterHeaderAttribute 特性用于設(shè)置列頭信息,在Pdf表格中,可用于設(shè)置顯示名稱。
DisplayName: 顯示名稱


使用步驟

1.安裝包Magicodes.IE.Pdf

Install-Package Magicodes.IE.Pdf

2.導(dǎo)出PDF數(shù)據(jù)

  • 創(chuàng)建Dto類

public class Student{/// <summary>/// 姓名/// </summary>public string Name { get; set; }/// <summary>/// 年齡/// </summary>public int Age { get; set; }} public async Task ExportPdf(){var exporter = new PdfExporter();var result = await exporter.ExportListByTemplate("test.pdf", new List<Student>(){new Student{Name = "MR.A",Age = 18},new Student{Name = "MR.B",Age = 19},new Student{Name = "MR.B",Age = 20}});}

導(dǎo)出內(nèi)容如下所示:

上述代碼導(dǎo)出了一個簡單的Pdf表格,使用的Magicodes.IE中內(nèi)置的表格模板。如果我們需要自定義標(biāo)題,可以通過【ExporterHeader】特性來設(shè)置:

[PdfExporter(Name = "學(xué)生信息")]public class Student{/// <summary>/// 姓名/// </summary>[ExporterHeader(DisplayName = "姓名")][Display(Name = "Display姓名")]public string Name { get; set; }/// <summary>/// 年齡/// </summary>[ExporterHeader(DisplayName = "年齡")]public int Age { get; set; }}
  • PdfExporter 通過Name屬性來定義文檔標(biāo)題

  • ExporterHeader DisplayName用來定義屬性名稱

  • Display同樣定義屬性名稱,但是優(yōu)先級小于ExporterHeader

  • 通過修改上述代碼執(zhí)行結(jié)果如下所示:

    3.通過模板導(dǎo)出PDF收據(jù)

    • 創(chuàng)建導(dǎo)出模板

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8"/><title></title><style type="text/css">body { font-family: SimSun !important; }p { margin: 0px; }footer {color: #333;font-size: 1.2rem;margin-bottom: 1.5rem;margin-right: 5%;margin-top: 1.2rem;text-align: right;}table,td {border: 1px solid #444;border-collapse: collapse;/* text-align: center; */height: 2rem;padding: 5px;} </style> </head><body> <p style="color: #000; font-size: 1.8rem; height: 32px; text-align: center;">@Model.Title </p> <p style="color: #333; font-size: 1.2rem; margin-left: 5%; margin-top: 1%;"><text>NO:@Model.Data.Code</text><text style="padding-left: 52%; text-align: right;">交易時間:@Model.Data.TradeTime.ToString("yyyy-MM-dd HH:mm:ss")</text> </p><table width="90%" style="margin-left: 5%; margin-top: 1%;"><tr style="font-size: 1rem;"><td style="text-align: center; width: 11%;">交款姓名</td><td colspan="2">@Model.Data.Name</td><td style="text-align: center; width: 13%;">身份證號碼</td><td colspan="3">@Model.Data.IdNo</td></tr><tr style="font-size: 1rem;"><td style="text-align: center">交易金額</td><td colspan="6"><span>¥:@Model.Data.Amount</span><span style="padding: 0 2% 0 2%;">人民幣(大寫):</span><span>@Model.Data.UppercaseAmount</span></td></tr><tr style="font-size: 1rem;"><td style="text-align: center">收款方式</td><td colspan="2">@Model.Data.PaymentMethod</td><td style="text-align: center; width: 13%;">交易狀態(tài)</td><td colspan="3">@Model.Data.TradeStatus</td></tr><tr style="font-size: 1rem;"><td style="text-align: center">收款事由</td><td style="width: 22.3%;">@Model.Data.Remark</td><td style="text-align: center; width: 11%;">入學(xué)年級</td><td style="width: 22.3%;" colspan="2">@Model.Data.Grade</td><td style="text-align: center; width: 11%;">專業(yè)</td><td style="width: 22.3%;">@Model.Data.Profession</td></tr> </table> </body> </html>

    如上述代碼所示,為了便于模板的編寫,Magicodes.IE支持HTML模板的編寫。

    • 創(chuàng)建Dto類

    [Exporter(Name = "湖南心萊信息科技有限公司電子收款憑證")]public class ReceiptInfo{/// <summary>/// 交易時間/// </summary>public DateTime TradeTime { get; set; }/// <summary>/// 姓名/// </summary>public string Name { get; set; }/// <summary>/// 身份證/// </summary>public string IdNo { get; set; }/// <summary>/// 金額/// </summary>public decimal Amount { get; set; }/// <summary>/// 支付方式/// </summary>public string PaymentMethod { get; set; }/// <summary>/// 交易狀態(tài)/// </summary>public string TradeStatus { get; set; }/// <summary>/// 備注/// </summary>public string Remark { get; set; }/// <summary>/// 年級/// </summary>public string Grade { get; set; }/// <summary>/// 專業(yè)/// </summary>public string Profession { get; set; }/// <summary>/// 收款人/// </summary>public string Payee { get; set; }/// <summary>/// 大寫金額/// </summary>public string UppercaseAmount { get; set; }/// <summary>/// 編號/// </summary>public string Code { get; set; }}
      • 如上代碼片段通過Exporter特性去指定模板中的Title,當(dāng)然在我們實(shí)際開發(fā)中也可以不通過該屬性去做指定,畢竟我們這一塊也是完全自定義的

    • 如何使用自定義模板導(dǎo)出?代碼如下所示:

    public async Task ExportReceipt(){var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates","receipt.cshtml");var tpl = File.ReadAllText(tplPath);var exporter = new PdfExporter();//此處使用默認(rèn)模板導(dǎo)出var result = await exporter.ExportByTemplate("test.pdf",new ReceiptInfo{Amount = 22939.43M,Grade = "2019秋",IdNo = "43062619890622xxxx",Name = "張三",Payee = "湖南心萊信息科技有限公司",PaymentMethod = "微信支付",Profession = "運(yùn)動訓(xùn)練",Remark = "學(xué)費(fèi)",TradeStatus = "已完成",TradeTime = DateTime.Now,UppercaseAmount = "貳萬貳仟玖佰叁拾玖圓肆角叁分",Code = "19071800001"}, tpl);}

    通過上述代碼我們需要進(jìn)行指定傳遞模板內(nèi)容,最終導(dǎo)出效果如下:

    4.批量導(dǎo)出PDF收據(jù)

    在某些情況下,我們需要將多條數(shù)據(jù)導(dǎo)出到一個Pdf,就比如銀行提供的批量收據(jù)。通過Magicodes.IE,也可以非常簡單的實(shí)現(xiàn)類似的需求。主要步驟如下所示:

    創(chuàng)建模板

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8"/><title></title><style type="text/css">body { font-family: SimSun !important; }p { margin: 0px; }footer {color: #333;font-size: 1.2rem;margin-bottom: 1.5rem;margin-right: 5%;margin-top: 1.2rem;text-align: right;}table,td {border: 1px solid #444;border-collapse: collapse;height: 2rem;padding: 5px;}.evenNum {margin-bottom: 8%;padding-top: 10%;} </style> </head><body> @for (var i = 0; i < Model.Data.ReceiptInfoInputs.Count; i++) {<div style="height: 41%; width: 100%;" class="@(i % 2 == 0 ? "" : "evenNum")"><p style="color: #000; font-size: 1.8rem; height: 32px; text-align: center;">@Model.Data.Title</p><p style="color: #333; font-size: 1.2rem; margin-left: 5%; margin-top: 1%;"><text>NO:@Model.Data.ReceiptInfoInputs[i].Code</text><text style="padding-left: 52%; text-align: right;">交易時間:@Model.Data.ReceiptInfoInputs[i].TradeTime.ToString("yyyy-MM-dd HH:mm:ss")</text></p><table width="90%" style="margin-left: 5%; margin-top: 1%;"><tr style="font-size: 1rem;"><td style="text-align: center; width: 11%;">交款姓名</td><td colspan="2">@Model.Data.ReceiptInfoInputs[i].Name</td><td style="text-align: center; width: 13%;">身份證號碼</td><td colspan="3">@Model.Data.ReceiptInfoInputs[i].IdNo</td></tr><tr style="font-size: 1rem;"><td style="text-align: center">交易金額</td><td colspan="6"><span>¥:@Model.Data.ReceiptInfoInputs[i].Amount</span><span style="padding: 0 2% 0 2%;">人民幣(大寫):</span><span>@Model.Data.ReceiptInfoInputs[i].UppercaseAmount</span></td></tr><tr style="font-size: 1rem;"><td style="text-align: center">收款方式</td><td colspan="2">@Model.Data.ReceiptInfoInputs[i].PaymentMethod</td><td style="text-align: center; width: 13%;">交易狀態(tài)</td><td colspan="3">@Model.Data.ReceiptInfoInputs[i].TradeStatus</td></tr><tr style="font-size: 1rem;"><td style="text-align: center">收款事由</td><td style="width: 22.3%;">@Model.Data.ReceiptInfoInputs[i].Remark</td><td style="text-align: center; width: 11%;">入學(xué)年級</td><td style="width: 22.3%;" colspan="2">@Model.Data.ReceiptInfoInputs[i].Grade</td><td style="text-align: center; width: 11%;">專業(yè)</td><td style="width: 22.3%;">@Model.Data.ReceiptInfoInputs[i].Profession</td></tr></table></div> } </body> </html>
    • 創(chuàng)建Dto類

    /// <summary>/// 批量導(dǎo)出Dto/// </summary>[PdfExporter(Orientation = Orientation.Portrait, PaperKind = PaperKind.A5)]public class BatchReceiptInfoDto{/// <summary>/// 交易時間/// </summary>public DateTime TradeTime { get; set; }/// <summary>/// 姓名/// </summary>public string Name { get; set; }/// <summary>/// 身份證/// </summary>public string IdNo { get; set; }/// <summary>/// 金額/// </summary>public decimal Amount { get; set; }/// <summary>/// 支付方式/// </summary>public string PaymentMethod { get; set; }/// <summary>/// 交易狀態(tài)/// </summary>public string TradeStatus { get; set; }/// <summary>/// 備注/// </summary>public string Remark { get; set; }/// <summary>/// 年級/// </summary>public string Grade { get; set; }/// <summary>/// 專業(yè)/// </summary>public string Profession { get; set; }/// <summary>/// 大寫金額/// </summary>public string UppercaseAmount { get; set; }/// <summary>/// 編號/// </summary>public string Code { get; set; }}
    • 如何使用

    public async Task BathExportReceipt(){var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates","batchReceipt.cshtml");var tpl = File.ReadAllText(tplPath);var exporter = new PdfExporter();var input = new BatchReceiptInfoInput{Payee = "湖南心萊信息科技有限公司",ReceiptInfoInputs = new List<BatchReceiptInfoDto>()};for (var i = 0; i < 20; i++)input.ReceiptInfoInputs.Add(new BatchReceiptInfoDto{Amount = 22939.43M,Grade = "2019秋",IdNo = "43062619890622xxxx",Name = "張三",PaymentMethod = "微信支付",Profession = "運(yùn)動訓(xùn)練",Remark = "學(xué)費(fèi)",TradeStatus = "已完成",TradeTime = DateTime.Now,UppercaseAmount = "貳萬貳仟玖佰叁拾玖圓肆角叁分",Code = "1907180000" + i});//此處使用默認(rèn)模板導(dǎo)出var result = await exporter.ExportByTemplate("test.pdf", input, tpl);}

    通過上述代碼我們需要進(jìn)行指定傳遞模板內(nèi)容,最終導(dǎo)出效果如下:

    注意事項

    至此,整個教程到這里就結(jié)束了。不過還有以下事項需要注意:

    • Pdf導(dǎo)出支持全平臺,包括Windows和Linux,x86以及x64

    • Pdf導(dǎo)出底層基于wkhtmltopdf庫的封裝,已包含wkhtmltopdf各平臺的包,無需再次安裝

    • 在Linux容器中,Pdf導(dǎo)出需要安裝相關(guān)字體文件,具體見容器教程

    總結(jié)

    以上是生活随笔為你收集整理的Magicodes.IE基础教程之导出Pdf的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。