利用velocity模板以及itext生成pdf

利用velocity模板以及itext生成pdf

我整理的源码:http://download.csdn.net/download/u012174571/8748897

首先是velocity的使用:

         1.下载:http://velocity.apache.org/download.cgi

         2.导入包:velocity-1.7.jar、commons-lang-2.4.jar、commons-collections-3.2.1.jar这三个包导入工程中。

         3.用法演示:

         新建一个文件:hello.vm放在根目录下,

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<style>

*{font-family: SimSun;}

</style>

</head>

<body>

    <p>

       ${name}

    </p>

  

   ${date}

</body>

</html>

 

 

 

新建一个测试类TestVelocity

import java.io.StringWriter;

import java.util.Date;

 

import org.apache.velocity.Template;

import org.apache.velocity.VelocityContext;

import org.apache.velocity.app.VelocityEngine;

 

 

public class TestVelocity {

 

   public static void main(String[] args) throws Exception {

      //初始化并取得Velocity引擎

      VelocityEngine ve = new VelocityEngine();

      ve.init();

 

      //取得velocity的模版

      Template t = ve.getTemplate("src/hello.vm");

 

      //取得velocity的上下文context

      VelocityContext context = new VelocityContext();

 

      //vm中写入信息

      context.put("name", "Liang");

      context.put("date", (new Date()).toString());

 

 

      StringWriter writer = new StringWriter();

 

      //把数据填入上下文

      t.merge(context, writer);

 

     

      String out = writer.toString();

      System.out.println(writer.toString());

 

   }

   public static String get() throws Exception{

      //初始化并取得Velocity引擎

            VelocityEngine ve = new VelocityEngine();

            ve.init();

 

            //取得velocity的模版

            Template t = ve.getTemplate("src/hello.vm","UTF-8");

            //velocity 在给路劲时会比较麻烦,

           

            //取得velocity的上下文context

            VelocityContext context = new VelocityContext();

 

 

            StringWriter writer = new StringWriter();

 

            //把数据填入上下文

            t.merge(context, writer);

 

            //输出流

            String out = writer.toString();

            return out;

   }

}

 

 

 

 

4.运行输出结果:

<html>

<head>

<meta http-equiv="Content-Type"content="text/html; charset=UTF-8" />

<style>

*{font-family:SimSun;}

</style>

</head>

<body>

    <p>

       Liang

    </p>

         Thu May 28 14:23:22 CST 2015

</body>

</html>

 

 

其次itext的使用

下载包:需要两个包:(最好都下最新的,不然不支持中文)

         1.itext核心包: http://sourceforge.net/projects/itext/files/

         2.xml包:http://sourceforge.net/projects/xmlworker/files/

其中有用的是:itext下的itextpdf-5.5.6.jar

                              xml下的xmlworker-5.5.6.jar

在E盘创建一个html;写上些东西(先不要写中文)

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.Reader;

import java.io.StringReader;

import java.nio.charset.Charset;

 

 

import com.itextpdf.text.Document;

import com.itextpdf.text.DocumentException;

import com.itextpdf.text.pdf.PdfWriter;

import com.itextpdf.tool.xml.XMLWorkerHelper;

 

public class Test  {

 

   public static final String HTML = "E:/MyHtml.html";

    public static final String DEST = "E:/hero.pdf";

 

    /**

     * Creates a PDF with the words "Hello World"

     * @param file

     * @throws IOException

     * @throws DocumentException

     */

    public void createPdf(String file) throws Exception {

        // step 1

        Document document = new Document();

        // step 2

        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));

        // step 3

        document.open();

        String value = TestVelocity.get();

        @SuppressWarnings("deprecation")

        Reader reader = null;

        reader = new StringReader(value);

       

        // step 4

//        XMLWorkerHelper.getInstance().parseXHtml(writer, document, reader);

        XMLWorkerHelper.getInstance().parseXHtml(writer, document,

             new FileInputStream(HTML) , Charset.forName("UTF-8"));

        // step 5

        document.close();

    }

 

    /**

     * Main method

     */

    public static void main(String[] args) throws Exception{

        File file = new File(DEST);

        file.getParentFile().mkdirs();

        new Test().createPdf(DEST);

    }

}

 

     

ok可以去e盘找pdf了。

 

 

 

 

两者合并:

         上边代码中的

 String value = TestVelocity.get();

        @SuppressWarnings("deprecation")

        Reader reader = null;

        reader = new StringReader(value);

       

        // step 4

//       XMLWorkerHelper.getInstance().parseXHtml(writer, document, reader);

就是去找velocity并交给itex生成pdf;将注解放开,把这段  XMLWorkerHelper.getInstance().parseXHtml(writer,document,

             new FileInputStream(HTML) , Charset.forName("UTF-8"));

注解掉,ok再生成的pdf就是hello.vm中的内容了;

 

 

中文处理:itext对中文支持不是很好,但是高版本的jar包已经可以支持中文了。在vm中添加样式:<style>

*{font-family: SimSun;}

</style>

把所有的文字都指定为宋体(最好这个字体,我试过有的字体会少一些字);字体记得要往服务器加哦,服务器一般是linux的没有中文字体哦!

转载于:https://www.cnblogs.com/taocong/p/5939443.html

Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。 Velocity能为我们作什么? The Mud Store Example 假设你是一家专门出售Mud的在线商店的页面设计人员,让我们暂且称它为“在线MUD商店”。你们的业务很旺,客户下了各种类型和数量的mud订单。他们都是通过输入用户名和密码后才登陆到你的网站,登陆后就允许他们查看订单并购买更多的mud。现在,一种非常流行的mud正在打折销售。另外有一些客户规律性的购买另外一种也在打折但是不是很流行的Bright Red Mud,由于购买的人并不多所以它被安置在页面的边缘。所有用户的信息都是被跟踪并存放于数据库中的,所以某天有一个问题可能会冒出来:为什么不使用 velocity来使用户更好的浏览他们感兴趣的商品呢? Velocity使得web页面的客户化工作非常容易。作为一个web site的设计人员,你希望每个用户登陆时都拥有自己的页面。 你会见了一些公司内的软件工程师,你发现他们每个人都同意客户应该拥有具有个性化的信息。那让我们把软件工程师应该作的事情发在一边,看一看你应该作些什么吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值