首页 > 解决方案 > 在 macOS 上确定 PDF 文档中的渲染高度以绘制动态大小的页脚

问题描述

假设我将少量文本打印到 PDF 文档中,我想知道该文本实际使用了多少页面。

例如,如果我将一个短文本段落渲染到 PDF 文档中,我希望只了解该文本的内容高度,而不是整个 A4(字母)页面的内容高度。

这篇文有多高?

背景

我需要将较长的 HTML 页面呈现为使用较小页面大小的 PDF 文档。结果是内容被渲染成几个 PDF 页面。我目前NSPrintOperation用于此。

挑战在于我还需要在每个页面中呈现页脚页面。为此,我需要动态确定该页脚的高度,以便我可以相应地设置页面的底部边距,从而在呈现主要(正文)HTML 内容时使页脚区域保持空闲。完成后,我可以在单独的步骤中将页脚添加到每个页面(使用CGPDFDocument)。

我希望有一种更简单的方法,但似乎 macOS HTML 渲染器在打印多个页面时无法处理 html 页脚。

标签: macosprintingpdf-generationcgpdfdocument

解决方案


我找到了一个解决方案,虽然这有点难看:

  1. 生成带有页脚内容的 PDF,以便它呈现在页面顶部(边距设置为 0)。
  2. 将 PDF 读入NSPDFImageRepMBS
  3. 创建一个NSImageMBS并将 imageRep 添加到它addRepresentation:
  4. 现在图像具有原始 PDF 页面的大小,但仅包含页脚内容的可绘制区域 - 图像的其余部分是清晰的。
  5. 通过从下向上扫描图像的线条,寻找不清晰的线条,可以确定页脚内容的高度。
  6. 已知页脚高度后,我现在可以将主要内容呈现为 PDF,并设置底部边距以保持页脚区域空闲
  7. 最后,我创建一个新的CGPDFDocument,遍历主 PDF 的每一页,将这些主页连同页脚(偏移到页面的页脚区域)一起绘制到每一页中。

推荐阅读