我必须在我的项目中生成并下载PDF报告。我已经使用了iText-5.5.13和JBoss Web服务器。我已经更新了代码,就像之前提到的那样,它会生成PDF文件并保存在上述位置,但是在尝试打开它时出现文件格式错误。
public class CreatePDFReport {
try {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("c:/Users/divya/Desktop/"+empCode+".pdf"));
PdfReader reader = new PdfReader("c:/Users/divya/Desktop/"+empCode+".pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("c:/Users/divya/Desktop/"+empCode+".pdf"));
AcroFields form = stamper.getAcroFields();
stamper.close();
//document.close();
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + "c:/Users/divya/Desktop/"+empCode+".pdf");
} catch (Exception ex) {
ex.printStackTrace();
}
}
这是我现在在服务器日志中遇到的错误。
17:06:13,473 ERROR [stderr] (http-0.0.0.0:80-1) com.itextpdf.text.exceptions.InvalidPdfException: PDF header signature not found.
解决方案 该报告正在生成,并且也可以打开以将数据添加到pdf中,我们真的不需要使用压模,我们可以通过使用document.add();添加数据。另外,打开和关闭文档也很重要。
public class CreatePDFReport {
try {
Document document = new Document(PageSize.A4);
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("c:/Users/divya/Desktop/"+empCode+".pdf"));
document.open();
int[] coords = new int[] {1, 50, 50, 100, 100} ;
PdfContentByte canvas = pdfWriter.getDirectContent();
document.add(new Paragraph("Hello"));
document.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}