/// <summary>/// geovindu, Geovin Du,涂聚文 Edit/// </summary>public class DuModel {private string name;private int price, quantity;/// <summary>/// /// </summary>/// <param name="name"></param>/// <param name="price"></param>/// <param name="quantity"></param>public DuModel(string name,int price,int quantity){this.name = name;this.price = price;this.quantity = quantity;}/// <summary>/// /// </summary>public string Name{ get { return name; }set { name = value; }}/// <summary>/// /// </summary>public int Price{get { return price; }set { price = value; }}/// <summary>/// /// </summary>public int Quantity{get { return quantity; }set { quantity = value; }}/// <summary>/// /// </summary>/// <returns></returns>public override string ToString(){return $"{nameof(Name)}: {Name}, {nameof(Price)}: {Price}, {nameof(Quantity)}: {Quantity}";}}
var titleStyle = TextStyle.Default.FontSize(36).SemiBold().FontColor(Colors.Blue.Medium).FontFamily("simhei");var duPdf = Document.Create(container =>{container.Page(page =>{page.Size(PageSizes.A4);page.Margin(2, Unit.Centimetre);page.PageColor(Colors.White);page.DefaultTextStyle(x => x.FontSize(20).SemiBold().FontColor(Colors.Blue.Medium).FontFamily("simhei"));page.Header().Text("geoVI studio捷为工作室") .FontFamily("simhei")//中文,需定义中文字体否则出问题.SemiBold().FontSize(36).FontColor(Colors.Blue.Darken2);page.Content().PaddingVertical(1, Unit.Centimetre) .Column(x =>{x.Spacing(20);x.Item().Table(t =>{t.ColumnsDefinition(c =>{c.RelativeColumn();c.RelativeColumn(3);});t.Cell().Border(1).Background(Colors.Grey.Lighten3).Padding(5).Text("Visual Studio").FontFamily("simhei");t.Cell().Border(1).Padding(5).Text("Start in debug mode with 'Hot Reload on Save' enabled.").FontFamily("simhei");t.Cell().Border(1).Background(Colors.Grey.Lighten3).Padding(5).Text("Command line").FontFamily("simhei");t.Cell().Border(1).Padding(5).Text("Run 'dotnet watch'.").FontFamily("simhei");});x.Item().Text("Modify this line and the preview should show your changes instantly.").FontFamily("simhei");//表格x.Item().Table(table =>{//设置表头的列参数占比table.ColumnsDefinition(columns =>{columns.ConstantColumn(30);columns.RelativeColumn();columns.RelativeColumn();columns.RelativeColumn();columns.RelativeColumn();});// 表头table.Header(header =>{header.Cell().Text("#").FontFamily("simhei");header.Cell().Text("商品").FontFamily("simhei");header.Cell().AlignRight().Text("价格").FontFamily("simhei");header.Cell().AlignRight().Text("数量").FontFamily("simhei");header.Cell().AlignRight().Text("总价").FontFamily("simhei");header.Cell().ColumnSpan(5).PaddingVertical(5).BorderBottom(1).BorderColor(Colors.Black);});var list = new List<DuModel>();list.Add(new DuModel("小锅",20,1));list.Add(new DuModel("小刀", 2, 12));list.Add(new DuModel("小碗", 5, 13));list.Add(new DuModel("小筷", 20, 4));list.Add(new DuModel("小砧", 1, 100));//数据组合for (int i = 0; i < list.Count; i++){table.Cell().Element(CellStyle).Text(i + 1).FontFamily("simhei");table.Cell().Element(CellStyle).Text(list[i].Name).FontFamily("simhei");table.Cell().Element(CellStyle).AlignRight().Text($"{list[i].Price}$").FontFamily("simhei").Style(titleStyle);table.Cell().Element(CellStyle).AlignRight().Text(list[i].Quantity).FontFamily("simhei");table.Cell().Element(CellStyle).AlignRight().Text($"{list[i].Price * list[i].Quantity}$").FontFamily("simhei");static IContainer CellStyle(IContainer container){return container.BorderBottom(1).BorderColor(Colors.Grey.Lighten2).PaddingVertical(5);}}});});page.Footer().AlignCenter() .Text(x =>{x.Span("第 ");x.CurrentPageNumber(); x.Span(" 页");x.Span("/共 ");x.TotalPages();x.Span(" 页");});});});// duPdf.ShowInPreviewer();string pathfile = @"geovindu" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";duPdf.GeneratePdf(pathfile);//duPdf.ShowInPreviewerAsync(2500);
输出:、
from:
https://github.com/QuestPDF/
https://github.com/QuestPDF/QuestPDF-ExampleInvoice
https://github.com/QuestPDF/QuestPDF-Documentation