【问题标题】:Itext , pdf created couldn't be openItext,创建的 pdf 无法打开
【发布时间】:2017-09-30 00:47:21
【问题描述】:

我想用 Itext 创建 pdf,在我制作可运行的 jar 之前一切正常。 Adobe 阅读器显示该消息:“Adobe Reader 无法打开 xxx.pdf,因为它不是受支持的文件类型或文件已损坏(例如,它作为电子邮件附件发送且未正确解码)。 "这是我的代码:

    String ruta = txtruta.getText();
    Document doc = new Document();

    try {
        FileOutputStream archivo = new FileOutputStream(ruta + ".pdf"); //crear archivo con su ruta

        doc.open();

        PdfPTable tabla = new PdfPTable(8); //creacion de una tabla de 8 columnas

        tabla.addCell("Celda 1");// addCell() agrega una celda a la tabla, el cambio de fila ocurre automaticamente al llenar la fila
        tabla.addCell("Celda 2");
        tabla.addCell("Celda 3");
        tabla.addCell("Celda 4");
        tabla.addCell("Celda 5");
        tabla.addCell("Celda 6");
        tabla.addCell("Celda 7");
        tabla.addCell("Celda 8");// aca se completa una fila

        doc.add(tabla);

        doc.close();

        JOptionPane.showMessageDialog(null, "PDF creado correctamente");

    } catch (Exception e) {
        System.out.println("Error: "+ e);
    }

【问题讨论】:

    标签: java pdf netbeans itext


    【解决方案1】:

    您的代码中缺少一行:

    String ruta = txtruta.getText();
    Document doc = new Document();
    
    try {
        FileOutputStream archivo = new FileOutputStream(ruta + ".pdf"); //crear archivo con su ruta
        PdfWriter.getInstance(document, archivo);
        doc.open();
    
        PdfPTable tabla = new PdfPTable(8); //creacion de una tabla de 8 columnas
    
        tabla.addCell("Celda 1");// addCell() agrega una celda a la tabla, el cambio de fila ocurre automaticamente al llenar la fila
        tabla.addCell("Celda 2");
        tabla.addCell("Celda 3");
        tabla.addCell("Celda 4");
        tabla.addCell("Celda 5");
        tabla.addCell("Celda 6");
        tabla.addCell("Celda 7");
        tabla.addCell("Celda 8");// aca se completa una fila
    
        doc.add(tabla);
    
        doc.close();
    
        JOptionPane.showMessageDialog(null, "PDF creado correctamente");
    
    } catch (Exception e) {
        System.out.println("Error: "+ e);
    }
    

    你看到了吗?

    如果没有PdfWriter.getInstance(document, archivo);,您将创建一个FileOutputStream,但不会向该流写入任何内容。这是一个 0 字节的文件。

    【讨论】:

    • 这并不能解释 “在我制作可运行的 jar 之前一切正常”,不过...
    • 否 @mkl ,但这是可以根据问题中的信息给出的唯一答案。如果 OP 说:I get a class not found exception, 那么我们可以假设可运行 jar 中的依赖关系不正确(这是问题的最可能原因)。但是,当他写catch (Exception e) 时,OP 正在做一些非常愚蠢的事情; System.out 的输出很可能确实警告他缺少课程,但由于 OP 没有提及任何错误,我们无法对此发表评论。
    • 您好,我也面临同样的问题,Adobe 没有打开 pdf 文件,但这些 pdf 文件在 WPS 和谷歌浏览器中打开。我该如何解决这个问题。谁能帮帮我?
    猜你喜欢
    • 1970-01-01
    • 2016-03-06
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多