代码地址如下:
http://www.demodashi.com/demo/12476.html

一、主要思路

  • 通过itextpdf 生成想要的pdf 文件
  • 通过itextpdf 中 XMLWorkerHelper 组件将html 转化成 pdf 文件
  • 针对中文字符使用itext-asian进行中文字符处理

二、程序实现

1.添加程序依赖

	<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.12</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.12</version>
</dependency>

2.使用itextpdf生成pdf

 	/**
* 绘制一个PDF文件
* @param target 生成地址
*/
public static void draw(String target) throws IOException, DocumentException {
Document document = new Document(PageSize.B5,20,20,30,20);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(target));
document.open(); // 设置文档属性
document.addAuthor("Geek");
document.addCreationDate();
document.addCreator("http://www.demodashi.com/");
document.addTitle("Geek Pdf Demo");
document.addSubject("PDF生成的Demo"); // 设置中文字体和字体样式
BaseFont chineseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(chineseFont, 10, Font.NORMAL);
Font font1 = new Font(chineseFont, 8, Font.NORMAL); // 设置编号
Paragraph paragraph = new Paragraph("编号:A08485743-1", font1);
paragraph.setAlignment(Element.ALIGN_RIGHT);
document.add(paragraph); // 创建表格
PdfPTable pdfTable = new PdfPTable(2);
float[] widths = {0.06f, 0.06f};
pdfTable.setWidths(widths);
//设置表格占PDF文档100%宽度
pdfTable.setWidthPercentage(100);
//水平方向表格控件居中
pdfTable.setHorizontalAlignment(PdfPTable.ALIGN_CENTER); PdfPCell Cell = new PdfPCell();
Cell.setColspan(2);
Cell.setPhrase(new Paragraph("支付宝还款电子回单", font));
Cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
Cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
pdfTable.addCell(Cell); PdfPCell Cell1 = new PdfPCell();
Cell1.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
Cell1.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); Cell1.setPhrase(new Paragraph("支付宝还款电子回单", font));
pdfTable.addCell(Cell1);
Cell1.setPhrase(new Paragraph("11", font));
pdfTable.addCell(Cell1); document.add(pdfTable);
document.close();
writer.close();
}

这里只是一个简单的小例子,复杂的结构,还需要了解下itextpdf的组件.

顺便提一句,在这种情况下也可以尝试pdfbox组件试一下

效果图如下:

3.将html文件模板转化成pdf

   在实际应用中,大部分的合同同时html格式的,但是在一些系统中,需要对合同的法律效力进行认证。这时就会用到电子签章,目前国内的签章系统大多是对PDF文件进行签章。所以很多公司就会使用HTML转PDF的格式。转换的工具很多,但是的确不怎么好用。

现在给大家推荐这种方式,也是我们线上使用的方式,效果很不错。

public static void draw(String src,String target)throws IOException, DocumentException{
Document document = new Document(PageSize.B5,20,20,30,20);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(target));
document.open();
XMLWorkerHelper.getInstance().parseXHtml(writer, document, new FileInputStream(src), null, Charset.forName("UTF-8"),new ChineseFontProvider(6));
document.close();
}

itextpdf是老外们做的插件,所以对中文不是特别友好,好在推出了中文包,但是需要稍作修改


/**
* @Description: 中文处理
* @File: ChineseFontProvider
* @author: Geek
* @date 2018/1/25 上午11:25
*/
public class ChineseFontProvider extends XMLWorkerFontProvider { private int fontSize; public ChineseFontProvider(){
this.fontSize = 0;
} public ChineseFontProvider(int fontSize){
this.fontSize = fontSize;
}
@Override
public Font getFont(final String fontname, final String encoding,
final boolean embedded, final float size, final int style,
final BaseColor color) {
BaseFont bf = null;
try {
bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Font font = null;
if (fontSize != 0){
font = new Font(bf, fontSize, style, color);
} else {
font = new Font(bf, size, style, color);
}
font.setColor(color);
return font;
} public int getFontSize() {
return fontSize;
} public void setFontSize(int fontSize) {
this.fontSize = fontSize;
}
}

效果图如下:

三、程序目录结构



【电子签章】HTML格式合同转化成PDF文件

代码地址如下:
http://www.demodashi.com/demo/12476.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

【电子签章】HTML格式合同转化成PDF文件的更多相关文章

  1. 在基于ABP框架的前端项目Vue&Element项目中采用电子签章处理文件和打印处理

    在一些内部OA或者流转的文件,或者给一些客户的报价文件.合同,或者一些医院出示的给保险机构的病历资料等,有时候可能都希望快速的使用电子签章的处理方式来给文件盖上特定的印章,本篇随笔介绍基于Vue&am ...

