JAVA动态生成PDF

一、依赖

        <!-- html转PDF -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>html2pdf</artifactId>
            <version>2.0.1</version>
        </dependency>
    <!-- iText maven仓库 -->
    <repositories>
        <repository>
            <id>itext</id>
            <name>iText Repository - releases</name>
            <url>https://repo.itextsupport.com/releases</url>
        </repository>
    </repositories>

二、Java类(PDF生成工具类)


import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.*;
import com.itextpdf.layout.font.FontProvider;
import com.itextpdf.layout.property.HorizontalAlignment;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.UnitValue;
import com.liuniukeji.common.utils.DateUtils;
import org.apache.commons.io.IOUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

/**
 * @author Jerry
 * @Title: PDFUtil
 * @Description: PDF工具类
 * @date 2019/9/28 8:32
 */
public class PDFUtil {

    public void createPdf() throws IOException {
        // 定义pdf文档的名称和存储位置
        String pdfFileName = "test.pdf";
        String pdfFilePath = "D://";
        String fontPath = "static/statics/font/msyh.ttf";
        // PdfWriter是一个可以写PDF文件的对象
        PdfWriter pdfWriter = new PdfWriter(pdfFilePath + pdfFileName);
        PdfDocument pdfDoc = new PdfDocument(pdfWriter);

        // 文档根节点,document,指定PageSize 为 A4
        Document document = new Document(pdfDoc, new PageSize(PageSize.A4));

        // 设置文档边距 上右下左
        document.setMargins(24, 20, 0, 20);

        // 读取字体文件,设置字体(一定要,否则中文显示乱码)
        Resource fontResource = new ClassPathResource(fontPath);
        InputStream inputStream = fontResource.getInputStream();
        PdfFont font = PdfFontFactory.createFont(IOUtils.toByteArray(inputStream), PdfEncodings.IDENTITY_H, false);

        Cell cell;
        Image image;
        Paragraph p;

        // 标题
        p = new Paragraph("合同正文标题");
        // 位置居中
        p.setTextAlignment(TextAlignment.CENTER);
        // 字体类型
        p.setFont(font);
        // 字体大小
        p.setFontSize(16f);
        document.add(p);

        // 正文使用表格方式
        Table table = new Table(1);
        table.setWidth(new UnitValue(UnitValue.PERCENT, 100f));

        cell = new Cell();
        p = new Paragraph("2.麦兜:啊,阿MAY呀,你看,偶默写拿了个A啊~~\r\n" +
                " 阿MAY:A你个头啊,你看看,是H啊,A和H差一点点的!!\r\n" +
                " 麦兜:啊,原来我差一点点就拿A!!\n" +
                " test english success");
        p.setTextAlignment(TextAlignment.CENTER);
        p.setFont(font);
        p.setFontSize(10f);
        cell.setBorder(null);
        cell.add(p);
        table.addCell(cell);
        document.add(table);

        String htmlStr = "<p class=\"MsoNormal\" align=\"center\" style=\"text-align:center;\">\n" +
                "\t<strong>算法程序集成说明</strong>\n" +
                "</p>\n" +
                "<p class=\"MsoNormal\" style=\"text-align:center;margin-left:0cm;\">\n" +
                "\t<strong>初装</strong><strong>CentOS\n" +
                "6.8</strong><strong>下安装</strong><strong>Python\n" +
                "3.6.6</strong>\n" +
                "</p>\n" +
                "<p class=\"MsoNormal\" style=\"text-align:center;\">\n" +
                "\t<strong>安装</strong><strong>GCC</strong><strong>开发工具:</strong>\n" +
                "</p>\n" +
                "<p class=\"MsoNormal\" style=\"text-align:center;\">\n" +
                "\t<strong>注:</strong><strong>如果安装系统时已经勾选了开发工具,那么这一步可以省略;</strong>\n" +
                "</p>\n" +
                "<p class=\"MsoNormal\" style=\"text-align:center;\">\n" +
                "\t<strong>$ sudo yum install -y gcc*</strong>\n" +
                "</p>\n" +
                "<p class=\"MsoNormal\" style=\"text-align:center;\">\n" +
                "\t<strong>=&gt; 直接安装所有的gcc相关的工具;</strong>\n" +
                "</p>\n" +
                "<p class=\"MsoNormal\">\n" +
                "\t<br />\n" +
                "</p>\n" +
                "<p class=\"MsoNormal\" style=\"text-align:center;\">\n" +
                "\t<strong>安装</strong><strong>zlib-devel</strong><strong>开发库:</strong>\n" +
                "</p>\n" +
                "<p class=\"MsoNormal\" style=\"text-align:center;\">\n" +
                "\t<strong>$ sudo yum install -y\n" +
                "zlib-devel</strong>\n" +
                "</p>\n";
        //导入字体
        FontProvider fontProvider = new FontProvider();
        fontProvider.addFont(fontPath);

        ConverterProperties c = new ConverterProperties();
        c.setFontProvider(fontProvider);
        c.setCharset("utf-8");
        List<IElement> list = HtmlConverter.convertToElements(htmlStr, c);
        for (IElement ie : list) {
            document.add((IBlockElement) ie);
        }

        Table table2 = new Table(2);
        table2.setWidth(new UnitValue(UnitValue.PERCENT, 100f));

        cell = new Cell();
        p = new Paragraph("甲方:\r\n" +
                " 装搭搭\r\n" +
                " 日期:" + DateUtils.getDateStrC(new Date()) + "\n");
        p.setTextAlignment(TextAlignment.LEFT);
        p.setFont(font);
        p.setFontSize(10f);
        cell.setBorder(null);
        cell.add(p);
        cell.setPaddingLeft(50f);
        table2.addCell(cell);

        // 加图片
        Resource imageResource = new ClassPathResource("static/statics/h-ui/images/default.jpeg");
        InputStream imageInputStream = imageResource.getInputStream();
        ImageData imageData = ImageDataFactory.create(IOUtils.toByteArray(imageInputStream));
        image = new Image(imageData);
        image.setHorizontalAlignment(HorizontalAlignment.RIGHT);
        image.setMaxWidth(80f);
        image.setMaxHeight(80f);
        cell = new Cell();
        cell.setBorder(null);
        cell.add(image);
        cell.setPaddingRight(50f);
        table2.addCell(cell);

        document.add(table2);

        document.close();
    }
}

三、字体文件

msyh.ttf下载地址:msyh.ttf

个人笔记:http://note.youdao.com/noteshare?id=3ccedc101c69436c536d98b979fb801b

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值