a4j:mediaoutput pdf not rendered
ajanz Feb 2, 2009 6:36 PMi want to display a pdf inside of my jsf page.
i use a4j:mediaoutput for rendering. i tested my code with a jpg an everything was ok. but if i use pdf i only got an image like a broken link,although the pdf is written to the outputstream. i wrote a copy on filesystem which is ok.
here is the code
<?xml version="1.0" encoding="ISO-8859-1"?>
<ui:composition 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://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:s="http://jboss.com/products/seam/taglib">
<h:form id="testpdf" >
<h:outputLabel value="TEST!!!!" for="" />
<a4j:mediaOutput element="pdf" cacheable="false"
createContent="#{PDF.loadPDF}" mimeType="application/pdf" > </a4j:mediaOutput>
</h:form>
</ui:composition>
java bean
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.log.Log;
import org.jboss.seam.log.Logging;
@Name("PDF")
@Scope(ScopeType.SESSION)
public class PDFBean {
private static final Log log = Logging.getLog(PDFBean.class.getName());
public void loadPDFFehler(OutputStream out, Object data) throws IOException{
log.debug("Calling loadPDF.........................................................................................");
try {
/*if (null == data) {
log.debug("Data is null................................................");
return;
}*/
//if (data instanceof PDFDoc) {
// PDFDoc pdfdata = (PDFDoc) data;
//File aFile = new File("D:\\Bild0710.jpg");
File aFile = new File("D:\\test.pdf");
log.debug("reading " + aFile.getAbsolutePath());
FileInputStream inFile = null;
try {
inFile = new FileInputStream(aFile);
} catch (FileNotFoundException e) {
e.printStackTrace(System.err);
}
FileChannel inChannel = inFile.getChannel();
final int PRIMECOUNT = 6;
ByteBuffer buf = ByteBuffer.allocate(8 * PRIMECOUNT);
long[] primes = new long[PRIMECOUNT];
try {
while (inChannel.read(buf) != -1) {
((ByteBuffer) (buf.flip())).asLongBuffer().get(primes);
out.write(buf.array());
buf.clear();
}
inFile.close();
} catch (IOException e) {
e.printStackTrace(System.err);
}
//}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
log.debug("end loadPDF...................................................................................");
}
public void loadPDF(OutputStream out, Object data) throws IOException{
FileInputStream fis = new FileInputStream("d:\\test.pdf");
FileOutputStream fout = new FileOutputStream("d:\\test1.pdf");
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
int counter = 0;
boolean end =false;
byte[] buffer =new byte[1024*10124];
while (!end) {
try{
int bytes = dis.read(buffer);
System.out.println("bytes read=" + bytes );
if ( bytes > 0 ) {
out.write(buffer,0,bytes);
fout.write(buffer,0,bytes);
}
else {
end = true;
out.flush();
out.close();
fout.close();
}
}catch (Exception ex) {
ex.printStackTrace();
end = true;
}
}
dis.close();
bis.close();
fis.close();
}
}
what am i doing wrong?