在Java代码中使用iTextPDF生成PDF
1. 生成PDF
载入字体
static {
FontFactory.register("/fonts/msyh.ttf");
FontFactory.register("/fonts/msyhbd.ttf");
FontFactory.register("/fonts/simsun.ttc");
FontFactory.register("/fonts/simhei.ttf");
}
生成PDF
Rectangle rectPageSize = new Rectangle(PageSize.A4);// A4纸张
Document document = new Document(rectPageSize, 40, 40, 40, 40);// 上、下、左、右间距
try {
String filePath = StaticConfig.getConfig("file_path") + invest.getContractPath();
String folderPath = filePath.substring(0, filePath.lastIndexOf("/") + 1);
File folder = new File(folderPath);
if (!folder.exists()) {
folder.mkdirs();
} PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filePath));
writer.setPdfVersion(PdfWriter.PDF_VERSION_1_7);
document.addCreationDate();
document.addCreator("rockbb");
document.addTitle("rockbbPDF");
document.addKeywords("export");
document.addSubject("rockbb业务文件");
document.open();
Font yahei9px = FontFactory.getFont("微软雅黑", BaseFont.IDENTITY_H, 9);
Font yahei10px = FontFactory.getFont("微软雅黑", BaseFont.IDENTITY_H, 10);
Font yahei11px = FontFactory.getFont("微软雅黑", BaseFont.IDENTITY_H, 11);
Font yahei12px = FontFactory.getFont("微软雅黑", BaseFont.IDENTITY_H, 12); document.add(paragraph("编号:[" + invest.getContractSn() + "]", yahei9px, Paragraph.ALIGN_RIGHT)); //表格
PdfPTable table = new PdfPTable(3);
table.setSpacingBefore(10.0f);
table.setWidthPercentage(100);
table.setWidths(new float[]{0.25f, 0.25f, 0.5f}); PdfPCell cell = cell("当事方", yahei11px, Element.ALIGN_CENTER, Element.ALIGN_MIDDLE);
cell.setColspan(3);
table.addCell(cell); cell = cell("甲方(投资者)", yahei10px);
cell.setRowspan(3);
table.addCell(cell);
table.addCell(cell("姓名", yahei10px));
table.addCell(cell(user.getRealName(), yahei10px));
table.addCell(cell("用户ID", yahei10px));
table.addCell(cell(user.getTel(), yahei10px));
table.addCell(cell("身份证", yahei10px));
table.addCell(cell(user.getIdNumber(), yahei10px)); cell = cell("乙方", yahei10px);
cell.setRowspan(3);
table.addCell(cell);
table.addCell(cell("名称", yahei10px));
table.addCell(cell("公司", yahei10px));
table.addCell(cell("住所", yahei10px));
table.addCell(cell("北京市朝阳区", yahei10px));
table.addCell(cell("注册证", yahei10px));
table.addCell(cell("", yahei10px));
document.add(table); document.add(paragraph("* 凡本协议未列示的产品信息以平台产品说明书页面显示的产品具体信息为准。", yahei9px)); document.add(paragraph("第二部分 协议条款", yahei12px, Paragraph.ALIGN_LEFT, 10.0f)); document.add(paragraph(agreement, yahei10px, Paragraph.ALIGN_LEFT, 5.0f)); document.close();
writer.close(); } catch (FileNotFoundException e) {
logger.error("FileNotFoundException");
logger.debug(e.getMessage(), e);
} catch (IOException e) {
logger.error("IOException");
logger.debug(e.getMessage(), e);
} catch (DocumentException e) {
logger.error("DocumentException");
logger.debug(e.getMessage(), e);
}
工具方法
private static PdfPCell cell(String content, Font font) {
PdfPCell cell = new PdfPCell(new Phrase(content, font));
cell.setBorderColor(new BaseColor(196, 196, 196));
cell.setPadding(5.0f);
cell.setPaddingTop(1.0f);
return cell;
}
private static PdfPCell cell(String content, Font font, int hAlign, int vAlign) {
PdfPCell cell = new PdfPCell(new Phrase(content, font));
cell.setBorderColor(new BaseColor(196, 196, 196));
cell.setVerticalAlignment(vAlign);
cell.setHorizontalAlignment(hAlign);
cell.setPadding(5.0f);
cell.setPaddingTop(1.0f);
return cell;
}
private static Paragraph paragraph(String content, Font font) {
return new Paragraph(content, font);
}
private static Paragraph paragraph(String content, Font font, int hAlign) {
Paragraph paragraph = new Paragraph(content, font);
paragraph.setAlignment(hAlign);
return paragraph;
}
private static Paragraph paragraph(String content, Font font, int hAlign, float spacingBefore) {
Paragraph paragraph = new Paragraph(content, font);
paragraph.setAlignment(hAlign);
paragraph.setSpacingBefore(spacingBefore);
return paragraph;
}
在生成过程中加盖图片, 注意, 因为无法指定页码, 所以这段代码要放到你需要加盖图片的那页对应的代码上
byte[] bytes = FileUtil.readResourceImage("/text/stamp.png");
if (bytes != null) {
Image image = Image.getInstance(bytes);
PdfContentByte canvas = writer.getDirectContent();
writer.getPageNumber();
// float width = image.getScaledWidth();
// float height = image.getScaledHeight();
canvas.addImage(image, 150, 0, 0, 150, rectPageSize.getWidth() - 300, rectPageSize.getHeight() - 300);
} else {
logger.error("Failed to read /text/stamp.png");
}
读取项目资源文件的工具方法
/**
* 读取项目图片资源文件
*
* @param filePath 以'/'开头的项目资源文件路径
* @return
*/
public static byte[] readResourceImage(String filePath) {
try {
InputStream is = FileUtil.class.getResourceAsStream(filePath);
BufferedImage image = ImageIO.read(is);
is.close();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "png", os);
return os.toByteArray();
} catch (FileNotFoundException e) {
logger.error("FileNotFoundException: " + filePath);
} catch (IOException e) {
logger.error("IOException");
}
return null;
} /**
* 读取项目资源文件内容
*
* @param filePath 以'/'开头的项目资源文件路径
* @return 文件内容
*/
public static String readResourceContent(String filePath) {
StringBuilder sb = new StringBuilder();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(FileUtil.class.getResourceAsStream(filePath)));
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
reader.close();
} catch (FileNotFoundException e) {
logger.error("FileNotFoundException: " + filePath);
} catch (IOException e) {
logger.error("IOException");
}
return sb.toString();
}
在Java代码中使用iTextPDF生成PDF的更多相关文章
- 在Java代码中使用pdfBox将PDF转换为图片
生成图片 // 生成图片 PDDocument pd = PDDocument.load(new File(filePath)); PDFRenderer pdfRenderer = new PDFR ...
- java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法
1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...
- wsdl自动生成Java代码,根据wsdl生成Java代码
wsdl自动生成Java代码,根据wsdl生成Java代码 >>>>>>>>>>>>>>>>>&g ...
- 【转】使用JavaParser获得Java代码中的类名、方法形参列表中的参数名以及统计总的文件个数与不能解析的文件个数
遍历目录查找Java文件: public static void ergodicDir(File dir, HashSet<String> argNameSet, HashSet<S ...
- IDEA插件:快速删除Java代码中的注释
背景 有时,我们需要删除Java源代码中的注释.目前有不少方法,比如: 实现状态机.该方式较为通用,适用于多种语言(取决于状态机支持的注释符号). 正则匹配.该方式容易误判,尤其是容易误删字符串. ...
- Spring MVC框架下在java代码中访问applicationContext.xml文件中配置的文件(可以用于读取配置文件内容)
<bean id="propertyConfigurer" class="com.****.framework.core.SpringPropertiesUtil& ...
- 使用mongo-java-driver3.0.2.jar和mongodb3.0在java代码中的用户验证4
以下是使用mongo-java-driver3.0.2.jar和mongodb3.0.4在java代码中的用户验证: ServerAddress sa = new ServerAddress(host ...
- Android color(颜色) 在XML文件和java代码中
Android color(颜色) 在XML文件和java代码中,有需要的朋友可以参考下. 1.使用Color类的常量,如: int color = Color.BLUE;//创建一个蓝色 是使用An ...
- 关于在Java代码中写Sql语句需要注意的问题
最近做程序,时不时需要自己去手动将sql语句直接写入到Java代码中,写入sql语句时,需要注意几个小问题. 先看我之前写的几句简单的sql语句,自以为没有问题,但是编译直接报错. String st ...
随机推荐
- Android studio打开项目时出现 gradle download 无反应
在使用android studio 新建 项目的时候,会发现一直无法下载 gradle程序一直卡住不动,原因是被墙了. 解决方法: 到gradle官网下载离线包,解压后将bin路径加入Path环境变量 ...
- 【代码笔记】iOS-剧幕拉开形的首页
一,工程图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> #import "UIImage+SplitImageInto ...
- 如何把自己的MaC本变成一台服务器
Mac本Xcode10.9以后都默认安装阿帕奇服务器的,所以我们只需要找到他进行配置就可以了 下面看具体操作命令 vim编辑器命令 1.打开apache服务器,sudo apachectl start ...
- [读书笔记] Head First 设计模式
OO基础 抽象 封装 多态 继承 OO原则 原则 描述 封装变化 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混合在一起. 把会变化的部分取出来并“封装”起来,好让其他部分不 ...
- iOS之 PJSIP蓝牙外设音频支持
如题,蓝牙设备作为音频输出,在app中如果包含VoIP那么就要设定当连接蓝牙设备时候是否选择或者支持蓝牙输出 最近在处理一个工单就是公司的voip-app与硬件话机底座联调(蓝牙2.0)坑爹的如果是4 ...
- mysql一些小技巧
1 强制命中索引:force index 某些时候查询,索引会失效,可以进行强制命中索引 2 group_concat 能将相同的行组合起来. 当然,我推荐这种操作可以在代码中操作,如果必须在特定情况 ...
- mysql substring_index substring left right方法
函数简介: SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos F ...
- Proactor VS Reactor
proactor vs reactor 先发几本proactor 与 reactor 相关的电子书: http://files.cnblogs.com/files/f1194361820/reacto ...
- 为IIS站点添加限制IP
/// <summary> /// 添加站点限制IP /// </summary> /// <param name="sitename">站点名 ...
- x01.Lab.OpenCV: 计算机视觉
横看成岭侧成峰,计算视觉大不同.观看的角度不同,成像自然不同,这对计算机视觉来说,是个大麻烦.但计算机视觉应用如此广泛,却又有不得不研究的理由.指纹机大家都用过吧,这不过是冰山之一角.产品检测,机器人 ...