Eclipse Can';t从xhtml生成pdf(xhtmlrenderer-1.0.0.jar)
我想用一个命令按钮从xhtml页面生成一个pdf,但结果是浏览器中出现一个黑色的空白页面,我在网上搜索过,但没有找到像我这样的页面。 我正在使用:xhtmlrenderer-1.0.0.jar-Maven projet PrintBean.javaEclipse Can';t从xhtml生成pdf(xhtmlrenderer-1.0.0.jar),eclipse,maven,jsf,primefaces,itext,Eclipse,Maven,Jsf,Primefaces,Itext,我想用一个命令按钮从xhtml页面生成一个pdf,但结果是浏览器中出现一个黑色的空白页面,我在网上搜索过,但没有找到像我这样的页面。 我正在使用:xhtmlrenderer-1.0.0.jar-Maven projet PrintBean.java package com.ismo.gestionabsence.presentation; import java.io.File; import java.io.OutputStream; import java.io.Serializa
package com.ismo.gestionabsence.presentation;
import java.io.File;
import java.io.OutputStream;
import java.io.Serializable;
import java.net.URL;
import java.util.Date;
import javax.annotation.PostConstruct;
//import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.docx4j.org.xhtmlrenderer.pdf.ITextRenderer;
@ManagedBean(name = "printBean")
@SessionScoped
public class PrintBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int code;
private String client;
public PrintBean()
{}
@PostConstruct
public void init()
{
code=1;
client="teste de client;";
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getClient() {
return client;
}
public void setClient(String client) {
this.client = client;
}
public void createPDF() {
System.out.println("in");
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpSession session = (HttpSession) externalContext.getSession(true);
String url = "http://localhost:8080/simple-webapp/faces/print.xhtml;jsessionid="+session.getId()+"?pdf=true";
System.out.println("url");
try {
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(new URL(url).toString());
// renderer.setDocument(new File(url));
renderer.layout();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
response.reset();
response.setContentType("application/pdf");
response.setHeader("content-Disposition", "inline: filename=\"facture.pdf\"");
OutputStream outputStream = response.getOutputStream();
renderer.createPDF(outputStream);
} catch (Exception e) {
e.printStackTrace();
}
facesContext.responseComplete();
}
public void test()
{System.out.println("test");}
}
test.xhtml
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:b="http://bootsfaces.net/ui"
>
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>test</title>
</h:head>
<h:body>
<h:form id="form" >
button <h:commandButton value="print" action="#{printBean.createPDF}"></h:commandButton>
</h:form>
</html>
如果有人能解释如何解决这个问题,我将不胜感激!!
你好,请原谅我的英语!!
一幅图像进一步解释了这种情况:这不是您使用iText开具发票的方式。飞碟不支持PDF/A、可访问性,。。。阅读以了解如何使用iText。如果有人已经完成了从A到Z的所有工作,你为什么要重新发明轮子?@BrunoLowagie:为了节省成本?客户希望支付越来越少的费用,并能够提供可行的服务,成本必须低。几年前,我们要求报价(顺便说一句,pdfHTML还没有提供),我们必须支付的每PDF的价格简直太高了。当时没有商业案例。对我来说(实际上没有PDF/A),使用旧iText的XHTMLender在技术上仍然可以正常工作。@Kukeltje如果你想要永久许可证,低容量的成本很高。如果您按次使用付费,则每个文档的成本为美分。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<head>
<meta charset="UTF-8" />
<title>Facture </title>
<link
href="css/facture.css" rel="stylesheet" type="text/css" />
</head>
<body>
<header>
<h1>
FACTURE
</h1>
<h3>Facture</h3>
</header>
<table>
<thead>
<tr>
<th>Client</th>
</tr>
</thead>
<tbody>
<tr>
<td><h:outputText value="CodeL : #{printBean.code}"></h:outputText></td>
<td><h:outputText value="#{printBean.client}"></h:outputText></td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="3"></td>
<td>Total: </td>
</tr>
</tfoot>
</table>
<footer>
<p>
Faculté des Sciences <a rel="nofollow"
href="mailto:vdap.vv@gmail.com">Courriel: vdap.vv@gmail.com </a>
</p>
</footer>
</body>
</html>
WARNING: Flying Saucer: No configuration files found in classpath using URL: xhtmlrenderer.conf, resorting to hard-coded fallback properties.
java.io.IOException: Stream closed
at java.io.BufferedInputStream.getInIfOpen(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at org.docx4j.org.xhtmlrenderer.css.parser.Lexer.zzRefill(Lexer.java:1634)
at org.docx4j.org.xhtmlrenderer.css.parser.Lexer.yylex(Lexer.java:1865)
at org.docx4j.org.xhtmlrenderer.css.parser.CSSParser.next(CSSParser.java:1807)
at org.docx4j.org.xhtmlrenderer.css.parser.CSSParser.la(CSSParser.java:1819)
at org.docx4j.org.xhtmlrenderer.css.parser.CSSParser.stylesheet(CSSParser.java:159)
at org.docx4j.org.xhtmlrenderer.css.parser.CSSParser.parseStylesheet(CSSParser.java:89)
at org.docx4j.org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:78)
at org.docx4j.org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:95)
at org.docx4j.org.xhtmlrenderer.context.StylesheetFactoryImpl.getStylesheet(StylesheetFactoryImpl.java:174)
at org.docx4j.org.xhtmlrenderer.context.StyleReference.readAndParseAll(StyleReference.java:123)
at org.docx4j.org.xhtmlrenderer.context.StyleReference.setDocumentContext(StyleReference.java:107)
at org.docx4j.org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:182)
at org.docx4j.org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:145)
at org.docx4j.org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:141)
at com.ismo.gestionabsence.presentation.PrintBean.createPDF(PrintBean.java:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)