使用Apache FOP+XML-FO生成PDF文档


package tst.word;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;
import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.FormattingResults;
import org.apache.fop.apps.MimeConstants;
import org.apache.fop.apps.PageSequenceResults;
import org.xml.sax.InputSource;
public class PDFWithFOP {
public static void main(String[] args) throws Exception{
new PDFWithFOP().run();
System.out.println("success");
}
public void run() throws Exception{
File fo=new File("D:\\newtst\\helloworld.fo");
File pdf=new File("D:\\newtst\\helloworld.pdf");
convertFO2PDF(fo,pdf);
}
public void convertFO2PDF(File fo, File pdf) throws Exception {
//Construct driver
FopFactory factory=FopFactory.newInstance();
FOUserAgent userAgent=factory.newFOUserAgent();
OutputStream out=null;
out=new FileOutputStream(pdf);
out=new BufferedOutputStream(out);
Fop fop=factory.newFop(MimeConstants.MIME_PDF,userAgent,out);
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
Source source=new StreamSource(fo);
Result res=new SAXResult(fop.getDefaultHandler());
transformer.transform(source,res);
out.close();
}
}


关键在于XML-FO对XML的描述。可通过XSTL转换的方式生成FO,也可通过自己的程序去生成FO。
通过FOP可最终产生PDF、RTF等等各种文档类型。

[url=http://zhangyuxin.me]新博客地址[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值