您的位置:首页 > 其它

利用velocity模板以及itext生成pdf

2015-05-28 17:43 423 查看
利用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的没有中文字体哦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  itext pdf 中文 velocity