velocity制作PDF

Velocity 是一个基于 java 的模板引擎(templateengine). 它可以让视图的设计者在 web 页面中引用 java 代码中定义的数据对象和命令。

1.Velocity

依赖

<dependency>
    <groupId>
org.apache.velocity</groupId>
    <artifactId>
velocity</artifactId>
    <version>
1.7</version>
</dependency>

1.  VelocityEngine

VelocityEngine可以通过构造器和init()方法获取实例,如果功能不够满意,可以通过properties配置新的功能,构造器为VelocityEngine() ,VelocityEngine(Properties p) ,VelocityEngine(StringpropsFilename) 。init方法为init() ,init(Properties p),init(String propsFilename) 。

相比于Velocity提供了更加强大的功能,框架开发者一般使用VelocityEngine这个类在框架中使用velocity模板渲染功能,内部也是是委托给RuntimeInstance来具体实现的,但是每个VelocityEngine都有一个自己的RuntimeInstance实例。也就是说在一个JVM中可以有多个VelocityEngine实例,每个实例都可以定制化自己的配置,这为在同一个应用中配置不同的模板路径和logger提供了方便。

VelocityEngine velocityEngine = new VelocityEngine(); Properties properties = new Properties(); properties.setProperty("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.SimpleLog4JLogSystem"); properties.setProperty("runtime.log.logsystem.log4j.category", "velocity"); properties.setProperty("runtime.log.logsystem.log4j.logger", "velocity"); velocityEngine.init(properties);

2.  Context模块

Context是一个数据中心,将数据传递给模板,以提供对模板渲染所需要的变量的封装管理,相当于一个Map。

VelocityContext 两个基本用法:

public Object put(String key, Objectvalue);

public Object get(String key);

3.  mergeTemplateVelocity生成html

有了velocity模板,有了数据源需要将数据渲染成html,VelocityEngine方法mergeTemplate(String templateName, String encoding, Context context,Writer writer) ,合并一个模板和一个渲染流写入writer。

Java代码:

public static voidmain(String[] args) {VelocityEngine ve =newVelocityEngine();ve.setProperty(RuntimeConstants.RESOURCE_LOADER,"classpath");ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());ve.setProperty("input.encoding","UTF8");ve.setProperty("output.encoding","UTF8");ve.init();Template t = ve.getTemplate("template/show.vm");VelocityContext ctx =newVelocityContext();ctx.put("data","velocity");StringWriter sw =newStringWriter();t.merge(ctx, sw);System.out.println(sw.toString());}

vm模板:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>传递的信息为$data
</body>
</html>

生成的html

<!DOCTYPEhtml>

<html>

<head>

<meta charset="UTF-8">

<title>Title</title>

</head>

<body>

传递的信息为velocity

</body>

</html>

4.  生成pdf

生成html还是没有问题的,有时候需要生成pdf,这个时候需要其他的工具,最常用的是itext。

<dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.1.7</version>
</dependency>
<dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.0.7</version>
</dependency>

iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。

生成pdf的案例:

Document document =newDocument();
PdfWriter writer = PdfWriter.getInstance(document,newFileOutputStream("E:/log/1234.pdf"));
document.open();
document.add(newParagraph("我的名字是jingke"));
document.close();

这个时候可以查看pdf了,但是汉字不会被显示。

Document定义了文档的参数,Document的构造参数:

publicdocument();publicdocument(Rectangle pageSize);publicdocument(Rectangle pageSize,intmarginLeft,intmarginRight,intmarginTop,intmarginBottom);pageSize是指文档页面大小,public document();页面大小为A4,效果等同于Document(PageSize.A4)。
marginLeft、marginRight、marginTop、marginBottom分别为左、右、上、下的页边距。

Document还可以设定文档的标题、主题、作者、关键字、装订方式、创建者、生产者、创建日期等属性,可以设定页面的大小、书签、脚注(HeaderFooter)等信息,iText也提供了对PDF文件的安全保护,通过书写器(Writer)的setEncryption方法,可以设定文档的用户口令、只读、可打印等属性。

根据html生成pdf:

