栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从JasperReports打印PDF

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从JasperReports打印PDF

我希望它以PDF格式发送到打印机。 我不在乎在屏幕上看到它,直接到达打印机将是理想的选择

您不能使用纯HTML / CSS / JS来实现。由于JSF基本上只是HTML / CSS /
JS代码生成器,因此它无法为您做任何魔术。您能获得的最接近的是Javascript的

window.print()
,但仍会向用户显示打印机设置等(基本上,它的作用与相同
Ctrl+P
)。

最好的选择是创建一个使用该API的Applet,然后通过HTML
或标签将该Applet嵌入到您的JSF页面中。

javax.print
<applet>``<object>

如果您 可以 直接在屏幕上看到它并将打印作业委托给最终用户自己,那么可以通过JSF将PDF文件发送到屏幕,如下所示:

public void sendPdf() throws IOException {    FacesContext facesContext = FacesContext.getCurrentInstance();    ExternalContext externalContext = facesContext.getExternalContext();    externalContext.setResponseContentType("application/pdf");    externalContext.setResponseHeader("Content-Disposition", "inline; filename="filename.pdf"");    yourJasperReportsClass.writePdfTo(externalContext.getResponseOutputStream());    facesContext.responseComplete();}

我从未使用过JasperReports,所以这

yourJasperReportsClass.writePdfTo()
只是一个随机的猜测,但提示应该足够清楚。基本上,您需要指示它将PDF写入响应正文。


更新
:根据注释,该打印机实际上是连接到服务器而不是客户端,并且您实际上是想让服务器将其打印到其打印机。在这种情况下,只要使用的

javax.print
API。在该文档的底部,您可以找到一些代码示例。这是相关的摘录:

使用API

使用Java Print Service API的典型应用程序执行以下步骤来处理打印请求:

  • 选择一个DocFlavor。
  • 创建一组属性。
  • 找到可以处理DocFlavor和属性集指定的打印请求的打印服务。
  • 创建一个封装DocFlavor和实际打印数据的Doc对象,该对象可以采用多种形式,包括:Postscript文件,JPEG图像,URL或纯文本。
  • 从打印服务获取由DocPrintJob表示的打印作业。
  • 调用打印作业的打印方法。

下面的代码示例演示了Java Print Service
API的典型用法:查找可以在A4尺寸的纸张上打印Postscript文档的五个双面副本的打印机,从返回的打印服务之一创建打印作业,并调用print。

FileInputStream psStream;try {  psStream = new FileInputStream("file.ps");} catch (FileNotFoundException ffne) {}if (psStream == null) {  return;}DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTscript;Doc myDoc = new SimpleDoc(psStream, psInFormat, null);PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();aset.add(new Copies(5));aset.add(MediaSize.A4);aset.add(Sides.DUPLEX);PrintService[] services =

PrintServiceLookup.lookupPrintServices(psInFormat, aset); >
if (services.length > 0) {
DocPrintJob job = services[0].createPrintJob();

  try {    job.print(myDoc, aset);  } catch (PrintException pe) {  }}

如果上述代码由JSF托管bean调用,则无关紧要。毕竟只是Java。您可能只想修改

DocFlavor
和其他设置。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428145.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号