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的更多相关文章

  1. 在Java代码中使用pdfBox将PDF转换为图片

    生成图片 // 生成图片 PDDocument pd = PDDocument.load(new File(filePath)); PDFRenderer pdfRenderer = new PDFR ...

  2. java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法

    1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...

  3. wsdl自动生成Java代码,根据wsdl生成Java代码

    wsdl自动生成Java代码,根据wsdl生成Java代码 >>>>>>>>>>>>>>>>>&g ...

  4. 【转】使用JavaParser获得Java代码中的类名、方法形参列表中的参数名以及统计总的文件个数与不能解析的文件个数

    遍历目录查找Java文件: public static void ergodicDir(File dir, HashSet<String> argNameSet, HashSet<S ...

  5. IDEA插件:快速删除Java代码中的注释

    背景   有时,我们需要删除Java源代码中的注释.目前有不少方法,比如: 实现状态机.该方式较为通用,适用于多种语言(取决于状态机支持的注释符号). 正则匹配.该方式容易误判,尤其是容易误删字符串. ...

  6. Spring MVC框架下在java代码中访问applicationContext.xml文件中配置的文件(可以用于读取配置文件内容)

    <bean id="propertyConfigurer" class="com.****.framework.core.SpringPropertiesUtil& ...

  7. 使用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 ...

  8. Android color(颜色) 在XML文件和java代码中

    Android color(颜色) 在XML文件和java代码中,有需要的朋友可以参考下. 1.使用Color类的常量,如: int color = Color.BLUE;//创建一个蓝色 是使用An ...

  9. 关于在Java代码中写Sql语句需要注意的问题

    最近做程序,时不时需要自己去手动将sql语句直接写入到Java代码中,写入sql语句时,需要注意几个小问题. 先看我之前写的几句简单的sql语句,自以为没有问题,但是编译直接报错. String st ...

随机推荐

  1. 【Android】中兴ZTE sdcard路径的问题

    测试机: ZTE U950 现象: 用Environment.getExternalStorageDirectory()取到的路径是/mnt/sdcard 真相: /mnt/sdcard/是一个空文件 ...

  2. iOS 自定义的对象类型的解档和归档

    自定义的对象的解档和归档 如果想对自己自定义的类进行解档和归档的话 必须遵循一个协议:NSCoding Student.h 文件 #import <Foundation/Foundation.h ...

  3. android Gui系统之SurfaceFlinger(3)---SurfaceFlinger

    7.SurfaceFlinger SurfaceFlinger在前面的篇幅了,多有涉及. SurfaceFlinger是GUI刷新UI的核心,所以任何关于SurfaceFlinger的改进都会对and ...

  4. MySql 中 case when then else end 的用法

    解释: SELECT                case                   -------------如果    when sex='1' then '男' ---------- ...

  5. .Net Attribute详解(上)-Attribute本质以及一个简单示例

    Attribute的直接翻译是属性,这和Property容易产生混淆,所以一般翻译成特性加以区分.Attribute常常的表现形式就是[AttributeName], 随意地添加在class, met ...

  6. SQL Server 2012实施与管理实战指南(笔记)——Ch4数据库连接组件

    4.数据库连接组件 访问数据库有多种不同的技术,包括ADO,ODBC,OLEDB,ADO.NET等这些都有一些共性.首先要建立连接(Connection),然后通过命令(Command)对数据库进行访 ...

  7. 【JSP】JSP基础学习记录(三)—— JSP的9个内置对象

    本节说一下JSP中的9个内置对象.这9个内置对象都是Servlet API接口的实例,只是JSP规范对他们进行了默认初始化(由JSP页面对应Servlet的_jspService()方法来创建这些实例 ...

  8. SQL Server锁定【2015.12.17】

    锁定的体系分类   1.表级锁 保证数据在逻辑上的一致性. 包含:行级锁.分页锁.表.数据分页.LOB分页以及索引叶子级锁. 2.闩 保证数据在物理上的一致性,系统采用,比锁少耗资源,对用户不可见. ...

  9. Linux IPC POSIX 信号量

    模型 #include<semaphore.h> #include<sys/stat.h> #include<fcntl.h> sem_open() //初始化并打 ...

  10. kill

    向一个/一些进程发送一个信号 $kill [-slL] -s指定发送的信号,可以使用名称或者信号编号 -l列出当前系统的所有信号 $kill -l 1) SIGHUP 2) SIGINT 3) SIG ...