Synopse mORMot框架样例学习-05 - Report created from code

mac2025-01-29  18

例01-例04主要讲了ORM操作相关的基本知识,例05说的是报表,我们写东西最终的目的是要展示,从例05的名字就可以看出来,本例是要为我们展示报表,暂且把它翻译成源码级的报表吧(用代码创建报表).这个例子有3个工程文件,SynPdfFormCanvas\SynPdfLayers\TestSQLite3Pages,逐个学习.

1.SynPdfFormCanvas

这个只有工程源码,我们先运行一下,然后在工程目录会生成SynPdfFormCanvas.pdf文件,打开看看:

源码直接生成pdf文档,对生成的过程源码,继续用备注进行说明:

program SynPdfFormCanvas; {$APPTYPE CONSOLE} uses {$I SynDprUses.inc} // use FastMM4 on older Delphi, or set FPC threads SysUtils, Math, DateUtils, SynCommons, SynPDF; const // 此单精度浮点数定义的应该PDF的缩放因子,源码约28倍, // 我们改成14看看有什么变化,再改成7看看其变化 // 其变化是从左下到右上 PDFFactor: Single = 72.0 / 2.54; // PDFFactor: Single = 14; var // PDF引擎的主类,负责处理整个PDF文档 obPDF: TPdfDocument; // 带有画布的窗体对象,用于绘制界面,你可以根据需要创建XObject对象, // 然后把它画在页面的任何地方 obFormCanvas: TPdfFormWithCanvas; begin // 实例化TPdfDocument对象 obPDF := TPdfDocument.Create(false, 0, false); // 设置为true以强制pdf 1.5格式,这样会产生较小的文件 obPDF.GeneratePDF15File := true; // 顾名思义,设置纸张大小为A4 obPDF.DefaultPaperSize := psA4; // 默认页面及纸张方向,true为横向 obPDF.DefaultPageLandscape := false; // 压缩方式, TPdfCompressionMethod = (cmNone, cmFlateDecode); obPDF.CompressionMethod := cmFlateDecode; // 实例化TPdfFormWithCanvas对象 obFormCanvas := TPdfFormWithCanvas.Create(obPDF, Trunc(5.0 * PDFFactor), Trunc(5.0 * PDFFactor)); // 在TPdfFormWithCanvas上呈现obFormCanvas对象,也就是绘制 obPDF.AddXObject('FORMOBJECT', obFormCanvas); // 设置文本的呈现方式 obFormCanvas.Canvas.SetTextRenderingMode(trFill); // 设置字体,大小 obFormCanvas.Canvas.SetFont('Arial', 10.0, []); // 设置线宽 obFormCanvas.Canvas.SetLineWidth(0.01 * PDFFactor); // 以左下角为基点,绘制矩形 obFormCanvas.Canvas.Rectangle(0.0 * PDFFactor, 0.0 * PDFFactor, 4.9 * PDFFactor, 4.9 * PDFFactor); // 描边 obFormCanvas.Canvas.Stroke; // 在指定的页面位置显示文本 obFormCanvas.Canvas.TextOut(1.0 * PDFFactor, 2.5 * PDFFactor, 'form text'); // 关闭画布 obFormCanvas.CloseCanvas; // 向当前文档中添加一个页面 obPDF.AddPage; obPDF.Canvas.SetTextRenderingMode(trFill); obPDF.Canvas.SetFont('Arial', 10.0, []); obPDF.Canvas.SetLineWidth(0.01 * PDFFactor); obPDF.Canvas.Rectangle(1.0 * PDFFactor, 1.0 * PDFFactor, 19.0 * PDFFactor, 27.9 * PDFFactor); obPDF.Canvas.Stroke; obPDF.Canvas.TextOut(2.0 * PDFFactor, 27.0 * PDFFactor, 'XObject form canvas sample'); // 拉伸指定的对象(通常是图像) // obPDF.Canvas.DrawXObject(2.0 * PDFFactor, 5.0 * PDFFactor, 1.0, 1.0, 'FORMOBJECT'); // obPDF.Canvas.DrawXObject(10.0 * PDFFactor, 10.0 * PDFFactor, 1.0, 0.5, 'FORMOBJECT'); // obPDF.Canvas.DrawXObject(8.0 * PDFFactor, 15.0 * PDFFactor, 2.0, 2.0, 'FORMOBJECT'); // obPDF.Canvas.DrawXObject(2.0 * PDFFactor, 20.0 * PDFFactor, 0.5, 1.0, 'FORMOBJECT'); // 将pdf文件内容保存到指定的文件 obPDF.SaveToFile(ChangeFileExt(ExeVersion.ProgramFileName, '.pdf')); FreeAndNil(obPDF); end.

 

最新回复(0)