Мне нужно создать и загрузить отчет в формате PDF в моем проекте. Я использовал iText-5.5.13 и веб-сервер JBoss. Я обновил свой код, как я уже упоминал ранее, и он создает файл 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();
}
}