热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

使用ApacheXML项目FOP生成PDF文件(下)

使用ApacheXML项目FOP生成PDF文件(下)四、内容:2、(2)XMLàXSL-FOàPDF:有时我们在程序中会遇到要把一个只具有数据,没有格式的XML文件

使用Apache XML项目FOP生成PDF文件(下

四、       内容:

2、(2XMLàXSL-FOàPDF

有时我们在程序中会遇到要把一个只具有数据,没有格式的XML文件转化成PDF文件,这时我们就需要一个JAXP兼容的XSLT处理器:如Apachexalan(或者IBMxercesSunJDOM等),请将它的库文件加入CLASSPATH。通过JAXPAPI我们就可以先使用XSLTXML文件转化为XML-FO文件,再把XML-FO文件转化为PDF处理流程如下:

XLS-FO

PDF

FOP

XML

XSLT

JAXP

 

 

 


(a)     第一步让我们先看一下如何把XML文件转化为XLS-FO文件,处理流程如下:

XLS-FO

XML

XSLT

JAXP

 

 

 

 


//例二:ExampleXML2FO.java

 

//Java

import java.io.File;

import java.io.IOException;

import java.io.OutputStream;

 

//JAXP

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.TransformerException;

import javax.xml.transform.Source;

import javax.xml.transform.Result;

import javax.xml.transform.stream.StreamResult;

import javax.xml.transform.stream.StreamSource;

 

//Avalon

import org.apache.avalon.framework.ExceptionUtil;

 

/**

 * This class demonstrates the conversion of an XML file to an XSL-FO file

 * using JAXP (XSLT).

 */

public class ExampleXML2FO {

 

    public void convertXML2FO(File xml, File xslt, File fo)

                throws IOException, TransformerException {

      

        //Setup output

        OutputStream out = new java.io.FileOutputStream(fo);

        try {

            //Setup XSLT

            TransformerFactory factory = TransformerFactory.newInstance();

            Transformer transformer = factory.newTransformer(new StreamSource(xslt));

       

            //Setup input for XSLT transformation

            Source src = new StreamSource(xml);

       

            //Resulting SAX events (the generated FO) must be piped through to FOP

            Result res = new StreamResult(out);

 

            //Start XSLT transformation and FOP processing

            transformer.transform(src, res);

        } finally {

            out.close();

        }

    }

 

 

    public static void main(String[] args) {

        try {

            System.out.println("FOP ExampleXML2FO/n");

            System.out.println("Preparing...");

 

            //Setup directories

            File baseDir = new File(".");

 

 

            //Setup input and output files           

            File xmlfile = new File(baseDir, "projectteam.xml");

            File xsltfile = new File(baseDir, "projectteam2FO.xsl");

            File fofile = new File(baseDir, "ResultXML2FO.fo");

 

            System.out.println("Input: XML (" + xmlfile + ")");

            System.out.println("Stylesheet: " + xsltfile);

            System.out.println("Output: XSL-FO (" + fofile + ")");

            System.out.println();

            System.out.println("Transforming...");

           

            ExampleXML2FO app = new ExampleXML2FO();

            app.convertXML2FO(xmlfile, xsltfile, fofile);

           

            System.out.println("Success!");

        } catch (Exception e) {

            System.err.println(ExceptionUtil.printStackTrace(e));

            System.exit(-1);

        }

    }

}

 

              编译运行上面的程序使用XSLT文件projectteam2FO.xslXML文件projectteam.xml转化为XML-FO文件ResultXML2FO.fo

 

(b)    进一步,我们看一下如何把XML文件转化为PDF文件。

处理流程如下:

XLS-FO

PDF

FOP

XML

XSLT

JAXP

 

 

 

 


//例三:ExampleXML2PDF.java

 

//Java

import java.io.File;

import java.io.IOException;

import java.io.OutputStream;

 

//JAXP

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.TransformerException;

import javax.xml.transform.Source;

import javax.xml.transform.Result;

import javax.xml.transform.stream.StreamSource;

import javax.xml.transform.sax.SAXResult;

 

//Avalon

import org.apache.avalon.framework.ExceptionUtil;

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

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

 

//FOP

import org.apache.fop.apps.Driver;

import org.apache.fop.apps.FOPException;

import org.apache.fop.messaging.MessageHandler;

 

/**

 * This class demonstrates the conversion of an XML file to PDF using

 * JAXP (XSLT) and FOP (XSL:FO).

 */

public class ExampleXML2PDF {

 

    public void convertXML2PDF(File xml, File xslt, File pdf)

                throws IOException, FOPException, TransformerException {

        //Construct driver

        Driver driver = new Driver();

       

        //Setup logger

        Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);

        driver.setLogger(logger);

        MessageHandler.setScreenLogger(logger);

 

        //Setup Renderer (output format)       

        driver.setRenderer(Driver.RENDER_PDF);

       

        //Setup output

        OutputStream out = new java.io.FileOutputStream(pdf);

        try {

            driver.setOutputStream(out);

 

            //Setup XSLT

            TransformerFactory factory = TransformerFactory.newInstance();

            Transformer transformer = factory.newTransformer(new StreamSource(xslt));

       

            //Setup input for XSLT transformation

            Source src = new StreamSource(xml);

       

            //Resulting SAX events (the generated FO) must be piped through to FOP

            Result res = new SAXResult(driver.getContentHandler());

 

            //Start XSLT transformation and FOP processing

            transformer.transform(src, res);

        } finally {

            out.close();

        }

    }

 

 

    public static void main(String[] args) {

        try {

            System.out.println("FOP ExampleXML2PDF/n");

            System.out.println("Preparing...");

 

            //Setup directories

            File baseDir = new File(".");

 

            //Setup input and output files           

            File xmlfile = new File(baseDir, "projectteam.xml");

            File xsltfile = new File(baseDir, "projectteam2FO.xsl");

            File pdffile = new File(baseDir, "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...");

           

            ExampleXML2PDF app = new ExampleXML2PDF();

            app.convertXML2PDF(xmlfile, xsltfile, pdffile);

           

            System.out.println("Success!");

        } catch (Exception e) {

            System.err.println(ExceptionUtil.printStackTrace(e));

            System.exit(-1);

        }

    }

}

 

 

              编译运行上面的程序使用XSLT文件projectteam2FO.xslXML文件projectteam.xml转化为PDF文件ResultXML2PDF.pdf

 

3JAVAàXMLàXSL-FOàPDF

这种情况有兴趣的读者可以参考http://xml.apache.org/ 关于FOP的介绍。

 

参考资料:http://xml.apache.org/

作者邮箱:jasea@sina.com


推荐阅读
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
author-avatar
雨蝶馨菲_484
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有