使用JApplet中的iText将html文件转换为pdf

使用JApplet中的iText将html文件转换为pdf

问题描述:

我正在使用iText作为项目。我的程序应该从浏览器内运行,我需要它将html文件转换为pdf文件。当我从NetBeans运行程序时,一切正常。我签我的罐子并运行在浏览器中的Applet,然后我得到这个错误:使用JApplet中的iText将html文件转换为pdf

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文件实际上是创建的,但已损坏,我无法打开它。在此先感谢您的时间。

+0

您需要行pdfDocument.close()之前的行pdf.close()。 Regards – esmoreno 2012-07-25 10:18:34

+0

感谢您的回答,但NetBeans对行“pdf.close()”表示“找不到符号” – user1550832 2012-07-25 11:22:39

首先,我看到你的问题这个错误:

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独立。

Regards

+0

谢谢,但是我已经自己找到了这些指令并且遵循了他们,但是我的问题依然存在。我必须补充说,距离我遇到这个问题差不多一周了,我真的尝试了所有最明显的解决方案。我签署了我的jar,但它仍然引发我的例外。 – user1550832 2012-07-25 12:59:52

+0

我相信你不关闭FileWriter。试试fw.close()。有可能您的PDF现在大小为零或未关闭。问候 – esmoreno 2012-07-26 06:05:07

+0

其实FileWriter从来没有使用过,我可能以前曾经使用它,忘记删除它。无论如何,我完全删除了FileWrtiter,但仍然得到相同的错误。 – user1550832 2012-07-26 07:04:23