OutputStream os =newFileOutputStream(outputFile);
ITextRenderer renderer =newITextRenderer();
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont(PDF_FONT_PATH, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
String content = VelocityUtils.mergeTemplateFileToString(ResourceLoader.FILE, vmTempName, map,"utf-8", baseDir);
renderer.setDocumentFromString(content);
renderer.layout();
renderer.createPDF(os);
os.close();

5. 图片背景问题

Html转pdf的时候,html图片背景最好配置成绝对路径。

Html转pdf对html要求很严格,根据不同的版本有不同的要求,例如有时候不能添加<title>Title</title>这个属性。

6.  字体问题

通过html生成PDF汉字不显示,可以将用到的字体库单独拿出来,

private static finalString PDF_FONT_PATH= TemplateToPdfUtils.class.getClassLoader().getResource("font/simsun.ttc").getPath();
通过fontResolver.addFont(PDF_FONT_PATH, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);进行配置,可以配置多个字体。

velocity制作pdf相关推荐

  1. 用C#制作PDF文件全攻略(转)

    PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜去,都转贴的是同一段"暴力"破解 ...

  2. PDF 补丁丁 (修改PDF书签;拆分、合并、制作PDF;提取图片) 0.3.0.8 正式版

    PDF 补丁丁 0.3.0.8 正式版 新版本已经发布,请到博客首页下载. 软件简介 PDF补丁丁是一个用于修改PDF文件信息的工具.它具有以下功能: ■ 修改文档(带"*"号部分 ...

  3. iTextSharp 使用详解用C#制作PDF文件全攻略

    iTextSharp 使用详解&用C#制作PDF文件全攻略 http://blog.csdn.net/gatr/article/details/278173 转载于:https://www.c ...

  4. 用C# itextsharp.dll制作PDF文件全攻略

    StreamWriter pPDF=new StreamWriter(filePath); ArrayList xRefs=new ArrayList(); float yPos =0f; long ...

  5. 用C#制作PDF文件全攻略 (专至csdn)

    前 言 丽水市汽车运输集团有限公司信息中心 苟安廷 PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜 ...

  6. Java制作PDF转图片小工具

    背景: 前几日一位朋友突然找我帮忙将PDF转换成图片,我仗义相助,建议他使用福昕阅读器,然而他说转换需要VIP会员,老贵了.我花了半天时间寻找免费会员,结果不出所料没有找到,我一怒之下,便决定亲自动手 ...

  7. 【Python办公自动化】使用reportlab制作pdf报告

    原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接.作者信息和本声明. Python使用folium制作地图并生成png图片 第一章 folium的方法和类的介绍(思维导图) 第二章 ...

  8. java 制作pdf模板,Java-pdf模板制作流程-使用pdf 模板生成pdf文件

    Java 使用pdf 模板生成pdf文件 --制作流程 1.      使用工具 adobe acrobat dc.word 2015 2.      使用 word 繪制一個 3*5 的表格並保存, ...

  9. 用C#制作PDF文件全攻略 .

    前    言 http://blog.csdn.net/gatr/article/details/278173 丽水市汽车运输集团有限公司信息中心 苟安廷 PDF文件是目前比较流行的电子文档格式,在办 ...

最新文章

  1. Java虚拟机JVM常用的几种回收算法和垃圾回收器
  2. 【云炬大学生创业基础笔记】第1章第3节 什么是创业的讨论
  3. 使用jquery在新窗口中打开外部链接
  4. 两个有序数组的中位数—leetcode4
  5. 工作54:对ref的理解
  6. Dijkstra算法 最短路径
  7. 档案盒正面标签制作_如何制作差异化的短视频内容?
  8. 测试压缩ASP.NET中的ViewState
  9. app源码 php,PHP大型B2B2C商城源码带APP源码
  10. linux系统鼠标主题下载,Ubuntu Linux鼠标主题:bCircle
  11. 6.5一些keil编程错误总结
  12. vmware workstation 16 安装centos7 全记录(文字版)
  13. 关于开会了一点点想法
  14. grafana-reporter安装及配置
  15. mysql 5.1 limit_mysql5 limit使用表达式的问题
  16. 检测前目标跟踪在雷达系统中的应用(一):DBT与TBD
  17. 使用Mininet创建Topo
  18. 《JavaScript高级编程》HTML中的JavaScript
  19. Java中的增强for循环和break continue的使用 以及流程控制训练
  20. 百度Site查询接口

热门文章

  1. 小米手机刷android one,别羡慕小米用户了!一加8Pro成功刷入MIUI 12,附简易步骤...
  2. JBookMaker免费下载(能把TXT文档转化为手机即时阅读的小工具)
  3. ASP.NET会员管理系统
  4. Qt 配置Android开发环境,及.apk软件发布方法
  5. 超酷的模态框效果 - Nifty
  6. array方法之from方法
  7. 西门子828D系统PLC轴控制伺服刀塔应用
  8. ArrayList的remove()方法解读
  9. 通往更便宜的义肢之路——关于义肢的综述
  10. js商场导航思路--ivx--canvas实现导航动画效果