java - 在 JApplet 中使用 iText 将 html 文件转换为 pdf

标签 java pdf itext

我正在一个项目中使用 iText。我的程序应该从浏览器内部运行,我需要它将 html 文件转换为 pdf 文件。当我从 NetBeans 运行该程序时,一切正常。我对 jar 进行签名并在浏览器中运行 Applet,然后收到此错误:

Errorjava.security.AccessControlException:访问被拒绝(“java.lang.RuntimePermission”“getenv.windir”)

为了这篇文章的目的,我编写了一个简单的 JApplet 代码,它也有同样的问题:

public class RunApplet extends JApplet {

    @Override
    public void init() {
        this.add(new JLabel("This is a labe"));
        File f = new File("C:/ReportGen/data.html");
        File pdf = new File("C:/ReportGen/data.pdf");

        try {
            pdf.createNewFile();
            Document pdfDocument = new Document();
            PdfWriter writer = PdfWriter.getInstance(pdfDocument, new FileOutputStream(pdf));
            pdfDocument.open();

            XMLWorkerHelper worker = XMLWorkerHelper.getInstance();

            FontFactoryImp imp = new FontFactoryImp();
            imp.getFont("Arial");
            FontFactory.setFontImp(imp);

            worker.parseXHtml(writer, pdfDocument, new FileInputStream(f));

            pdfDocument.close();
            writer.close();
            this.add(new JLabel(f.getAbsolutePath()));

        } catch (Exception ex) {
            this.add(new JTextField("Error"+ex));
        }                       
    }
}

html 文件已创建并且正常,但是当我创建 pdf 文件时出现异常,并且 pdf 文件实际上已创建,但已损坏,我无法打开它。预先感谢您的宝贵时间。

最佳答案

首先,我在您的问题中看到此错误:

Errorjava.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getenv.windir")

您需要签署您的小程序才能访问您的文件系统。看这个linkthis也是。

其次,我尝试过以下代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;

public class main {

    public static void main(String[] args) {
        File f = new File("C:/tmp/data.htm");

        File pdf = new File("C:/tmp/data.pdf");
        Document pdfDocument = null;
        PdfWriter pdfWriter = null;
        try {

            pdfDocument = new Document();
            pdfWriter = PdfWriter.getInstance(pdfDocument, new FileOutputStream(pdf));
            pdfDocument.open();

            XMLWorkerHelper.getInstance().parseXHtml(pdfWriter, pdfDocument,
                    new FileInputStream(f));
            pdfDocument.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
}

如果文件 data.htm(原始数据)是 htmlx,则工作正常。但如果 data.htm 不是 xml,我会收到此错误:

com.itextpdf.tool.xml.exceptions.RuntimeWorkerException: Invalid nested tag head found, expected closing tag meta.
    at com.itextpdf.tool.xml.XMLWorker.endElement(XMLWorker.java:134)
    at com.itextpdf.tool.xml.parser.XMLParser.endElement(XMLParser.java:395)
    at com.itextpdf.tool.xml.parser.state.ClosingTagState.process(ClosingTagState.java:70)
    at com.itextpdf.tool.xml.parser.XMLParser.parseWithReader(XMLParser.java:235)
    at com.itextpdf.tool.xml.parser.XMLParser.parse(XMLParser.java:213)
    at com.itextpdf.tool.xml.parser.XMLParser.parse(XMLParser.java:174)
    at com.itextpdf.tool.xml.XMLWorkerHelper.parseXHtml(XMLWorkerHelper.java:220)
    at com.itextpdf.tool.xml.XMLWorkerHelper.parseXHtml(XMLWorkerHelper.java:185)
    at main.main(main.java:44)

您可以尝试使用您的数据和这个示例吗?不同之处在于我的示例不是一个小程序,而是一个 java 独立程序。

问候

关于java - 在 JApplet 中使用 iText 将 html 文件转换为 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11644852/

相关文章:

PDF.js 能够创建 pdf 文件或 PDF.js 只是一个让 PDF 文件显示在网络浏览器上的功能?

java - 仅在第一页上显示使用 itext 生成的 pdf 中的页数

c# - 找到 iTextSharp 对象的页码

c# - 如何使用 C# 从 HTML 转换为 PDF?

Java 本地类和接口(interface)

Java 键绑定(bind)不工作

java - 删除交换后 RabbitTemplate 发送失败

java - 使用 Java 创建 PDF 文件

java - 如何组织游戏代码以适应 MVC 模式?

java - 如何使用 iText 设置表格单元格的背景颜色?