设为首页 收藏本站
查看: 1014|回复: 0

[经验分享] Apache FOP研究

[复制链接]

尚未签到

发表于 2018-11-26 10:51:45 | 显示全部楼层 |阅读模式
apache FOP研究


         fop是apache.org上的一个开源项目,主要是通过xsl-fo将xml数据转换成pdf、ps等文件格式,当然最主要的还是转换成pdf.基于元数据的xml+xsl-fo很容易将文档格式化得很漂亮.
          首先让我们下载相关文件以及文档:
           在这里:http://xmlgraphics.apache.org/fop/ ,点击左边的download下载你需要的资源包.呵呵.里面有文档、demo、依赖库、甚至ant的编译配置文件一应俱全,想研究源码的下源码包自己编译,在下比较懒,下载的是二进制包,下载完成后解压,将build目录下的fop.jar以及lib下的依赖库文件copy到你新建的工程、然后构建路径......不必多说了吧.重点是如何将xml转成pdf,打开example目录,大概看一边应该就了解了.具体如下:
           package embedding;
//Java
import java.io.File;
import java.io.OutputStream;
//JAXP
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Source;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.sax.SAXResult;
//FOP
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.MimeConstants;
/**
* This class demonstrates the conversion of an XML file to PDF using
* JAXP (XSLT) and FOP (XSL-FO).
*/
public class ExampleXML2PDF {
    /**
     * Main method.
     * @param args command-line arguments
     */
    public static void main(String[] args) {
        try {
            System.out.println("FOP ExampleXML2PDF\n");
            System.out.println("Preparing...");
            // Setup directories
            File baseDir = new File("E:/workdir/FopExample");
            File outDir = new File(baseDir, "out");
            outDir.mkdirs();
            // Setup input and output files            
            File xmlfile = new File(baseDir, "xml/xml/10061006.xml");
            File xsltfile = new File(baseDir, "xml/xslt/simple.xsl");
            File pdffile = new File(outDir, "ResultXML2PDF.pdf");
            System.out.println("Input: XML (" + xmlfile + ")");
            System.out.println("Stylesheet: " + xsltfile);
            System.out.println("Output: PDF (" + pdffile + ")");
            System.out.println();
            System.out.println("Transforming...");
            
            // configure fopFactory as desired
            FopFactory fopFactory = FopFactory.newInstance();
            fopFactory.setUserConfig("E:/workdir/FopExample/src/fopconfig.xml");
            FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
            // configure foUserAgent as desired            
            // Setup output
            OutputStream out = new java.io.FileOutputStream(pdffile);
            out = new java.io.BufferedOutputStream(out);
            
            try {
                // Construct fop with desired output format
                Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
   
                // Setup XSLT
                TransformerFactory factory = TransformerFactory.newInstance();
                Transformer transformer = factory.newTransformer(new StreamSource(xsltfile));
               
                // Set the value of a  in the stylesheet
//                transformer.setParameter("versionParam", "2.0");
            
                // Setup input for XSLT transformation
                Source src = new StreamSource(xmlfile);
            
                // Resulting SAX events (the generated FO) must be piped through to FOP
                Result res = new SAXResult(fop.getDefaultHandler());
   
                // Start XSLT transformation and FOP processing
                transformer.transform(src, res);
            } finally {
                out.close();
            }
            
            System.out.println("Success!");
        } catch (Exception e) {
            e.printStackTrace(System.err);
            System.exit(-1);
        }
    }
}



当然你需要自己的xml和xsl模板、有关xml和xsl方面的知识笔者将会陆续介绍,敬请关注,附件中是我测试的demo,请指教。

郁闷,太大了,传不上,敬请原谅.不过这东西挺好的感觉.


           





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-639760-1-1.html 上篇帖子: apache htpasswd命令。 下篇帖子: Apache快速构建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表