在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 ...
随机推荐
- GpsLocationProvider中的sendExtraCommand方法
Android系统源码中GpsLocationProvider类中包含sendExtraCommand方法,代码如下 @Override public boolean sendExtraCommand ...
- IOS开发——02_第一个类的创建、声明…
在OC中,一般用2个文件来描述一个类: 1..h:类的声明文件,用于声明成员变量.方法.类的声明使用关键字@interface和@end. 注:.h中只是用做方法声明,并不进行实现.什么叫声明呢?简单 ...
- 【iOS】使用safari对webview进行调试
[iOS]使用safari对webview进行调试 在web开发的过程中,抓包.调试页面样式.查看请求头是很常用的技巧.其实在iOS开发中,这些技巧也能用(无论是模拟器还是真机),不过我们需要用到ma ...
- Cordoval在iOS中的运用整理
一:关于Cordoval理论知识 1:PhoneGap是手机平台上流行的一款中间件.它构建在各种手机平台所提供的WebView(浏览器内核)组件的基础之上,使用javascript语言对应用开发者提供 ...
- mac系统如何显示和隐藏文件
显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles YES隐藏Mac隐藏文件的命令:defaults write com.ap ...
- winform ListView应用之分组、重绘图标、网格线 (c# .net winform)
最近在winform应用中需要用到可分组的数据列表功能,DataGridView默认没有提供分组的功能,而OutlookGrid(http://www.codeproject.com/KB/grid/ ...
- 弹出层在兼容模式和IE8模式下显示不正常
弹出层在火狐.谷歌.360极速模式.IE6下都能100%面积正常显示,但在IE8和360的兼容模式下只显示弹出层下半部分或右半部分的内容,在主页面加上: <meta http-equiv=&qu ...
- SQL中JOIN 的用法
关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2:create table table1(id int ...
- <a>标签,鼠标经过或者停留触发延时响应事件
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcUAAAEoCAIAAACmeX2PAAAgAElEQVR4nOzdd3xUdb74f3+Pu3v33t ...
- android 反编译apktool工具
下载地址:http://pan.baidu.com/s/1bnHANtd 1.将编译的*.apk放在apktool的根目录下:2.双击“解压软件.bat”后,会提示完成:这样就反编译成功以:3.查看反 ...