【发布时间】:2009-10-29 01:23:20
【问题描述】:
我正在开发一个计费程序 - 现在,当您单击相应的按钮时,它会生成一个显示各种费用等的框架,基本上是一张发票。有没有办法让用户选择将该框架保存为文档,Microsoft Word、Microsoft Works 或 PDF?
【问题讨论】:
我正在开发一个计费程序 - 现在,当您单击相应的按钮时,它会生成一个显示各种费用等的框架,基本上是一张发票。有没有办法让用户选择将该框架保存为文档,Microsoft Word、Microsoft Works 或 PDF?
【问题讨论】:
一种方法是将帧保存为图像,您可以使用以下语法将其转换为图像。
BufferedImage myImage = new BufferedImage(size.width,size.height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = myImage.createGraphics();
myComponent.paint(g2);
然后您可以保存此图像并将其传递到 jasper 报告中。然后,您可以从 JasperPrint 对象以几种不同的格式保存,包括 pdf。更好但类似的方法是将 Graphics 上下文传递给 JasperReports(在 jasper 中有一个渲染器可以做到这一点,而且质量要好得多)。
【讨论】:
BufferedImage 中绘制JFrame。 paint()JFrame的方法
【讨论】:
与其生成word文档,我更愿意使用iText这样的Java库来生成PDF文档(更便携),或者更好的是JasperReport报告库,可以输出范围广泛的报告bigbrother82 在评论中建议的格式(PDF、XML、HTML、CSV、XLS、RTF、TXT)。在我看来,这比使用图像更清晰,尤其是在打印时(更不用说您的发票可能是多页文档)。
【讨论】:
我可能会从稍微不同的方向来看待这个问题,而不是询问如何将 GUI 表单按原样转换为 PDF 或 word 文档,而是询问如何将该内容转换为 Word/PDF 文档。
这个问题的答案是Apache FOP。生成XSL-FO 文件并要求 FOP 将其转换为 RTF 文档(扩展名为 .DOC)或 PDF。
通常通过生成包含您需要打印的数据的XML 文件来完成此操作。然后使用XSLT 将该XML 转换为XSL-FO。然而,我发现直接使用模板语言(例如Freemarker)生成 XSL-FO 文件更容易。
【讨论】:
您可能希望查看Docmosis 的在线演示作为示例,它为用户提供了预先请求文档的选项。该演示会进行下载,但它可以将文档定向到框架中,并将其留给浏览器显示。这种工作方式(正如其他人所提到的)是从不同的角度看待问题并预先决定什么格式,而不是事后然后尝试保存框架内容。
【讨论】: