本文作者:icy

Pascal-如何在Delphi中快速实现Android PDF生成?深度解析GeraPDF开源项目与实战指南

icy 昨天 13 抢沙发
Pascal-如何在Delphi中快速实现Android PDF生成?深度解析GeraPDF开源项目与实战指南摘要: 揭秘 Delphi-Android-GeraPDF:让 Pascal 开发者轻松掌控 Android PDF 生成 对于长期使用 Delphi 开发跨平台应用的工程师来说,在 An...

Pascal-如何在Delphi中快速实现Android PDF生成?深度解析GeraPDF开源项目与实战指南

揭秘 Delphi-Android-GeraPDF:让 Pascal 开发者轻松掌控 Android PDF 生成

对于长期使用 Delphi 开发跨平台应用的工程师来说,在 Android 端生成 PDF 文档一直是一个痛点。由于 Android 系统的碎片化以及原生 PDF 库(如 PdfDocument)调用 API 的复杂性,开发者往往需要在 Java 桥接代码和 Delphi 封装之间挣扎。

GeraPDF 是一个由 Alessandro Martini 开发的开源项目,旨在为 Delphi 开发者提供一种简洁、高效的方式,在 Android 设备上直接生成 PDF 文件。它通过巧妙的封装,将复杂的 Android 原生 PDF 操作简化为 Delphi 开发者熟悉的面向对象调用。


1. 项目核心概述

Delphi-Android-GeraPDF 并不是一个简单的类库,而是一个完整的实现方案。它利用了 Delphi 的 Android API 桥接机制,允许开发者在不编写 Java 代码的情况下,通过 Pascal 语言定义 PDF 的页面、绘制文本以及保存文件。

核心功能点:

  • 原生 API 调用:直接调用 Android 系统的 PDF 生成能力,无需依赖庞大的第三方重量级库。
  • 轻量化设计:项目结构精简,易于集成到现有的 FireMonkey (FMX) 项目中。
  • 文件系统集成:支持将生成的 PDF 保存到 Android 的外部存储空间。
  • 坐标控制:支持通过坐标系精确控制文本在 PDF 页面上的位置。

2. 技术架构分析

该项目的实现逻辑遵循以下流程: Delphi UI/Logic \(\rightarrow\) Android API Wrapper \(\rightarrow\) Android PDFDocument (Java) \(\rightarrow\) PDF File (.pdf)

在 Android 原生层,它主要操作的是 android.graphics.pdf.PdfDocument 类。该类允许创建 PDF 文档,并为每个页面提供一个 Canvas(画布)。GeraPDF 的核心价值在于它将这个 Canvas 的操作映射到了 Delphi 的方法调用中。


3. 快速集成步骤

要将 GeraPDF 集成到你的项目中,请参考以下步骤:

第一步:克隆与导入

  1. 从 GitHub 下载项目:https://github.com/AlessandroMartini/Delphi-Android-GeraPDF
  2. 将项目中的核心单元(.pas 文件)添加到你的 Delphi 项目组中。

第二步:配置权限

由于生成 PDF 需要写入文件,你必须在 Android Manifest 中配置相应的权限: * READ_EXTERNAL_STORAGE * WRITE_EXTERNAL_STORAGE * 对于 Android 10+,建议配置 requestLegacyExternalStorage="true" 或使用 Scoped Storage 适配。


4. 实战代码实例

以下是一个模拟的实战场景:创建一个简单的发票 PDF,包含标题和正文。

基础生成示例

pascal
uses
  // 导入 GeraPDF 相关单元
  GeraPDF.Android; 

procedure TForm1.BtnGeneratePDFClick(Sender: TObject);
var
  PDF: TGeraPDF;
  Page: TPDFPage;
  FilePath: string;
begin
  // 1. 定义保存路径 (确保应用有写入权限)
  FilePath := TPath.Combine(TPath.GetSharedDocumentsPath, 'MyFirstDocument.pdf');

  // 2. 实例化 PDF 对象
  PDF := TGeraPDF.Create;
  try
    // 3. 创建一个新页面
    // 参数通常为 (宽度, 高度)
    Page := PDF.AddPage(595, 842); // A4 标准尺寸 (点)

    // 4. 在页面上绘制文本
    // 参数: (X坐标, Y坐标, 文本内容, 字体大小)
    Page.DrawText(50, 50, '欢迎使用 Delphi-Android-GeraPDF', 24);
    Page.DrawText(50, 100, '这是一份由 Pascal 语言在 Android 上生成的 PDF 文档。', 14);
    Page.DrawText(50, 120, '日期: ' + DateToStr(Now), 12);

    // 5. 保存文件到指定路径
    if PDF.SaveToFile(FilePath) then
      ShowMessage('PDF 生成成功!路径: ' + FilePath)
    else
      ShowMessage('PDF 生成失败,请检查权限。');

  finally
    PDF.Free;
  end;
end;

进阶技巧:循环生成列表

如果你需要生成一个报表,可以使用循环结构:

pascal
var
  i: Integer;
  CurrentY: Single;
begin
  Page := PDF.AddPage(595, 842);
  CurrentY := 50;
  
  Page.DrawText(50, CurrentY, '订单清单', 20);
  CurrentY := CurrentY + 40;

  for i := 1 to 10 do
  begin
    Page.DrawText(50, CurrentY, Format('项目 %d: 数量 1, 金额 $10.00', [i]), 12);
    CurrentY := CurrentY + 20;
    
    // 简单的分页逻辑
    if CurrentY > 800 then 
    begin
      Page := PDF.AddPage(595, 842);
      CurrentY := 50;
    end;
  end;
end;

5. 项目优劣势分析

优势 \(\checkmark\)

  1. 零依赖:不需要安装复杂的第三方 SDK 或付费组件。
  2. 原生性能:利用 Android 系统自带的 PDF 引擎,生成速度快,文件体积小。
  3. 学习成本低:对于熟悉 Delphi 的开发者,几乎没有学习曲线。

局限性 \(\times\)

  1. 排版能力有限:由于是基于坐标的绘制(Canvas-based),不支持自动换行(Auto-wrap)。如果文本过长,需要手动计算坐标进行分行。
  2. 样式单一:目前主要支持基础文本绘制,复杂的表格、图像插入需要进一步扩展底层 API 调用。
  3. 平台锁定:该项目专门为 Android 设计,无法直接用于 iOS 或 Windows。

6. 总结与建议

Delphi-Android-GeraPDF 为 Delphi 开发者提供了一个极其轻量级的切入点,解决了“从无到有”生成 PDF 的难题。

适用场景建议: * 推荐使用:生成简单的电子收据、简单的报告、文本备份、基础的证书。 * 不推荐使用:需要复杂排版(如书籍、多列杂志)、需要高度自定义 CSS 样式、需要处理超大规模数据的复杂报表。

如果你正在寻找一个快速集成且不增加 APK 体积的 PDF 方案,这个项目绝对值得尝试。通过对其源码的微调,你甚至可以将其扩展,增加对图片绘制(DrawBitmap)的支持,从而打造一个功能完备的移动端文档生成工具。

Delphi-Android-GeraPDF_20250928145056.zip
类型:压缩文件|已下载:0|下载方式:免费下载
立即下载
文章版权及转载声明

作者:icy本文地址:https://www.zelig.cn/delphi/1253.html发布于 昨天
文章转载或复制请以超链接形式并注明出处软角落-SoftNook

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,13人围观)参与讨论

还没有评论,来说两句吧...