我正在使用 CSSBox 呈现网页 HTML 和 CSS,然后打印它。应用程序必须处理特定站点。这个想法是让一些不是设计为可打印的网站实际打印并看起来可读。这是通过删除菜单、标题等来实现的。将内容居中,覆盖某些样式。
我目前的方法是将网站呈现给一个组件,该组件是 CSSBox API 的一部分,称为 BrowserCanvas。我为每个受支持的站点调整 Canvas 的宽度,以确保段落在每种情况下看起来都不错。此 BrowserCanvas 派生自 JPanel,并具有我用来将其呈现给打印机 Graphics 对象的绘制方法。
问题是打印机 Canvas 通常很大,比如 300 ppp、600 ppp 等。我现在所做的是设置一个 RenderingHints 以强制双三次插值来缩放文档以填充打印页面中的所有空间.
问题是您可以看到文档就像放大的屏幕截图,在打印页面上看起来不太好。
有没有更好的方法?
打印方式
打印机的访问权限由 PrinterJob 类获得。
然后我覆盖接受页码的 BrowserCanvas 打印方法。根据该数字,我在图形对象上设置比例和平移,注意如果最后一行文本不能完全适合页面,则将其移至下一页。然后我调用 super.print() 作为参数传递应用了所有缩放和平移的图形对象。
我认为缩放会很柔和,就像在更高的分辨率下做所有事情一样,比如字体大小,但它看起来更像是在基本分辨率下绘制所有内容,然后将结果放大到所需的分辨率。
修改页面示例(使用 CSSBox 文档站点进行测试):
第 1 页
第 2 页
最佳答案
我相信您可以尝试呈现一个新的可打印网页。由于您正在覆盖样式,因此您可以添加新的媒体查询或打印样式表,如下所示:
@media print {
/* All your print styles go here */
#header, #footer, #nav { display: none !important; }
}
或者,用老方法:
<link href="/print.css" rel="stylesheet" media="print" type="text/css" />
然后您可以从操作系统的任何浏览器使用打印对话框
关于Java - 如何在打印时改进渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27726719/