未找到 PDF header 签名
PDF header signature not found
我有下面的 iText
pdf 创建代码,基本上我需要 PdfStamper
在我的代码的后面部分来呈现 html 内容但是它抛出异常 InvalidPdfException
而创建 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();
}
你有两个问题:
问题一:
PdfReader
只能读取真正的PDF文件。这些是以 %PDF-1
开头并以 %%EOF
结尾的文件。在您的情况下,您没有这样的文件。您正在阅读 TEMP_PDF
,这是一个 0 字节的文件。在 iText 中,您可以通过 5 个步骤创建 PDF 文件。您只有创建过程的第 1 步(创建文档)和第 2 步(创建编写器)。您缺少第 3 步(打开文档)、第 4 步(添加内容)和第 5 步(关闭文档)。
您在第 5 步之后只有一个完整的 PDF 文档。您得到 InvalidPdfException
是正常的,因为您没有阅读完整的 PDF。
问题二:
你写道:我需要 PdfStamper
在我后面的代码中呈现 HTML 内容。
这是错误的。 PdfStamper
是一个 class,可用于在现有 PDF 文档上标记新内容(水印、表单字段值、页眉、页脚)。 PdfStamper
绝不会将 PDF 转换为 HTML 或将 PDF 呈现为 HTML.
我有下面的 iText
pdf 创建代码,基本上我需要 PdfStamper
在我的代码的后面部分来呈现 html 内容但是它抛出异常 InvalidPdfException
而创建 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();
}
你有两个问题:
问题一:
PdfReader
只能读取真正的PDF文件。这些是以 %PDF-1
开头并以 %%EOF
结尾的文件。在您的情况下,您没有这样的文件。您正在阅读 TEMP_PDF
,这是一个 0 字节的文件。在 iText 中,您可以通过 5 个步骤创建 PDF 文件。您只有创建过程的第 1 步(创建文档)和第 2 步(创建编写器)。您缺少第 3 步(打开文档)、第 4 步(添加内容)和第 5 步(关闭文档)。
您在第 5 步之后只有一个完整的 PDF 文档。您得到 InvalidPdfException
是正常的,因为您没有阅读完整的 PDF。
问题二:
你写道:我需要 PdfStamper
在我后面的代码中呈现 HTML 内容。
这是错误的。 PdfStamper
是一个 class,可用于在现有 PDF 文档上标记新内容(水印、表单字段值、页眉、页脚)。 PdfStamper
绝不会将 PDF 转换为 HTML 或将 PDF 呈现为 HTML.