未找到 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.