首先,FastReport VCL 是一个报告生成器。基于这个结论,我们可以假设在报表中预览或嵌入其他格式的文档是多余的。但根据客户的要求,我们可以看到相反的观点。我们的许多客户正在通过新旧系统的集成来解决任务。这种旧系统可能包含需要连接到新报告的已经准备好的文档。换句话说 – 将第三方格式的文档嵌入和查看到报告中,向其中添加新页面或字段。
对于 FastReport VCL 2021.3 中的此类任务,我们添加了新的报告对象 - TfrxPDFView。此对象使用开源库Pdfium,旨在查看报告中的 PDF 文档。您可以从源代码构建这个库,也可以使用 FastReport VCL 安装包(Bin 文件夹中的 frx_pdfium.dll 和 frx_pdfium_64.dll)中的一个现成的库。手动构建后,您需要将库重命名为 frx_pdfium.dll(对于 32 位系统)和 frx_pdfium_64.dll(对于 64 位系统)。对于手动构建,您需要 Visual Studio 和 Google depot_tools。
如上所述,您不需要构建 Pdfium,您可以使用 FastReport VCL 安装包中准备好的库,但如果您的公司有安全限制并且需要在您的端构建所有代码,请使用上面的链接。
该TfrxPDFView既可以在一个和几个报表页画文件。使用报表引擎拆分对象的能力。让我们更仔细地检查一下如何使用这个对象以及它提供了什么功能。
清除安装最新的FastReport VCL 2021.3 版本后,该组件应该出现在FastReport VCL 部分的Delphi 组件面板上。
只需将 TfrxPDFObject 放在申请表上,即可在运行时使用 TfrxPDFView。如果您从新项目开始,还要将 TfrxReport 组件添加到表单中,然后双击它调用报告设计器。
然后单击报表设计器对象面板中的 PDF 对象并在报表的带区上创建一个新对象。就像任何其他 FastReport VCL 对象一样。
对象已创建。之后,应出现允许加载 PDF 文档的对象编辑器。
TfrxPDFView允许打印多页文档。特别为此 TfrxPDFView 有新的属性。
DetailStretchMode 属性负责显示对象容器内的内容,可以是以下值之一:
pdOneToOneStrongStretch – 始终使用报表对象大小拉伸页面。它不保持纵横比。
pdOneToOneNormalize – 页面总是被拉伸并保持 PDF 文档中原始页面的纵横比。
pdManyToOneNormalize - 允许将多个页面放入报表对象区域并保持 PDF 文档中原始页面的纵横比。
打印多页PDF文档
FastReport VCL 允许将 PDF 文档作为 PDF 文档的一页打印到 PDF 文档的每一页的报告的一页上。
我们已经在报表的报表标题栏上创建并加载了一个 PDF 文档。让我们将其拉伸到报告模板页面的整个页面。它应该如下图所示。
如果我们现在点击报告预览,即使一个文档有多于一页,我们也只会看到加载 PDF 文档的一页。要打印所有页面,我们需要执行一系列步骤。
第 1 步:打开 AllowSplit 和 Stretched 属性,并将它们设置为 True 在以 TfrxPDFView 作为子项的带区对象中。我们需要这个带区进行拉伸和切分。
第2步:在 TfrxPDFView 对象上将 StretchMode 属性设置为 smActualHeight 或 smMaxHeight。这个物体现在可以拉伸了。
让我们运行报告预览并检查报告输出。
FastReport VCL 在报告页面上打印 PDF 文档的所有页面。
TfrxPDFView 对象具有和其他属性。“密码”属性设置 PDF 文档密码。“DrawOptions”标志允许控制文档输出。
此外,您可以使用 FileLink 属性将文件名用作 TfrxPDFView 对象的源。这还不是全部!使用新的 DataLink 属性,甚至可以通过 http 和 https 协议加载文档。
现在 FastReport VCL 可以在报告中打印 PDF 文档,而不仅仅是生成它们!