我想在我的 iOS 应用程序中创建一个 PDF 发票(在 Objective-C 或 Swift 中)。
我的主要问题是发票可能有几页,这很难通过 Apple 的现有 API(CoreGraphics、Quartz 2D 等)实现。
到目前为止,我已经有了一个勉强可行的解决方案:
- 我创建了一个 HTML 模板,这是发票的基本结构
- 模板使用 GRMustache 填充数据
- 我将生成的 HTML 文件加载到
UIWebView
并将其保存为 PDF(我使用 NDHTMLtoPDF 来执行此操作)
到目前为止,还不错。
此解决方案的问题是分页符无法正常工作。
有一些表格和图片,分页符经常会切断表格或图片。
我尝试对图像和表格使用 page-break-inside: avoid;
css 属性,但 UIWebView
似乎完全忽略了它们...
My question is:
- Do you know how to fix the page break problem?
- Can you recommend another solution to create PDFs on iOS?
- 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/