  2. ofd文件电子签章实现方法

    前言 文档处理一般经过三个环节:流.版.签:流式软件负责编辑,如:office.wps等.版式软件负责文档定型,保证显示样式不跑偏:版式文件格式有两种:pdf.ofd.签章软件负责对版式文档签章.签章 ...

  3. 验证pdf文件的电子章签名

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  4. 基于CA认证(结合文档在线预览)的电子签章解决方案

    分享一个基于CA认证(结合文档在线预览)的电子签章实现思路,恰巧是最近项目中遇到的,欢迎大家一起讨论. 一. 项目背景 在公司业务系统中,按照传统的签章方式,存在以下痛点: 1.成本高,体现在纸质合同 ...

  5. 如何通过WPS 2013 API 将Office(Word、Excel和PPT)文件转PDF文件

    1. 描述 PDF 文件是一种便携文件格式,是由Adobe公司所开发的独特的跨平台文件格式.PDF文件以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,即 ...

  6. linux在线预览pdf文件开发思路

    准备:swftools,flexpaper 基本思路: 1,将pdf文件转化成swf文件 2,使用flexpaper预览swf文件 主要代码: 1,在linux中安装swftools.官网下载swft ...

  7. word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得

    word和.txt文件转html 及pdf文件, 使用poi jsoup  itext心得本人第一次写博客,有上面不足的或者需要改正的希望大家指出来,一起学习交流讨论.由于在项目中遇到了这一个问题,在 ...

  8. 如何给pdf文件中的一页添加水印

    如题所述,项目需求.要把一份文件尾部加上签章,首先想到的就是水印. 开始试过了无论是word还是wps所谓的水印其实就是页脚或页眉统一格式,无法单一一个页面操作,要加所有的页面都有. 纵然wps有个功 ...

  9. Itext生成pdf文件

    来源:https://my.oschina.net/lujianing/blog/894365 1.背景 在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同等. ...

随机推荐

  1. HDU 2065 "红色病毒"问题 ——快速幂 生成函数

    $A(x)=1+x^2/2!+x^4/4!...$ $A(x)=1+x^1/1!+x^2/2!...$ 然后把生成函数弄出来. 暴力手算. 发现结论. 直接是$4^{n-1}+2^{n-1}$ 然后快 ...

  2. 如何在Ionic2项目中使用第三方JavaScript库

    onic的官网放出一记大招Ionic and Typings,来介绍如何在Ionic2项目中使用第三方JavaScript库. 因为在前阵子正好想用一个非常有名的第三方JS库ChartJs来实现一些东 ...

  3. 【BZOJ4476&JSOI2015】送礼物(二分,RMQ)

    ANS明显是有二分性的 二分答案,设二分值为b M(i,j)−m(i,j)j−i+k>b 显然当l<长度<r时,一端是最小值,一端是最大值. 等于l或r的时候因为可能不满足以上性质, ...

  4. Ajax 控件 的使用 以及js调用后台方法【自己总结一下】

    原文发布时间为:2009-05-16 -- 来源于本人的百度文章 [由搬家工具导入] 源码:http://download.csdn.net/source/1340120   (js调用后台方法只在源 ...

  5. 添加一种emit的应用,反射发出,较直接调用稍慢,但好过反射与表达式树。

    System.Reflection.MethodInfo mInfo = typeof(TypeParse).GetMethod("Add", System.Reflection. ...

  6. 浅析CSS里的 BFC 和 IFC

    前端日刊 登录 浅析CSS里的 BFC 和 IFC 2018-01-29 阅读 1794 收藏 3 原链:segmentfault.com 分享到:   前端必备图书<Web安全开发指南 掌握白 ...

  7. django Modelform 使用

    前言: 为什么要用form去验证呢? 我们提交的是form表单,在看前端源码时如果检查到POST URL及我们提交的字段,如果没有验证我们是否可以直接POST数据到URL,后台并没有进行校验,直接处理 ...

  8. 用Python和Pygame写游戏-从入门到精通(py2exe篇)

    这次不是直接讲解下去,而是谈一下如何把我们写的游戏做成一个exe文件,这样一来,用户不需要安装python就可以玩了.扫清了游戏发布一大障碍啊! perl,python,java等编程语言,非常好用, ...

  9. (转)十步完全理解 SQL

    十步完全理解 SQL 目录[-] 10个简单步骤,完全理解SQL 1. SQL 是一种声明式语言 2. SQL 的语法并不按照语法顺序执行 3. SQL 语言的核心是对表的引用(table refer ...

  10. Google Cloud服务免费申请试用以及使用教程

    简介 Google Cloud Platform lets you build and host applications and websites, store data, and analyze ...