1

プロジェクトにiTextを使用しています。私のプログラムはブラウザ内から実行することになっていますが、htmlファイルをpdfファイルに変換するために必要です。NetBeansからプログラムを実行すると、すべてが正常に機能します。jarに署名し、ブラウザでアプレットを実行すると、次のエラーが発生します。

Errorjava.security.AccessControlException: access denied ("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ファイルが実際に作成されますが、破損していて開くことができません。よろしくお願いします。

4

1 に答える 1

0

まず、あなたの質問に次のエラーが表示されます。

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

ファイルシステムにアクセスするには、アプレットに署名する必要があります。このリンクこれも参照してください。

次に、次のコードを試しました。

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 スタンドアロンであることです。

よろしく

于 2012-07-25T12:29:46.427 に答える