我使用CSSBox渲染网页HTML和CSS然后打印它。应用程序必须处理特定站点。我们的想法是使一些设计不可打印的网站实际打印并且看起来可读。这是通过删除菜单,标题等以内容为中心,覆盖某些样式来完成的。
我目前的方法是将网站呈现为一个名为BrowserCanvas的CSSBox API的组件。我为每个支持的站点调整画布的宽度,以确保每种情况下段落看起来都很好。这个BrowserCanvas来自JPanel,它有我用来将它渲染到打印机Graphics对象的绘制方法。
问题是打印机画布通常很大,想想300 ppp,600 ppp等。我现在所做的是设置一个RenderingHints来强制双立方插值来扩展文档以填充文档中的所有空间。打印页面。
问题在于,您可以看到文档就像一个缩放的屏幕截图,在打印页面上看起来不太好。
有更好的方法吗?
打印方法
PrinterJob类可以访问打印机。
然后我覆盖接受页码的BrowserCanvas打印方法。根据该数字,我在图形对象上设置比例和平移,注意如果最后一行文本不能完全适合页面,则将其移动到下一页。然后我调用super.print()作为参数传递应用了所有缩放和平移的图形对象。
我认为缩放会很柔和,比如让所有事情都以更高的分辨率发生,比如字体大小,但看起来更像是在基本分辨率中绘制所有内容,然后将结果升级到所需的分辨率。
修改页面的示例(使用CSSBox文档站点进行测试):
第1页
第2页
答案 0 :(得分:1)
我相信您可以尝试渲染一个新的可打印网页。因为您要覆盖样式,也许您可以添加新的媒体查询或这样的打印样式表:
Parallel.For(0, pageStructureObjects.Count, i =>
{
// call method to calculate each page here ....
// results returned by delegate to
// ReportPageObjectCalculatedHandler mehtod
});
或者,旧的方式:
@media print {
/* All your print styles go here */
#header, #footer, #nav { display: none !important; }
}
然后您可以在操作系统的任何浏览器中使用打印对话框