在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 ...
随机推荐
- iOS 设置系统屏幕亮度
// 设置系统屏幕亮度 // [UIScreen mainScreen].brightness = value; // 或者 [[UIScreen mainScreen] se ...
- 初学HTML 常见的标签(一) 文本标签
最近做iOS开发的过程中, 发现要涉及到JS和原生OC(Swift)的交互, 作为一个Developer, 本着克服一切问题的原则, 开始学习HTML, 在这里记录下自己的学习笔记, 方便以后的复习, ...
- XCode设置(怎么让代码收缩)
有时候刚使用一台电脑 可能会没有代码收缩的功能. 在哪里设置呢?看图 打开xcode 的 偏好设置 找到textEditing 把Code folding勾选上 就可以了
- iOS-字符属性NSAttributedString描述
/* 字符属性 字符属性可以应用于 attributed string 的文本中. NSString *const NSFontAttributeName;(字体) NSString *const N ...
- Photo Shop切图
切图之前 哪些是需要切出来的? 修饰性的 (一般用在background属性) 图标.logo 有特殊效果的按钮 文字等 非纯色的背景 内容性的 (一般用在img标签) Banner.广告图片 文章 ...
- C#实现函数默认值和C#4.0实现默认值
static void Main(string[] args) { SayHello(); SayHello("侯志强"); Console.ReadKey(); } C#.0实现 ...
- 华为S5700S-52P-LI-AC千兆网管交换机web登录界面配置
研究一下午,包装附的说明书根本就是错误的,通过技术售后和官方的文档结合,总算可以登录交换机的web管理界面. 首先需要使用通讯控制线缆(包装中附)连接电脑和交换机,一头接交换机的Console口,一头 ...
- java 中的volatile
本博客摘录自 http://www.infoq.com/cn/articles/java-memory-model-4/ 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别.理解 ...
- 0002 Oracle账户相关的几个语句
Oracle安装完成后,在“开始”里找到SQL Plus运行,要求输入帐号和密码,用system/密码连接. 1.Oracle里有一个默认的scott账户密码tiger,用该账户连接: CONN 用户 ...
- 关于iOS构建版本提交iTunes后,一直不出现,没加号的解决方案
最近第一次遇到,正常打包,上传iTunes App Store,都能正常upload. 也可能是因为刚升了Xcode 8 的缘故,莫名其妙的小问题... 描述如下: 如果进iTunes的活动界面,也能 ...