也许只要大神几分钟时间,多谢

自己在做一个Html转换为Pdf格式的java实现的程序。不料却老报错,执行不了,希望得到大家的帮助,不尽感谢啊啊啊啊~错误如图。代码如下。(运行环境:Netbeans 6.8,WinXp)

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


import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;


import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;


import org.w3c.tidy.Tidy;
import org.w3c.dom.Document;


import org.apache.fop.apps.Driver;


import org.apache.fop.tools.DocumentInputSource;


import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.logger.Logger;


/*
 *  Class that converts HTML to PDF using
 *  the DOM interfaces of JTidy, Xalan, and FOP.
 *
 *  @author N. Afshartous
 *
 */
public class Html2Pdf {




    public static void main(String[] args) {


// open file
if (args.length!= 2) {
   System.out.println("Usage: Html2Pdf htmlFile styleSheet");
   System.exit(1);
}


FileInputStream input = null;
String htmlFileName = args[0];


try {


input = new FileInputStream(htmlFileName);


}
catch (java.io.FileNotFoundException e) {
System.out.println("File not found: " + htmlFileName);
}


        Tidy tidy = new Tidy();
Document xmlDoc = tidy.parseDOM(input, null);


Document foDoc = xml2FO(xmlDoc, args[1]);


String pdfFileName = htmlFileName.substring(0, htmlFileName.indexOf(".")) + ".pdf";
try {
   OutputStream pdf = new FileOutputStream(new File(pdfFileName));
   pdf.write(fo2PDF(foDoc));
}
catch (java.io.FileNotFoundException e) {
   System.out.println("Error creating PDF: " + pdfFileName);
}
catch (java.io.IOException e) {
   System.out.println("Error writing PDF: " + pdfFileName);
}




    }




    /*
     *  Applies stylesheet to input.
     *
     *  @param xml  The xml input Document
     *
     *  @param stylesheet Name of the stylesheet
     *
     *  @return Document  Result of the transform
     */
    private static Document xml2FO(Document xml, String styleSheet) {


DOMSource xmlDomSource = new DOMSource(xml);
      DOMResult domResult = new DOMResult();


Transformer transformer = getTransformer(styleSheet);


if (transformer == null) {
   System.out.println("Error creating transformer for " + styleSheet);
   System.exit(1);
}
try {
   transformer.transform(xmlDomSource, domResult);
}
catch (javax.xml.transform.TransformerException e) {
   return null;
}
return (Document) domResult.getNode();


    }




    /*
     *  Apply FOP to XSL-FO input
     *
     *  @param foDocument  The XSL-FO input
     *
     *  @return byte[]  PDF result
     */
    private static byte[] fo2PDF(Document foDocument) {


        DocumentInputSource fopInputSource = new DocumentInputSource(foDocument);


        try {


            ByteArrayOutputStream out = new ByteArrayOutputStream();
            Logger log = new ConsoleLogger(ConsoleLogger.LEVEL_WARN);


            Driver driver = new Driver(fopInputSource, out);
            driver.setLogger(log);
            driver.setRenderer(Driver.RENDER_PDF);
            driver.run();


            return out.toByteArray();


        } catch (Exception ex) {
            return null;
        }
    }




    /*
     *  Create and return a Transformer for the specified stylesheet.
     *
     *  Based on the DOM2DOM.java example in the Xalan distribution.
     */
    private static Transformer getTransformer(String styleSheet) {


try {


   TransformerFactory tFactory = TransformerFactory.newInstance();


   DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();


   dFactory.setNamespaceAware(true);


   DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
   Document xslDoc = dBuilder.parse(styleSheet);
   DOMSource xslDomSource = new DOMSource(xslDoc);


   return tFactory.newTransformer(xslDomSource);


}
catch (javax.xml.transform.TransformerException e) {
   e.printStackTrace();
   return null;
}
catch (java.io.IOException e) {
   e.printStackTrace();
   return null;
}
catch (javax.xml.parsers.ParserConfigurationException e) {
   e.printStackTrace();
   return null;
}
catch (org.xml.sax.SAXException e) {
   e.printStackTrace();
   return null;
}


    }


}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值