Reputation: 101
I am having problems with creating a PDF using the simple example found here. It is my first time trying to use it and I have tried a few things and lots of searching but haven't found a reason why the error is generating. The error originates on the renderer.setDocument(url);
line. If anyone has any ideas, suggestions or alternatives it would be greatly appreciated.
package flyingsaucerpdf;
import java.io.*;
import com.lowagie.text.DocumentException;
import org.xhtmlrenderer.pdf.ITextRenderer;
public class FirstDoc {
public static void main(String[] args)
throws IOException, DocumentException {
String inputFile = "samples/firstdoc.xhtml";
String url = new File(inputFile).toURI().toURL().toString();
String outputFile = "firstdoc.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os);
os.close();
}
}
Console prints out the error below.
ERROR: 'Stream closed'
org.xhtmlrenderer.util.XRRuntimeException: Can't load the XML resource (using TRaX transformer). java.io.IOException: Stream closed
at org.xhtmlrenderer.resource.XMLResource$XMLResourceBuilder.createXMLResource(XMLResource.java:191)
at org.xhtmlrenderer.resource.XMLResource.load(XMLResource.java:71)
at org.xhtmlrenderer.swing.NaiveUserAgent.getXMLResource(NaiveUserAgent.java:211)
at org.xhtmlrenderer.pdf.ITextRenderer.loadDocument(ITextRenderer.java:134)
at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:138)
at com.asiaprice.service.email.template.CompletePdf.createpdf(CompletePdf.java:28)
Upvotes: 9
Views: 14923
Reputation: 517
renderer.setDocument can throw a “Stream closed” exception if the xhtml references a file that the renderer can't find, such as a css file.
The symptoms of this don't exactly match the original posters, as "Can't load the XML resource" doesn't appear in the error message, I am including this for the benefit of those who come here via google.
Upvotes: 11
Reputation: 11
String File_To_Convert = "src/file.html";
String url = new File(File_To_Convert).toURI().toURL().toString();
//System.out.println("---"+url);
String HTML_TO_PDF = "ConvertedFile.pdf";
OutputStream os = new FileOutputStream(HTML_TO_PDF);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os) ;
os.close();
System.out.println("done.");
This is code which is working fine.
Most of the people getting the above problem @ my code.
File_To_Convert = "src/file.html";
Here we have to give the relative path.
Upvotes: 1
Reputation: 22899
What actually is happening here is the setDocument(...)
call executes and renderer
can't open an InputStream
(usually because either the file doesn't exist or there are insufficient privileges to access it). The fix would be to replace that reference with a File
or a live URL that the app can hit.
Upvotes: 0
Reputation: 27390
I solved this issue simply replacing
renderer.setDocument(url);
with
renderer.setDocument(new File(inputFile));
Upvotes: 1
Reputation: 8024
Is "samples/firstdoc.xhtml" the file from the tutorial? Is it in the right directory and accessible? XHTMLRenderer only accepts clean XHTML code and is very strict. If something is wrong you will get an exception.
In some of my projects I'm using JTidy to clean up the source before rendering.
Upvotes: 0