计算服务器端的html分页符(html 2 pdf),以便使用页眉和页脚进行精确的打印布局


calculate html page breaks (html 2 pdf) server side for precise print layout with headers and footers

我们打印通过html到pdf应用程序生成的pdf书籍。

每个页面上都有页眉和页脚,我们使用不同语言的生产和翻译限制(以及布局变化)来准确地放置内容,以确保每个页面的固定内容适合。

因此,例如,尽管我们的内容是动态的,但一个段落在书中的同一位置需要大约相同的空间。我们有时会更改翻译的样式和布局属性,但同样的大小规则也适用。

我们在每一页上都有一个页眉和页脚,整本书都被呈现为一个长html页面,使用css换行将每个页眉强制放到一个新页面上。因此,为了反映我们在服务器端控制固定的每页内容高度。

这很好,我们对HTML在演示中为我们提供的优势感到非常满意(设计师而不是程序员可以设计页面等),我们也在这项技术上投入了大量资金,我们现在太深了,无法改变方向,所以我们无法改变我们的技术,我们使用的是HTML 2 pdf,我们需要尽可能地使其发挥最佳作用。这并不是说我们不能混合技术。但是。。。

因此,问题是,我们现在有一些可变大小的内容,我们以前无法控制,对我们来说,它是文本,所以我们可以控制它的格式,但不能控制它的数量。我们也有不同大小的标题。

我们需要一种计算分页符的方法,尽可能少地留出空白,我很想知道其他人是如何处理的。我知道这不是一门精确的科学,但我仍然需要最好的方法。

我们完全可以控制渲染/布局引擎——它总是与ie8兼容,所以不需要考虑不同的浏览器。

这些是我的想法,很想听听你的:

  1. 这是我们目前的方法,为每页分配一定数量的行数(根据字体大小和字体变化,以允许不同的地区),每个内容块将被计算为n行成本,这个数字用于计算分页符

亲简单

不准确的是,我们的字体都不是单空格的,需要为每个区域设置配置。

  1. 使用html 2 bmp解决方案捕获图像并使用渲染图像的高度(边缘检测和裁剪,如果需要)来计算所需的页数,将每个连续的自由流内容页面渲染到一个页面宽度(固定div)的div中,使其流到所需的任何垂直高度

如果自由流内容保持连续,Pro可能是准确的,不会太贵。

Con不完整的解决方案,一旦我知道所需的页数,我如何知道在哪里破坏html?使用这种方法和边缘检测来测量每个页面将是非常昂贵的。

  1. 在逐个字体的基础上,提前了解字体大小、文本和标题的填充和边距,使用从字体文件中提取的宽度数据计算宽度、换行符和高度,逐个字符进行字符排序

Pro一旦提取了所有数据,并为HTML呈现的差异添加了边距,这可能相当准确。

Con高度复杂,对样式表变化敏感。

  1. 我们可以使用WebBrowserControl以某种方式测量内容吗

喜欢听你的想法和建议。

编辑。。。。

我们的pdf转换器是Winnovive,它在.net Windows服务中运行,但我们的html提要是用PHP生成的。

请参阅手册http://www.winnovative-software.com/manual%5CHTML%20to%20PDF%20Converter%20for%20.NET%20-%20开发人员%27s%20Manual.htm

第5.1点。希望这个解决方案能帮助你。

注意:内部链接不起作用,请手动导航到所需的点。

这个问题很老,但我正在做和你一样的基本事情。我发现行号计数仍然很重要,但您可以使用css样式的行高来标准化每行的大小。(如果html是基于表的,则tr的高度)。这样可以使每页的行数保持不变。

你有没有想出一个对你有效的解决方案?