1. 生成PDF

载入字体

  1. static {
  2. FontFactory.register("/fonts/msyh.ttf");
  3. FontFactory.register("/fonts/msyhbd.ttf");
  4. FontFactory.register("/fonts/simsun.ttc");
  5. FontFactory.register("/fonts/simhei.ttf");
  6. }

生成PDF

  1. Rectangle rectPageSize = new Rectangle(PageSize.A4);// A4纸张
  2. Document document = new Document(rectPageSize, 40, 40, 40, 40);// 上、下、左、右间距
  3. try {
  4. String filePath = StaticConfig.getConfig("file_path") + invest.getContractPath();
  5. String folderPath = filePath.substring(0, filePath.lastIndexOf("/") + 1);
  6. File folder = new File(folderPath);
  7. if (!folder.exists()) {
  8. folder.mkdirs();
  9. }
  10.  
  11. PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filePath));
  12. writer.setPdfVersion(PdfWriter.PDF_VERSION_1_7);
  13. document.addCreationDate();
  14. document.addCreator("rockbb");
  15. document.addTitle("rockbbPDF");
  16. document.addKeywords("export");
  17. document.addSubject("rockbb业务文件");
  18. document.open();
  19. Font yahei9px = FontFactory.getFont("微软雅黑", BaseFont.IDENTITY_H, 9);
  20. Font yahei10px = FontFactory.getFont("微软雅黑", BaseFont.IDENTITY_H, 10);
  21. Font yahei11px = FontFactory.getFont("微软雅黑", BaseFont.IDENTITY_H, 11);
  22. Font yahei12px = FontFactory.getFont("微软雅黑", BaseFont.IDENTITY_H, 12);
  23.  
  24. document.add(paragraph("编号:[" + invest.getContractSn() + "]", yahei9px, Paragraph.ALIGN_RIGHT));
  25.  
  26. //表格
  27. PdfPTable table = new PdfPTable(3);
  28. table.setSpacingBefore(10.0f);
  29. table.setWidthPercentage(100);
  30. table.setWidths(new float[]{0.25f, 0.25f, 0.5f});
  31.  
  32. PdfPCell cell = cell("当事方", yahei11px, Element.ALIGN_CENTER, Element.ALIGN_MIDDLE);
  33. cell.setColspan(3);
  34. table.addCell(cell);
  35.  
  36. cell = cell("甲方(投资者)", yahei10px);
  37. cell.setRowspan(3);
  38. table.addCell(cell);
  39. table.addCell(cell("姓名", yahei10px));
  40. table.addCell(cell(user.getRealName(), yahei10px));
  41. table.addCell(cell("用户ID", yahei10px));
  42. table.addCell(cell(user.getTel(), yahei10px));
  43. table.addCell(cell("身份证", yahei10px));
  44. table.addCell(cell(user.getIdNumber(), yahei10px));
  45.  
  46. cell = cell("乙方", yahei10px);
  47. cell.setRowspan(3);
  48. table.addCell(cell);
  49. table.addCell(cell("名称", yahei10px));
  50. table.addCell(cell("公司", yahei10px));
  51. table.addCell(cell("住所", yahei10px));
  52. table.addCell(cell("北京市朝阳区", yahei10px));
  53. table.addCell(cell("注册证", yahei10px));
  54. table.addCell(cell("", yahei10px));
  55. document.add(table);
  56.  
  57. document.add(paragraph("* 凡本协议未列示的产品信息以平台产品说明书页面显示的产品具体信息为准。", yahei9px));
  58.  
  59. document.add(paragraph("第二部分 协议条款", yahei12px, Paragraph.ALIGN_LEFT, 10.0f));
  60.  
  61. document.add(paragraph(agreement, yahei10px, Paragraph.ALIGN_LEFT, 5.0f));
  62.  
  63. document.close();
  64. writer.close();
  65.  
  66. } catch (FileNotFoundException e) {
  67. logger.error("FileNotFoundException");
  68. logger.debug(e.getMessage(), e);
  69. } catch (IOException e) {
  70. logger.error("IOException");
  71. logger.debug(e.getMessage(), e);
  72. } catch (DocumentException e) {
  73. logger.error("DocumentException");
  74. logger.debug(e.getMessage(), e);
  75. }

工具方法

  1. private static PdfPCell cell(String content, Font font) {
  2. PdfPCell cell = new PdfPCell(new Phrase(content, font));
  3. cell.setBorderColor(new BaseColor(196, 196, 196));
  4. cell.setPadding(5.0f);
  5. cell.setPaddingTop(1.0f);
  6. return cell;
  7. }
  8.  
  9. private static PdfPCell cell(String content, Font font, int hAlign, int vAlign) {
  10. PdfPCell cell = new PdfPCell(new Phrase(content, font));
  11. cell.setBorderColor(new BaseColor(196, 196, 196));
  12. cell.setVerticalAlignment(vAlign);
  13. cell.setHorizontalAlignment(hAlign);
  14. cell.setPadding(5.0f);
  15. cell.setPaddingTop(1.0f);
  16. return cell;
  17. }
  18.  
  19. private static Paragraph paragraph(String content, Font font) {
  20. return new Paragraph(content, font);
  21. }
  22.  
  23. private static Paragraph paragraph(String content, Font font, int hAlign) {
  24. Paragraph paragraph = new Paragraph(content, font);
  25. paragraph.setAlignment(hAlign);
  26. return paragraph;
  27. }
  28.  
  29. private static Paragraph paragraph(String content, Font font, int hAlign, float spacingBefore) {
  30. Paragraph paragraph = new Paragraph(content, font);
  31. paragraph.setAlignment(hAlign);
  32. paragraph.setSpacingBefore(spacingBefore);
  33. return paragraph;
  34. }

