我们打印通过 html 到 pdf 应用程序生成的 pdf 书籍。
每个页面都有页眉和页脚,我们使用不同语言的生产和翻译限制(和布局变化)准确放置内容,以确保每个页面的固定内容适合。
例如,尽管我们的内容是动态的,但对于书中的同一位置,一个段落预计会占用大约相同数量的空间。我们有时会更改翻译的样式和布局属性,但同样的大小规则适用。
我们在每一页上都有一个页眉和页脚,整本书呈现为一个长的 html 页面,使用 css 换行强制每个页眉到一个新页面。因此,为了反映我们控制每个页面服务器端的固定内容高度。
这很好用,我们对 HTML 在演示中为我们提供的优势感到非常满意(设计师而不是程序员可以设计页面等),我们也在这项技术上投入了大量资金,我们现在太深而无法改变方向,所以我们无法改变我们的技术,我们使用的是 html 2 pdf,我们需要尽可能地使这项工作。这并不是说我们不能混合技术。但...
因此,问题是,我们现在有一些可变大小的内容,我们以前无法控制,对我们来说它是文本,所以我们可以控制它的格式,但不能控制它的数量。我们也有不同大小的标题。
我们需要一种计算分页符的方法,尽可能少留空白,我很想知道其他人是如何处理这个问题的。我知道这不是一门精确的科学,但我仍然需要尽可能好的方法。
我们完全控制了渲染/布局引擎,它始终与 ie8 兼容,因此无需考虑不同的浏览器。
这些是我的想法,很想听听你的:
- 这是我们当前的方法,为每页分配一些行数(根据字体大小和字体变化以允许不同的语言环境)每个内容块将计算为 n 行成本,该数字用于计算分页符。
亲简单
不准确,我们的字体都不是等宽的,需要为每个语言环境进行配置。
- 将自由流动内容的每个连续页面渲染到具有精确页面宽度(固定 div)的 div 中的网页中,让它流动到所需的任何垂直高度,使用 html 2 bmp 解决方案捕获图像并使用渲染图像的高度(边缘检测和裁剪,如果需要)计算所需的页数。
Pro 可能是准确的,如果自由流内容保持连续,则不会太贵。
不完整的解决方案,一旦我知道所需的页数,我怎么知道在哪里打破 html?使用这种方法测量每一页并进行边缘检测将非常昂贵。
- 在逐个字体的基础上,预先知道字体大小、文本和标题的填充和边距,使用从字体文件中提取的宽度数据逐个字符计算宽度和换行符和高度。
Pro 一旦提取了所有数据,并为 HTML 渲染的差异添加了边距,这可能是相当准确的。
对样式表更改高度复杂和敏感。
- 我们可以使用 WebBrowserControl 以某种方式测量内容吗?
喜欢听听你的想法和建议。
编辑....
我们的 pdf 转换器是 Winnovative,它在 .net Windows 服务中运行,但我们的 html 提要是用 PHP 生成的。