zoukankan      html  css  js  c++  java
  • 在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("
    ");
                }
                reader.close();
            } catch (FileNotFoundException e) {
                logger.error("FileNotFoundException: " + filePath);
            } catch (IOException e) {
                logger.error("IOException");
            }
            return sb.toString();
        }
  • 相关阅读:
    手把手教你在Android手机上实现蓝牙键盘的支持
    python 字符编码
    vi常用命令
    EditPlus for python
    Eclipse安装pydev插件
    手把手教你在Android手机上实现蓝牙键盘的支持
    2020年7月23日
    2020年7月20日
    2020年7月18日
    2020年7月22日
  • 原文地址:https://www.cnblogs.com/milton/p/5167229.html
Copyright © 2011-2022 走看看