在生成过程中加盖图片, 注意, 因为无法指定页码, 所以这段代码要放到你需要加盖图片的那页对应的代码上

  1. byte[] bytes = FileUtil.readResourceImage("/text/stamp.png");
  2. if (bytes != null) {
  3. Image image = Image.getInstance(bytes);
  4. PdfContentByte canvas = writer.getDirectContent();
  5. writer.getPageNumber();
  6. // float width = image.getScaledWidth();
  7. // float height = image.getScaledHeight();
  8. canvas.addImage(image, 150, 0, 0, 150, rectPageSize.getWidth() - 300, rectPageSize.getHeight() - 300);
  9. } else {
  10. logger.error("Failed to read /text/stamp.png");
  11. }

读取项目资源文件的工具方法

  1. /**
  2. * 读取项目图片资源文件
  3. *
  4. * @param filePath 以'/'开头的项目资源文件路径
  5. * @return
  6. */
  7. public static byte[] readResourceImage(String filePath) {
  8. try {
  9. InputStream is = FileUtil.class.getResourceAsStream(filePath);
  10. BufferedImage image = ImageIO.read(is);
  11. is.close();
  12. ByteArrayOutputStream os = new ByteArrayOutputStream();
  13. ImageIO.write(image, "png", os);
  14. return os.toByteArray();
  15. } catch (FileNotFoundException e) {
  16. logger.error("FileNotFoundException: " + filePath);
  17. } catch (IOException e) {
  18. logger.error("IOException");
  19. }
  20. return null;
  21. }
  22.  
  23. /**
  24. * 读取项目资源文件内容
  25. *
  26. * @param filePath 以'/'开头的项目资源文件路径
  27. * @return 文件内容
  28. */
  29. public static String readResourceContent(String filePath) {
  30. StringBuilder sb = new StringBuilder();
  31. try {
  32. BufferedReader reader = new BufferedReader(new InputStreamReader(FileUtil.class.getResourceAsStream(filePath)));
  33. String line;
  34. while ((line = reader.readLine()) != null) {
  35. sb.append(line);
  36. sb.append("\n");
  37. }
  38. reader.close();
  39. } catch (FileNotFoundException e) {
  40. logger.error("FileNotFoundException: " + filePath);
  41. } catch (IOException e) {
  42. logger.error("IOException");
  43. }
  44. return sb.toString();
  45. }

在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 手机卫士--构建服务端json、请求网络数据

    本文地址:http://www.cnblogs.com/wuyudong/p/5900384.html,转载请注明源地址. 数据的传递 客户端:发送http请求 http://www.oxx.com/ ...

  2. 不用画线 设置UITableView的全屏分隔线

    如图  添加如下代码 sTableView.separatorInset = UIEdgeInsetsZero; sTableView.layoutMargins = UIEdgeInsetsZero ...

  3. 驳 GarbageMan 的《一个超复杂的简介递归》——对延迟计算的实验和思考

    这是一篇因骂战而起的博文,GarbageMan 在该文章回复中不仅对我进行了侮辱,还涉及了我的母校,特写此文用理性的分析和实验予以回击. 在此也劝告 GarbageMan,没什么本事就别在那叫嚣了,还 ...

  4. SQL Server调优系列进阶篇(查询优化器的运行方式)

    前言 前面我们的几篇文章介绍了一系列关于运算符的基础介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符. ...

  5. Java虚拟机 - 内存模型

    本文主要介绍Java虚拟机的内存分布以及对象的创建过程. 一.Java虚拟机的内存分布 文章开始前读者需要了解Java虚拟机的运行时数据区是怎样划分的.如下图所示: 1.程序计数器(Program C ...

  6. Linux学习--------一

    用户不能直接操作Kemel,所以需要通过Shell来操作Kemel(内核) Shell 分为CLI与GUI两种 CLI:Command Line Interface GUI:Graphical Use ...

  7. iNeedle系统之国舜项目

    一.简介 本周公司接了一个小项目,是给北京国舜科技股份有限公司做一个HTTP相关的小功能产品.大概实现功能是将交换机的源数据通过解析,分析出HTTP包配对的request和response头,并把每对 ...

  8. 双核CPU,跑程序会报rcu_sched_state detected stalls on CPUs/tasks 错误

    有一份SDK,之前跑在PPC405EX上没问题。最近换平台,CPU使用了PowerPC的P1020,双核。linux版本也升级到了3.0.48版本。升级之后出现了一个问题:SDK里面的程序跑一段时间之 ...

  9. 一个PHP混淆后门的分析

    洒家的朋友的公司的某个站发现最近被上传了一个后门程序.为了取证我们抓取了HTTP请求流量,看到了一堆莫名其妙看似经过混淆的请求,响应也是看似base64的乱码.洒家用了2个小时静态分析了一遍,并写了利 ...

  10. uva 12745 Wishmaster(2-sat)

    12745 Wishmaster view code#include <iostream> #include <cstdio> #include <algorithm&g ...