macos - 在 macOS 上确定 PDF 文档中的渲染高度以绘制动态大小的页脚
问题描述
假设我将少量文本打印到 PDF 文档中,我想知道该文本实际使用了多少页面。
例如,如果我将一个短文本段落渲染到 PDF 文档中,我希望只了解该文本的内容高度,而不是整个 A4(字母)页面的内容高度。
背景
我需要将较长的 HTML 页面呈现为使用较小页面大小的 PDF 文档。结果是内容被渲染成几个 PDF 页面。我目前NSPrintOperation
用于此。
挑战在于我还需要在每个页面中呈现页脚页面。为此,我需要动态确定该页脚的高度,以便我可以相应地设置页面的底部边距,从而在呈现主要(正文)HTML 内容时使页脚区域保持空闲。完成后,我可以在单独的步骤中将页脚添加到每个页面(使用CGPDFDocument
)。
我希望有一种更简单的方法,但似乎 macOS HTML 渲染器在打印多个页面时无法处理 html 页脚。
解决方案
我找到了一个解决方案,虽然这有点难看:
- 生成带有页脚内容的 PDF,以便它呈现在页面顶部(边距设置为 0)。
- 将 PDF 读入
NSPDFImageRepMBS
- 创建一个
NSImageMBS
并将 imageRep 添加到它addRepresentation:
- 现在图像具有原始 PDF 页面的大小,但仅包含页脚内容的可绘制区域 - 图像的其余部分是清晰的。
- 通过从下向上扫描图像的线条,寻找不清晰的线条,可以确定页脚内容的高度。
- 已知页脚高度后,我现在可以将主要内容呈现为 PDF,并设置底部边距以保持页脚区域空闲
- 最后,我创建一个新的
CGPDFDocument
,遍历主 PDF 的每一页,将这些主页连同页脚(偏移到页面的页脚区域)一起绘制到每一页中。
推荐阅读
- c# - 未找到 WPF MahApps.Metro 资源
- python - 将身份验证装饰器添加到烧瓶 restx
- python - 如何绘制取决于颜色设置为气体浓度的风玫瑰图
- flutter - 在 Flutter 中裁剪多张图片
- android - 无法通过终端获取 SHA-1 密钥
- erlang - 在 Ubuntu 18 上安装 Erlang 17.3
- python - 如何在 python 脚本中跟踪内存使用增长的对象
- flutter - 如何在 Flutter 中管理/添加多个图像分辨率/尺寸以实现响应式 UI
- python - 在黑白图片中围绕特定颜色添加边界框
- winapi - winapi - WM_MEASUREITEM - 如何确定事件源