代码地址如下:
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. WS-*协议栈及相关概念

    1. 什么是WS-Security? WS-Security 是一个 SOAP 的扩展,它提供了对 SOAP 消息的认证和加密. 在介绍 WS-Security 之前,我们有必要了解一下 WS-Sec ...

  2. SGU 乱搞日志

    SGU 100 A+B :太神不会 SGU 101 Domino: 题目大意:有N张骨牌,两张骨牌有两面有0到6的数字,能相连当且仅当前后数字相同,问能否有将N张骨牌连接的方案?思路:裸的欧拉回路,注 ...

  3. webpack编译vue出现dev警告

    alias配置 vue < 2.1.0 module.exports = { ... resolve: { alias: { 'vue$': 'vue/dist/vue.js' } }, ... ...

  4. root Android 模拟器

    参考文档:http://blog.csdn.net/xbalien29/article/details/22661479 本文以2.3.3版本系统为目标. 一 准备工作 首先我们需要准备3样工具:su ...

  5. Web表单提交之disabled问题

    例如,有如下表单 <form id="inputForm" action="shorttermrental.action" method="po ...

  6. JavaScript 的新特性:类的 #private 字段

    这是什么,如何使用,为什么需要? 一边听“Noise Pollution” —— Portugal. The Man,一边阅读本文简直就是享受 JavaScript 标准的第二阶段(Stage 2)加 ...

  7. bat文件【java调用】

    Runtime.getRuntime().exec("cmd /c del c:\\a.doc");   //Runtime.getRuntime().exec("not ...

  8. 【CF1068C】Colored Rooks(构造)

    题意: 思路: #include<cstdio> #include<cstring> #include<string> #include<cmath> ...

  9. FileInputStream/FileOutputStream的应用

    这是一对继承于InputStream和OutputStream的类,用于本地文件读写(二进制格式读写并且是顺序读写,读和写要分别创建出不同的文件流对象): 本地文件读写编程的基本过程为: ①  生成文 ...

  10. Scrapy学习-22-扩展开发

    开发scrapy扩展 定义 扩展框架提供一个机制,使得你能将自定义功能绑定到Scrapy. 扩展只是正常的类,它们在Scrapy启动时被实例化.初始化   注意 实际上自定义扩展和spider中间件. ...