最近有这样一个需求,要在PDF文件内根据坐标进行签字,最后是使用aspose.pdf实现的,代码我已经封装好了,直接可以拿去用
1:提供一个aspose.pdf的jar包下载路径:
链接:https://pan.baidu.com/s/118BvmZMwt0k0CjiJgdOEFg
提取码:tflv
2:主要代码如下:
/**
根据pdf的坐标位置进行签字
* @author anshuo
* @param pdfFilePath pdf文件路径
* @param pageNum 在第几页进行签字
* @param value 签字内容
* @param font 字体不能为中文,比如宋体为 SimSun,黑体为 SimHei 具体可以查看 C:\Windows\Fonts 下字体文件的真实名称
* @param fontSize 字体大小
* @param xIndent x坐标
* @param yIndent y坐标
* */
public static void pdfSign(String pdfFilePath,int pageNum, String value,String font,String fontSize,double xIndent,double yIndent) {
Document document=new Document(pdfFilePath);
if (document!=null) {
Page page = document.getPages().get_Item(pageNum);
if (page!=null) {
TextParagraph paragraph = new TextParagraph();
paragraph.getFormattingOptions().setWrapMode(
TextFormattingOptions.WordWrapMode.ByWords);
TextState textState = new TextState();
float pondSize = getFontPound(fontSize);
Font pdfFont = FontRepository.findFont(font, true);
textState.setFont(pdfFont);
textState.setFontSize(pondSize);
paragraph.appendLine(value, textState);
Position position = new Position(xIndent, yIndent);
paragraph.setPosition(position);
TextBuilder textBuilder = new TextBuilder(page);
textBuilder.appendParagraph(paragraph);
}else {
System.out.println("页面第:"+pageNum+"页不存在");
}
document.save();
}
}
//根据输入字体返回字体大小
public static float getFontPound(String font) {
float size = 3.70F;
if(font.endsWith("初号")){
return 42;
}else if(font.endsWith("小初")){
return 36;
}else if(font.endsWith("一号")){
return 26;
}else if(font.endsWith("小一")){
return 24;
}else if(font.endsWith("二号")){
return 22;
}else if(font.endsWith("小二")){
return 18;
}else if(font.endsWith("三号")){
return 16;
}else if(font.endsWith("小三")){
return 15;
}else if(font.endsWith("四号")){
return 14;
}else if(font.endsWith("小四")){
return 12;
}else if(font.endsWith("五号")){
return 10.5F;
}else if(font.endsWith("小五")){
return 9;
}else if(font.endsWith("六号")){
return 7.5F;
}else if(font.endsWith("小六")){
return 6.5F;
}else if(font.endsWith("七号")){
return 5.5F;
}else if(font.endsWith("八号")){
return 5;
}
return size;
}
3:在main方法中调用如下:
public static void main(String[] args) {
try {
pdfSign("C:/Users/Administrator/Desktop/测试.pdf",1, "签字效果", "SimSun", "三号", 300, 300);
} catch (Exception e) {
// TODO: handle exception
}
}
4:实现前效果:
5:实现后效果