zoukankan      html  css  js  c++  java
  • Itext 生成PDF

    Itext生成pdf

    • 添加依赖

       <dependency>
                  <groupId>com.itextpdf</groupId>
                  <artifactId>itextpdf</artifactId>
                  <version>5.5.13</version>
              </dependency>
      
              <dependency>
                  <groupId>com.itextpdf</groupId>
                  <artifactId>itext-asian</artifactId>
                  <version>5.2.0</version>
              </dependency>
      
    • PDFUtil类

      package com.qz.soft.sampling.util;
      
      import com.itextpdf.text.*;
      import com.itextpdf.text.pdf.BaseFont;
      import com.itextpdf.text.pdf.PdfPCell;
      import com.itextpdf.text.pdf.PdfPTable;
      import com.itextpdf.tool.xml.XMLWorkerFontProvider;
      
      import java.util.Map;
      
      
      /**
       * @author xuxin
       * @date 2021/10/14
       */
      public class PdfUtil {
      
      
          // main测试
          public static void main(String[] args) throws Exception {
              try {
      /*           // 1.新建document对象
                  Document document = new Document(PageSize.A4);// 建立一个Document对象
      
                  // 2.建立一个书写器(Writer)与document对象关联
                  File file = new File("E:\\PDFDemo.pdf");
                  File html = new File("E:\\徐鑫\\项目\\平板抽样\\1.四川纤检\\资料\\bbbb.html");
      
                Resource classPathResource = new ClassPathResource("/static/bbbb.html");
      
      
                  file.createNewFile();
                  PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(file));
      
                  document.open();
                  document.addTitle("Title@PDF-Java");// 标题
                  document.addAuthor("Author@umiz");// 作者
                  document.addSubject("Subject@iText pdf sample");// 主题
                  document.addKeywords("Keywords@iTextpdf");// 关键字
                  document.addCreator("Creator@umiz`s");// 创建者
      
                  XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
                  worker.parseXHtml(pdfWriter, document, classPathResource.getInputStream(), Charset.forName("UTF-8"));
                  document.close();*/
      
      
      /*
                  // 3.打开文档
                  document.open();
                  document.addTitle("Title@PDF-Java");// 标题
                  document.addAuthor("Author@umiz");// 作者
                  document.addSubject("Subject@iText pdf sample");// 主题
                  document.addKeywords("Keywords@iTextpdf");// 关键字
                  document.addCreator("Creator@umiz`s");// 创建者
      
                  // 4.向文档中添加内容
                  new PdfUtil().generatePDF(document);
      
                  // 5.关闭文档
                  document.close();*/
      
      
      
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
          // 定义全局的字体静态变量
          private static Font titlefont;
          private static Font headfont;
          private static Font keyfont;
          private static Font textfont;
          // 最大宽度
          private static int maxWidth = 520;
      
          // 静态代码块
          static {
              try {
                  // 不同字体(这里定义为同一种字体:包含不同字号、不同style)
                  BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                  titlefont = new Font(bfChinese, 16, java.awt.Font.BOLD);
                  headfont = new Font(bfChinese, 14, java.awt.Font.BOLD);
                  keyfont = new Font(bfChinese, 10, java.awt.Font.BOLD);
                  textfont = new Font(bfChinese, 10, Font.NORMAL);
      
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
      
          // 生成PDF文件
          public void generatePDF(Document document, Map<String,Object> map) throws Exception {
      
              // 段落
              Paragraph paragraph = new Paragraph("产品质量监督抽查/复查抽样单", titlefont);
              paragraph.setAlignment(1); //设置文字居中 0靠左   1,居中     2,靠右
              paragraph.setIndentationLeft(12); //设置左缩进
              paragraph.setIndentationRight(12); //设置右缩进
              paragraph.setFirstLineIndent(24); //设置首行缩进
              paragraph.setLeading(20f); //行间距
              paragraph.setSpacingBefore(5f); //设置段落上空白
              paragraph.setSpacingAfter(5f); //设置段落下空白
      
              //编号
              Paragraph paragraph_No = new Paragraph("编号:"+map.get("record_no").toString(), textfont);
              paragraph_No.setAlignment(2); //设置文字居中 0靠左   1,居中     2,靠右
              paragraph_No.setIndentationLeft(12); //设置左缩进
              paragraph_No.setIndentationRight(12); //设置右缩进
              paragraph_No.setFirstLineIndent(24); //设置首行缩进
              paragraph_No.setLeading(10f); //行间距
              paragraph_No.setSpacingBefore(5f); //设置段落上空白
              paragraph_No.setSpacingAfter(5f); //设置段落下空白
      
              // 表格
              //PdfPTable table = createTable();
              PdfPTable table = new PdfPTable(8);
              table.setWidthPercentage(100);
              table.setWidths(new float[]{40, 40, 40, 60, 100, 120, 80, 80});
      
      
              table.addCell(createCell("任务来源", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("taskSourceDesc").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("抽样依据及文号", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("plan_no").toString(), textfont, Element.ALIGN_LEFT));
              table.addCell(createCell("任务类型", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("taskTypeDesc").toString(), textfont, Element.ALIGN_LEFT));
      
              //抽查对象
              table.addCell(createCell("抽查对象", textfont, Element.ALIGN_LEFT,1,9));
              table.addCell(createCell("名称", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("name").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("抽样环节", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("sample_links").toString(), textfont, Element.ALIGN_LEFT,2));
      
              table.addCell(createCell("地址", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("address").toString(), textfont, Element.ALIGN_LEFT,3));
              table.addCell(createCell("抽查对象类型", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("type").toString(), textfont, Element.ALIGN_LEFT,2));
      
              table.addCell(createCell("邮政编码", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("zip_code").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("经营者所在地", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("operate_location").toString(), textfont, Element.ALIGN_LEFT,2));
      
              table.addCell(createCell("法定代表人", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("legal_person").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("抽查检验场所", textfont, Element.ALIGN_LEFT,1,4));
              table.addCell(createCell(map.get("inspection_place").toString(), textfont, Element.ALIGN_LEFT,3,4));
      
              table.addCell(createCell("联系人", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("contacts").toString(), textfont, Element.ALIGN_LEFT,2));
      
              table.addCell(createCell("联系电话", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("phone").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("统一社会信用代码", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("licence").toString(), textfont, Element.ALIGN_LEFT,2));
      
              table.addCell(createCell("从业人员数", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("employees").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("是否产生购样费", textfont, Element.ALIGN_LEFT,1));
      
              table.addCell(createCell(map.get("purchase_fee").toString(), textfont, Element.ALIGN_LEFT,3));
      
              table.addCell(createCell("营业收入", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("income").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("无偿提供样品", textfont, Element.ALIGN_LEFT,1));
              table.addCell(createCell(map.get("provide_sample").toString(), textfont, Element.ALIGN_LEFT,3));
      
      
              //生产单位
              table.addCell(createCell("生产单位", textfont, Element.ALIGN_LEFT,1,2));
              table.addCell(createCell("单位名称", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("name").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("联系人", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("contacts").toString(), textfont, Element.ALIGN_LEFT,3));
      
              table.addCell(createCell("单位地址", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("address").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("联系电话", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("phone").toString(), textfont, Element.ALIGN_LEFT,3));
      
      
              //受检产品
              table.addCell(createCell("受检产品", textfont, Element.ALIGN_LEFT,1,10));
              table.addCell(createCell("工业产品生产许可证", textfont, Element.ALIGN_LEFT,4));
              table.addCell(createCell("抽查通知书", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("file1_url").toString(), textfont, Element.ALIGN_LEFT,3));
      
              table.addCell(createCell("产品名称", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("product_name").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("规格型号", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("version_sample").toString(), textfont, Element.ALIGN_LEFT,3));
      
              table.addCell(createCell("生产日期/批号", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("batch_number").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("商标", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("logo").toString(), textfont, Element.ALIGN_LEFT,3));
      
              table.addCell(createCell("抽样数量", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("sample_amount").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("产品等级", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("product_level").toString(), textfont, Element.ALIGN_LEFT,3));
      
              table.addCell(createCell("库存量", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("store_amount").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("标注执行标准/技术文件", textfont, Element.ALIGN_LEFT,1,2));
              table.addCell(createCell(map.get("execute_file").toString(), textfont, Element.ALIGN_LEFT,3,2));
      
              table.addCell(createCell("批量/进货量", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("purchase_amount").toString(), textfont, Element.ALIGN_LEFT,2));
      
              table.addCell(createCell("单价(元)", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("price").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("封样状态", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("storage_state").toString(), textfont, Element.ALIGN_LEFT,3));
      
              table.addCell(createCell("备样量及封存地点", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("count_bak").toString()+" , "+map.get("storage_address"), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("寄送样地点", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("send_address").toString(), textfont, Element.ALIGN_LEFT,3));
      
              table.addCell(createCell("抽样日期", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell((String) map.get("sample_time"), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("寄送样截至日期", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("send_end_time").toString(), textfont, Element.ALIGN_LEFT,3));
      
              table.addCell(createCell("抽样地点", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("sample_address").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("抽样方式", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("sample_mode").toString(), textfont, Element.ALIGN_LEFT,3));
      
              //抽样机构
              table.addCell(createCell("抽样机构", textfont, Element.ALIGN_LEFT,1,3));
              table.addCell(createCell("单位名称", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("cy_company_name").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("联系人", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("cy_company_contact").toString(), textfont, Element.ALIGN_LEFT,3));
      
              table.addCell(createCell("单位地址", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("cy_company_address").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("联系电话", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("cy_company_phone").toString(), textfont, Element.ALIGN_LEFT,3));
      
              table.addCell(createCell("邮政编码", textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell(map.get("cy_company_zip").toString(), textfont, Element.ALIGN_LEFT,2));
              table.addCell(createCell("传真/Email", textfont, Element.ALIGN_LEFT));
              table.addCell(createCell(map.get("cy_company_fax").toString(), textfont, Element.ALIGN_LEFT,3));
      
              //备注
             table.addCell(createCell(map.get("remark").toString(), textfont, Element.ALIGN_LEFT,8,1,60));
      
             //签名
              table.addCell(createCell("抽查对象对抽查过程无异议:确认所抽产品为境内生产、销售的合格待销产品:已阅读并核实抽样单内容,无异议\n抽查对象单位签名(盖章)\n\n\n                                           ______年______月______日 ", textfont, Element.ALIGN_LEFT,5,1,80));
              table.addCell(createCell("抽样人(签名):\n\n\n\n                                           抽样机构(公章)\n\n                                              ______年______月______日", textfont, Element.ALIGN_LEFT,3,6,40));
              document.add(paragraph);
              document.add(paragraph_No);
              document.add(table);
      
          }
      
      
      /**------------------------创建表格单元格的方法start----------------------------*/
          /**
           * 创建单元格(指定字体)
           *
           * @param value
           * @param font
           * @return
           */
          public PdfPCell createCell(String value, Font font) {
              PdfPCell cell = new PdfPCell();
              cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
              cell.setHorizontalAlignment(Element.ALIGN_CENTER);
              cell.setPhrase(new Phrase(value, font));
              return cell;
          }
      
          /**
           * 创建单元格(指定字体、水平..)
           *
           * @param value
           * @param font
           * @param align
           * @return
           */
          public PdfPCell createCell(String value, Font font, int align) {
              PdfPCell cell = new PdfPCell();
              cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
              cell.setHorizontalAlignment(align);
              cell.setPhrase(new Phrase(value, font));
              return cell;
          }
      
          /**
           * 创建单元格(指定字体、水平居..、单元格跨x列合并)
           *
           * @param value
           * @param font
           * @param align
           * @param colspan
           * @return
           */
          public PdfPCell createCell(String value, Font font, int align, int colspan) {
              PdfPCell cell = new PdfPCell();
              cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
              cell.setHorizontalAlignment(align);
              cell.setColspan(colspan);
              cell.setPhrase(new Phrase(value, font));
              return cell;
          }
      
      
      
          /**
           * 创建单元格(指定字体、水平居..、单元格跨x列 Y列合并)
           *
           * @param value
           * @param font
           * @param align
           * @param colspan
           * @param rowspan
           * @return
           */
          public PdfPCell createCell(String value, Font font, int align, int colspan, int rowspan) {
              PdfPCell cell = new PdfPCell();
              cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
              cell.setHorizontalAlignment(align);
              cell.setColspan(colspan);
              cell.setRowspan(rowspan);
              cell.setPhrase(new Phrase(value, font));
              return cell;
          }
      
          public PdfPCell createCell(String value, Font font, int align, int colspan, int rowspan,int height) {
              PdfPCell cell = new PdfPCell();
              cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
              cell.setHorizontalAlignment(align);
              cell.setColspan(colspan);
              cell.setRowspan(rowspan);
              cell.setPhrase(new Phrase(value, font));
              cell.setFixedHeight(height);
              return cell;
          }
          /**
           * 创建单元格(指定字体、水平居..、单元格跨x列合并、设置单元格内边距)
           *
           * @param value
           * @param font
           * @param align
           * @param colspan
           * @param boderFlag
           * @return
           */
          public PdfPCell createCell(String value, Font font, int align, int colspan, boolean boderFlag) {
              PdfPCell cell = new PdfPCell();
              cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
              cell.setHorizontalAlignment(align);
              cell.setColspan(colspan);
              cell.setPhrase(new Phrase(value, font));
              cell.setPadding(3.0f);
              if (!boderFlag) {
                  cell.setBorder(0);
                  cell.setPaddingTop(15.0f);
                  cell.setPaddingBottom(8.0f);
              } else if (boderFlag) {
                  cell.setBorder(0);
                  cell.setPaddingTop(0.0f);
                  cell.setPaddingBottom(15.0f);
              }
              return cell;
          }
      
          /**
           * 创建单元格(指定字体、水平..、边框宽度:0表示无边框、内边距)
           *
           * @param value
           * @param font
           * @param align
           * @param borderWidth
           * @param paddingSize
           * @param flag
           * @return
           */
          public PdfPCell createCell(String value, Font font, int align, float[] borderWidth, float[] paddingSize, boolean flag) {
              PdfPCell cell = new PdfPCell();
              cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
              cell.setHorizontalAlignment(align);
              cell.setPhrase(new Phrase(value, font));
              cell.setBorderWidthLeft(borderWidth[0]);
              cell.setBorderWidthRight(borderWidth[1]);
              cell.setBorderWidthTop(borderWidth[2]);
              cell.setBorderWidthBottom(borderWidth[3]);
              cell.setPaddingTop(paddingSize[0]);
              cell.setPaddingBottom(paddingSize[1]);
              if (flag) {
                  cell.setColspan(2);
              }
              return cell;
          }
      /**------------------------创建表格单元格的方法end----------------------------*/
      
      
      /**--------------------------创建表格的方法start------------------- ---------*/
          /**
           * 创建默认列宽,指定列数、水平(居中、右、左)的表格
           *
           * @param colNumber
           * @param align
           * @return
           */
          public PdfPTable createTable(int colNumber, int align) {
              PdfPTable table = new PdfPTable(colNumber);
              try {
                  table.setTotalWidth(maxWidth);
                  table.setLockedWidth(true);
                  table.setHorizontalAlignment(align);
                  table.getDefaultCell().setBorder(1);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return table;
          }
      
          /**
           * 创建指定列宽、列数的表格
           *
           * @param widths
           * @return
           */
          public PdfPTable createTable(float[] widths) {
              PdfPTable table = new PdfPTable(widths);
              try {
                  table.setTotalWidth(maxWidth);
                  table.setLockedWidth(true);
                  table.setHorizontalAlignment(Element.ALIGN_CENTER);
                  table.getDefaultCell().setBorder(1);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return table;
          }
      
          /**
           * 创建空白的表格
           *
           * @return
           */
          public PdfPTable createBlankTable() {
              PdfPTable table = new PdfPTable(1);
              table.getDefaultCell().setBorder(0);
              table.addCell(createCell("", keyfont));
              table.setSpacingAfter(20.0f);
              table.setSpacingBefore(20.0f);
              return table;
          }
      /**--------------------------创建表格的方法end------------------- ---------*/
      
      }
      
      class AsianFontProvider extends XMLWorkerFontProvider {
          @Override
          public Font getFont(final String fontname, String encoding, float size, final int style) {
              try {
                  BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                  return new Font(bfChinese, size, style);
              } catch (Exception e) {
              }
              return super.getFont(fontname, encoding, size, style);
          }
      }
      
      

    Html转PDF

    • 添加依赖

      <dependency>
          <groupId>com.itextpdf</groupId>
          <artifactId>html2pdf</artifactId>
          <version>4.0.0</version>
      </dependency>
      
    • 代码

      import com.itextpdf.html2pdf.HtmlConverter;
      
      import java.io.File;
      import java.io.FileInputStream;
      import java.io.FileOutputStream;
      import java.io.IOException;
      
      public class HtmlToPDF {
          private static final String ORIG = "/uploads/input.html";
          private static final String OUTPUT_FOLDER = "/myfiles/";
      
          public static void main(String[] args) throws IOException {
              File htmlSource = new File(ORIG);
              File pdfDest = new File(OUTPUT_FOLDER + "output.pdf");
              HtmlConverter.convertToPdf(new FileInputStream(htmlSource), new FileOutputStream(pdfDest));
          }
      
      }
      
      
      

    官网地址:Convert HTML & CSS to rich, smart PDF documents - iText (itextpdf.com)

  • 相关阅读:
    mysql多表关系
    mysql支持的数据类型
    数据库基本操作
    线程基础
    生产者和消费者模型
    并发编程一
    元类
    linux 关机/重启命令
    linux前后台任务切换
    centos7最小化安装后,yum安装pstree及mlocate
  • 原文地址:https://www.cnblogs.com/seanRay/p/15602264.html
Copyright © 2011-2022 走看看