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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【电⼦签章】HTML格式合同转化成PDF⽂件⼀、主要思路
通过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("/");
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⽂件
注:本⽂著作权归作者,由demo⼤师代发,拒绝转载,转载需要作者授权。

相关文档
最新文档