Java 找不到PDF标头签名
我有下面的Java 找不到PDF标头签名,java,itext,Java,Itext,我有下面的iTextpdf创建代码,基本上我需要PdfStamper在代码的后面部分来呈现html内容,但是它在创建PdfStamper时抛出异常InvalidPdfException: public static void main(String[] args) throws IOException, DocumentException { String TEMP_PDF = "temp.pdf"; String RESULT = "output1.pdf";
iText
pdf创建代码,基本上我需要PdfStamper
在代码的后面部分来呈现html内容,但是它在创建PdfStamper
时抛出异常InvalidPdfException
:
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();
}
public void createPdf(字符串文件)抛出DocumentException,IOException{
文档=新文档(页面大小.字母);
PdfWriter PdfWriter=PdfWriter.getInstance(文档,新文件输出流(文件));
document.open();
int[]coords=newint[]{1,50,50,100,100};
PdfContentByte canvas=pdfWriter.getDirectContent();
ColumnText ColumnText=新的ColumnText(画布);
字符串css=“”;
//llx,lly,urx,ury
columnText.setSimpleColumn(coords[1],coords[2],coords[3],coords[4]);
ElementList elements=XMLWorkerHelper.parseToElementList(“粗体文本”,css);
for(元素:元素){
columnText.addElement(元素);
}
columnText.go();
document.close();
}
您有两个问题:
问题1:
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\u PDF
,这是一个0字节的文件。在iText中,您可以分5步创建PDF文件。您只有创建过程的步骤1(创建文档)和步骤2(创建编写器)。您缺少步骤3(打开文档)、步骤4(添加内容)和步骤5(关闭文档)
在第5步之后,您只有一个完整的PDF文档。当您没有阅读完整的PDF时,您会得到一个invalidPDException
,这是正常的
问题2:
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();
}
您可以这样写:我需要PdfStamper
在代码的后面部分中呈现HTML内容
这是错误的
PdfStamper
是一个可用于在现有PDF文档上标记新内容(水印、表单字段值、页眉、页脚)的类。PdfStamper
绝不会将PDF转换为HTML或将PDF呈现为HTML。可能重复感谢您的回复。我遵循了5个步骤,然后使用了PdfStamper
。很抱歉对问题2产生误解,实际上我提到的是OK,还有一件事:如果你用5个步骤创建PDF。为什么您仍然需要PdfStamper
?在创建文档时,您不能在步骤4中使用PdfStamper
添加要添加的内容吗?答案可以是“不”:你需要两个通行证可能有原因。我只是好奇。我想你是对的,你只是在解决我的问题:)我已经更新了我的问题,请看一下。它在不创建PdfStamper的情况下运行良好,这是一个良好的开端。但是,您需要查看更多的ColumnText
示例。现在,所有不适合页面的内容都将丢失。您需要检查go()
方法的返回值,并在必要时创建一个新页面。如果您根本不使用ColumnText
,而是使用document.add()
将元素添加到document
中,可能会简单得多。