zoukankan      html  css  js  c++  java
  • 利用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的没有中文字体哦!

  • 相关阅读:
    ASP.NET CORE 使用Consul实现服务治理与健康检查(2)——源码篇
    ASP.NET CORE 使用Consul实现服务治理与健康检查(1)——概念篇
    Asp.Net Core 单元测试正确姿势
    如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch
    Asp.Net Core2.2 源码阅读系列——控制台日志源码解析
    使用VS Code 开发.NET CORE 程序指南
    .NetCore下ES查询驱动 PlainElastic .Net 升级官方驱动 Elasticsearch .Net
    重新认识 async/await 语法糖
    EF添加
    EF修改部分字段
  • 原文地址:https://www.cnblogs.com/dengding/p/5939443.html
Copyright © 2011-2022 走看看