• 利用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的没有中文字体哦!

  • 相关阅读:
    Java读源码之ReentrantLock(2)
    Java读源码之ReentrantLock
    Java8新特性之Stream
    Spring Cloud Contract 微服务契约测试
    Springboot + 持久层框架JOOQ
    Groovy语法糖以及DSL
    Java自定义注解
    Java8新特性之接口defualt,static方法
    Nginx + uWSGI + Python + Django构建必应高清壁纸站
    Kafka,RocketMQ,RabbitMQ部署与使用体验
  • 原文地址:https://www.cnblogs.com/dengding/p/5939443.html
Copyright © 2020-2023  润新知