Ios 添加一个类似“quot”的页脚;第x页,共y页“;使用UIGraphicsPDFRenderer创建PDF时

Ios 添加一个类似“quot”的页脚;第x页,共y页“;使用UIGraphicsPDFRenderer创建PDF时,ios,swift,pdf,apple-pdfkit,Ios,Swift,Pdf,Apple Pdfkit,我正在开发我的应用程序中的一个功能,它可以让用户将数据导出到一个精心设计的PDF中 我正在使用uigraphicsdpfrenderer进行此操作,我已完成 我在添加“第x页,共y页”这样的页脚时遇到问题。虽然“x”很简单,但我很难确定“y”,因为我只知道在完全呈现PDF后,我的文档有多少页。我无法提前确定页数,因为布局相当复杂 现在我还知道新页面是用beginPage()创建的。还有办法进入上一页吗因为这样我就可以简单地浏览文档并添加缺少的页脚 以下是我在Swift 4中使用的代码(非常简化,

我正在开发我的应用程序中的一个功能,它可以让用户将数据导出到一个精心设计的PDF中

我正在使用
uigraphicsdpfrenderer
进行此操作,我已完成

我在添加“第x页,共y页”这样的页脚时遇到问题。虽然“x”很简单,但我很难确定“y”,因为我只知道在完全呈现PDF后,我的文档有多少页。我无法提前确定页数,因为布局相当复杂

现在我还知道新页面是用
beginPage()
创建的。还有办法进入上一页吗因为这样我就可以简单地浏览文档并添加缺少的页脚

以下是我在Swift 4中使用的代码(非常简化,但应该足以理解其中的含义):

let pdf = renderer.pdfData { (context) in
  let attributes = [ NSFontAttributeName : UIFont.boldSystemFont(ofSize: 15) ]
  // page 1
  context.beginPage()
  NSAttributedString(string: "Page 1", attributes: attributes).draw(in: CGRect(x: 0, y: 0, width: 500, height: 200))

  // page 2
  context.beginPage()
  NSAttributedString(string: "Page 2", attributes: attributes).draw(in: CGRect(x: 0, y: 0, width: 500, height: 200))

  // page 3
  context.beginPage()
  NSAttributedString(string: "Page 3", attributes: attributes).draw(in: CGRect(x: 0, y: 0, width: 500, height: 200))

  // Now that I know that the PDF will have 3 pages, add the footer on all 3 pages - but how?
  }
}

UIGraphicsPDFRenderer是一个仅向前的pdf生成器。
您有两种选择:

  • 推荐)在将数据写入pdf之前分析数据,以确定适合的页面数。由于代码执行分页符,您应该能够计算数据需要多少页
  • 创建不带“第x页,共y页”的文档并保存。创建新文档,打开以前保存的文档,在新文档的页面上绘制其页面,然后添加“第x页,共y页”

  • 2更麻烦,效率更低,所以我会选择1。因为保存、编辑和删除需要更多的CPU和内存。

    请提供一个迄今为止您尝试过的代码。您不能创建一个没有页脚的pdf,获取页面计数,放弃该pdf并创建另一个,或者只需编辑页脚页面计数吗?@fewlinesofcode我添加了一个示例代码来了解我正在尝试做的事情。@LeoDabus谢谢,这是个好主意——肯定会奏效的。我唯一不太喜欢的是,我或多或少创建了两次相同的文档。我将不得不用大量的数据来测试它,看看它是如何工作的:)@LeoDabus谢谢你的提示-添加了Swift版本(版本4)并更新了代码以使用NSAttributedString。谢谢,Mihai!我确实选择了选项1,它运行得非常快——即使是在大数据的情况下也是如此。:)