我的iText
pdf创建代码低于PdfStamper
,我在后面的代码中需要InvalidPdfException
才能呈现html内容,但在创建PdfStamper
时会抛出异常public static void main(String[] args) throws IOException, DocumentException {
String TEMP_PDF = "temp.pdf";
String RESULT = "output1.pdf";
OutputStream osTemp = null;
OutputStream osResult = null;
PdfWriter writer = null;
PdfReader reader=null;
PdfStamper stamper=null;
Document document = new Document(PageSize.LETTER);
try {
osTemp = new FileOutputStream(TEMP_PDF);
osResult = new FileOutputStream(RESULT);
writer = PdfWriter.getInstance(document, osTemp);
reader = new PdfReader(TEMP_PDF);
stamper = new PdfStamper(reader, osResult);
} catch (Exception e) {
e.printStackTrace();
} finally {
osTemp.close();
osResult.close();
writer.close();
reader.close();
stamper.close();
}
}
:
public void createPdf(String file) throws DocumentException, IOException {
Document document = new Document(PageSize.LETTER);
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(file));
document.open();
int[] coords = new int[] {1, 50, 50, 100, 100} ;
PdfContentByte canvas = pdfWriter.getDirectContent();
ColumnText columnText = new ColumnText(canvas);
String css = "";
//llx, lly, urx, ury
columnText.setSimpleColumn(coords[1], coords[2], coords[3], coords[4]);
ElementList elements = XMLWorkerHelper.parseToElementList("<html><body><b>Bold text</b></body></html>", css);
for (Element element : elements) {
columnText.addElement(element);
}
columnText.go();
document.close();
}
修改
undefined_function
答案 0 :(得分:5)
你有两个问题:
问题1:
PdfReader
只能读取真实的PDF文件。这些文件以%PDF-1
开头,以%%EOF
结尾。在您的情况下,您没有这样的文件。您正在阅读TEMP_PDF
,这是一个0字节的文件。在iText中,您可以分5步创建PDF文件。您只有创建过程的第1步(创建文档)和第2步(创建编写器)。您缺少步骤3(打开文档),4(添加内容)和5(关闭文档)。
在第5步之后,您只有一份完整的PDF文档。由于您没有阅读完整的PDF,因此获得InvalidPdfException
是正常的。
问题2:
您写道:我在后面的代码中需要PdfStamper
来呈现HTML内容。
这是错误的。 PdfStamper
是一个类,可用于在现有PDF文档上标记新内容(水印,表单字段值,页眉,页脚)。绝不会PdfStamper
将PDF转换为HTML或将PDF呈现为HTML。