iOS 创建 PDF 发票

标签 ios objective-c swift pdf

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

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

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

到目前为止,还不错。

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

My question is:

  1. Do you know how to fix the page break problem?
  2. Can you recommend another solution to create PDFs on iOS?
  3. Should I design the invoice in Storyboard and generate a PDF from the UIView? What about the page breaks here?

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

最佳答案

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

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

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

有一些关于如何执行此操作的教程,我不会重复,但对我来说这些资源非常有用:

关于iOS 创建 PDF 发票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30645673/

相关文章:

ios - 后退按钮在屏幕上显示为不同的颜色?

iphone - 开发者可以在邮件应用程序中访问未读邮件吗?

ios - 企业配置文件。签署设备而不添加它们

ios - 如何将 UIDevice.h 还原为原始版本?

ios - SceneKit - 线程 - 在哪个线程上做什么?

ios - 我可以快速制作一个文本有多种颜色的按钮吗?

ios - 从应用程序注销时如何删除 Pubnub channel 历史记录?

javascript - 如何从 Firebase 中删除 iOS 应用程序中超过 6 小时的数据?

ios - 如何分配标签文本属性以显示数组中的字符串?

swift - SKPhysicsJointFixed 在移动节点时不会将节点保持在一起