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

标签 java html css swing printing

我正在使用 CSSBox 呈现网页 HTML 和 CSS,然后打印它。应用程序必须处理特定站点。这个想法是让一些不是设计为可打印的网站实际打印并看起来可读。这是通过删除菜单、标题等来实现的。将内容居中,覆盖某些样式。

我目前的方法是将网站呈现给一个组件,该组件是 CSSBox API 的一部分,称为 BrowserCanvas。我为每个受支持的站点调整 Canvas 的宽度,以确保段落在每种情况下看起来都不错。此 BrowserCanvas 派生自 JPanel,并具有我用来将其呈现给打印机 Graphics 对象的绘制方法。

问题是打印机 Canvas 通常很大,比如 300 ppp、600 ppp 等。我现在所做的是设置一个 RenderingHints 以强制双三次插值来缩放文档以填充打印页面中的所有空间.

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

有没有更好的方法?

打印方式

打印机的访问权限由 PrinterJob 类获得。

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

我认为缩放会很柔和,就像在更高的分辨率下做所有事情一样,比如字体大小,但它看起来更像是在基本分辨率下绘制所有内容,然后将结果放大到所需的分辨率。

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

第 1 页 out-0.png


第 2 页 out-1.png

最佳答案

我相信您可以尝试呈现一个新的可打印网页。由于您正在覆盖样式,因此您可以添加新的媒体查询或打印样式表,如下所示:

@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/

相关文章:

java - boolean 表达式编译错误

java - 如何使用 Stripes Framework 删除文件后缀/扩展名(.jsp 和 .action)?

javascript - 更改 "speed"几秒钟

javascript - 在两个 HTML 和 PHP 之间交换变量

java - 12.10 无法安装 eclipse

java - 使用 2 个下拉框在 wicket 中过滤 ListView

javascript - WebRTC鼠标指针

html - 导航栏背景图像仍然被背景颜色覆盖

javascript - 如何在过滤列表中使用第 nth-child?

html - 如何在 bootstrap 3 中打破列