【问题标题】:iOS create PDF invoiceiOS 创建 PDF 发票
【发布时间】:2015-06-04 13:52:17
【问题描述】:

我想在我的 iOS 应用(Objective-C 或 Swift 中)中创建 PDF 发票。
我的主要问题是发票可能有几页,这很难用 Apple 的现有 API(CoreGraphics、Quartz 2D 等)实现。

到目前为止,我已经有了一个勉强可行的解决方案:

  1. 我创建了一个 HTML 模板,它是发票的基本结构
  2. 模板使用GRMustache填充数据
  3. 我将生成的 HTML 文件加载到 UIWebView 并保存为 PDF(我使用 NDHTMLtoPDF 来执行此操作)

到目前为止,一切都很好。

此解决方案的问题是分页符无法正常工作。 有一些表格和图像,分页符经常会切断表格或图像。
我曾尝试对图像和表格使用 page-break-inside: avoid; css 属性,但 UIWebView 似乎完全忽略了它们......

我的问题是:

  1. 你知道如何解决分页问题吗?
  2. 能否推荐另一种在 iOS 上创建 PDF 的解决方案?
  3. 我应该在 Storyboard 中设计发票并从UIView 生成 PDF 吗?这里的分页符怎么办?

我希望有一个模板(例如 HTML),用数据填充它并将其保存为 PDF,而不是在代码中做所有事情。

【问题讨论】:

  • 你有什么理由想要浏览 HTML 吗? iOS 允许您使用 CG 调用自己创建包含内容的 PDF 文件,这可能需要更多的工作,但您可以完全控制生成的内容、中断或不中断页面的位置等...
  • 之所以要使用 HTML,是因为我可以轻松地创建模板并在其中填充信息。此外,我可以在其他(也非 iOS)项目中重复使用该模板。此外,我认为在 CG 中手动创建布局更加困难(我自己还必须关心分页符和其他东西)。如果没有其他解决方案,我想我必须使用CG。
  • 如果您想在 iOS 上使用 Objective C 创建 PDF 发票,请查看tutorial

标签: ios objective-c swift pdf


【解决方案1】:

实际上我自己编写了一个 PDF 报告组件,大概有类似的要求:

  • 模板是通过 HTML / CSS 完成的
  • 每页的静态页眉/页脚

您可以使用 UIPrintPageRenderer 和 UIViewPrintFormatter API 来实现这一点,但缺点是您的应用可能会在应用商店审核中被拒绝,因为您使用的是私有 Apple API。因此,这种方法可能仅适用于学术环境或您开发内部应用程序。

有一些关于如何做到这一点的教程,我不会重复,但这些资源对我来说非常有用:

【讨论】:

    猜你喜欢
    • 2011-08-20
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多