Java - 如何在打印时改善渲染?

时间:2014-12-31 22:02:56

标签: java html css swing printing

我使用CSSBox渲染网页HTML和CSS然后打印它。应用程序必须处理特定站点。我们的想法是使一些设计不可打印的网站实际打印并且看起来可读。这是通过删除菜单,标题等以内容为中心,覆盖某些样式来完成的。

我目前的方法是将网站呈现为一个名为BrowserCanvas的CSSBox API的组件。我为每个支持的站点调整画布的宽度,以确保每种情况下段落看起来都很好。这个BrowserCanvas来自JPanel,它有我用来将它渲染到打印机Graphics对象的绘制方法。

问题是打印机画布通常很大,想想300 ppp,600 ppp等。我现在所做的是设置一个RenderingHints来强制双立方插值来扩展文档以填充文档中的所有空间。打印页面。

问题在于,您可以看到文档就像一个缩放的屏幕截图,在打印页面上看起来不太好。

有更好的方法吗?

打印方法

PrinterJob类可以访问打印机。

然后我覆盖接受页码的BrowserCanvas打印方法。根据该数字,我在图形对象上设置比例和平移,注意如果最后一行文本不能完全适合页面,则将其移动到下一页。然后我调用super.print()作为参数传递应用了所有缩放和平移的图形对象。

我认为缩放会很柔和,比如让所有事情都以更高的分辨率发生,比如字体大小,但看起来更像是在基本分辨率中绘制所有内容,然后将结果升级到所需的分辨率。

修改页面的示例(使用CSSBox文档站点进行测试):

第1页 out-0.png


第2页 out-1.png

1 个答案:

答案 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; } 
}

然后您可以在操作系统的任何浏览器中使用打印对话框