导出带水印的PDF

简介: 导出带水印的PDF

背景


有时候我们需要导出单个pdf数据,上面需要加上一些水印或者图片


导出样图


1.png

maven依赖

<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>

测试demo

public class PDFCellUtils {
    /**
     * 创建单元格(指定字体)
     * @param value 单元格展示值文字
     * @param font  文字字体
     * @return
     */
    public static 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));
        cell.setPadding(6.0f);
        return cell;
    }
    /**
     * 创建单元格(指定字体、水平对齐方式)
     * @param value 值
     * @param font  字体
     * @param align 水平对齐方式
     * @return
     */
    public static 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));
        cell.setPadding(6.0f);
        return cell;
    }
    /**
     * 创建单元格(指定字体、水平居..、单元格跨x列合并)
     * @param value 值
     * @param font  字体
     * @param align 水平对齐方式
     * @param colspan   单元格跨x合并
     * @return
     */
    public static 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));
        cell.setPadding(6.0f);
        return cell;
    }
    /**
     * 创建单元格(指定字体、水平对齐方式、单元格跨x列合并, 单元格跨y行合并)
     * @param value
     * @param font
     * @param align
     * @param colspan
     * @param rowspan
     * @return
     */
    public static 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));
        cell.setPadding(6.0f);
        return cell;
    }
    /**
     * 创建单元格(指定字体、水平居..、单元格跨x列合并、设置单元格内边距)
     * @param value 值
     * @param font  字体
     * @param align 水平对齐方式
     * @param colspan  单元格跨x列合并
     * @param boderFlag 设置单元格内边距
     * @return
     */
    public static 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(6.0f);
        if (!boderFlag) {
            cell.setBorder(0);
        } else if (boderFlag) {
            cell.setBorder(0);
        }
        return cell;
    }
    /**
     * 创建单元格(指定字体、水平..、边框宽度:0表示无边框、内边距)
     * @param value 值
     * @param font  子图
     * @param align 水平对齐方式
     * @param borderWidth   边框宽度:0表示无边框
     * @param paddingSize
     * @param flag
     * @return
     */
    public static 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;
    }
}
public class PdfText {
    // 标题字体
    private static Font title_font;
    private static Font text_font;
    // 正文加粗字体
    private static Font bold_text_Font;
    // 缩进符
    private static String TABLE = "\t";
    // 最大宽度
    private static int maxWidth = 520;
    static {
        try {
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            title_font = new Font(bfChinese, 26, Font.BOLD);
            text_font = new Font(bfChinese, 10, Font.NORMAL);
            bold_text_Font = new Font(bfChinese, 10, Font.BOLD);
        } catch (Exception e) {
            log.error("付款单: PDF字体初始化异常. STSong-Light, UniGB-UCS2-H", e);
        }
    }
    public static final String imgPath_native = "/Users/dasouche/IdeaProjects/test/image/test2.png";
    public static void generatePDF(Document document) throws Exception {
        // 标题
        Paragraph title = new Paragraph("xxx审批单", title_font);
        //设置文字居中 (0靠左/1居中/2靠右)
        title.setAlignment(1);
        title.setSpacingBefore(80f); //设置段落上空白
        title.setSpacingAfter(10f); //设置段落下空白
        document.add(title);
        // 表格 默认7列
        PdfPTable table = createTable(8, Element.ALIGN_CENTER);
        table.addCell(PDFCellUtils.createCell("xxx部门", text_font, Element.ALIGN_LEFT, 4, false));
        table.addCell(PDFCellUtils.createCell("申请时间:2022年4月28日", text_font, Element.ALIGN_RIGHT, 4, false));
        table.addCell(PDFCellUtils.createCell("审批编码", bold_text_Font, Element.ALIGN_CENTER, 2, 1));
        table.addCell(PDFCellUtils.createCell("CG3378612964", text_font, Element.ALIGN_CENTER, 1));
        table.addCell(PDFCellUtils.createCell("编号", bold_text_Font));
        table.addCell(PDFCellUtils.createCell("BM1890", text_font));
        table.addCell(PDFCellUtils.createCell("申请人", bold_text_Font, Element.ALIGN_CENTER, 2));
        table.addCell(PDFCellUtils.createCell("吴彦祖", text_font, Element.ALIGN_LEFT, 6));
        table.addCell(PDFCellUtils.createCell("申请人部门", bold_text_Font, Element.ALIGN_CENTER, 2));
        table.addCell(PDFCellUtils.createCell("xx部门", text_font, Element.ALIGN_LEFT, 6));
        table.addCell(PDFCellUtils.createCell("款项", bold_text_Font, Element.ALIGN_CENTER, 2));
        table.addCell(PDFCellUtils.createCell("云服务费用", text_font, Element.ALIGN_LEFT, 6));
        table.addCell(PDFCellUtils.createCell("明细", bold_text_Font, Element.ALIGN_CENTER, 2, 2));
        table.addCell(PDFCellUtils.createCell("事由", text_font));
        table.addCell(PDFCellUtils.createCell("rds", text_font));
        table.addCell(PDFCellUtils.createCell("金额(元)", bold_text_Font));
        table.addCell(PDFCellUtils.createCell("99999", text_font));
        table.addCell(PDFCellUtils.createCell("备注", bold_text_Font));
        table.addCell(PDFCellUtils.createCell("B0321", text_font));
        table.addCell(PDFCellUtils.createCell("事由", bold_text_Font));
        table.addCell(PDFCellUtils.createCell("云服务器ECS", text_font));
        table.addCell(PDFCellUtils.createCell("金额(元)", bold_text_Font));
        table.addCell(PDFCellUtils.createCell("99999", text_font));
        table.addCell(PDFCellUtils.createCell("备注", bold_text_Font));
        table.addCell(PDFCellUtils.createCell("B0322", text_font));
        byte[] bFile = Files.readAllBytes(new File(imgPath_native).toPath());
        //本地文件方式 ,也可以直接使用图片url
        Image image = Image.getInstance(bFile);
        image.setAlignment(Image.ALIGN_CENTER);
        image.scalePercent(10); //依照比例缩放
        image.setAbsolutePosition(400f, 720f);
        document.add(image);
        document.add(table);
    }
    public static void main(String[] args) {
        try {
            Document document = new Document();
            File fileDir = new File("./pdf");
            if (!fileDir.exists()) {
                fileDir.mkdirs();
            }
            File file = new File("./pdf/PDFDemo.pdf");
            try {
                file.createNewFile();
            } catch (IOException e) {
                return;
            }
            PdfWriter.getInstance(document, new FileOutputStream(file));
            document.open();
            generatePDF(document);
            document.close();
            System.out.println(file.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 创建默认列宽,指定列数、水平(居中、右、左)的表格
     * @param colNumber
     * @param align
     * @return
     */
    public static 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;
    }
}

图片

1.png

目录
打赏
0
0
0
0
165
分享
相关文章
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
【PDF提取全自动改名】如何批量提取PDF指定区域的文字内容,用内容批量给PDF命名或者导出表格,学会全自动解放双手
在生活和工作中,我们常需处理大量PDF文件,如银行单据、税收单据等。手动处理效率低下,而使用“咕嘎批量PDF多区域内容提取重命名导表格系统”可快速完成数千份文档的处理,大幅提高效率。该工具通过获取PDF各区域内容坐标,导入并处理文件,最终将信息提取至表格,并根据关键信息对PDF进行重命名,方便管理和查找。
475 2
猫步简历 - 开源免费AI简历生成器 | 一键导出PDF/JSON
猫步简历是一款免费开源的AI简历生成器,帮助用户轻松创建独特、专业的简历。支持导出超高清PDF、图片、JSON等多种格式,并提供AI智能创作、润色和多语种切换等功能。拥有海量模板、高度定制化模块及完善的后台管理系统,助力求职者脱颖而出。官网:https://maobucv.com,GitHub开源地址:https://github.com/Hacker233/resume-design。
1248 10
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
534 8
|
9月前
|
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
1789 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
前端界面生成PDF并导出下载
【10月更文挑战第21天】利用合适的第三方库,你可以在前端轻松实现界面生成 PDF 并导出下载的功能,为用户提供更方便的文档分享和保存方式。你还可以根据具体的需求进一步优化和定制生成的 PDF 文件,以满足不同的业务场景要求。
|
10月前
|
vue导出pdf(接口)
vue导出pdf(接口)
86 3
安利一款基于canvas/svg的富文本编辑器-支持在线导出PDF、DOCX
高性能:利用Canvas和SVG进行图形和矢量图形的渲染,提供高性能的绘图能力。 可扩展性:Canvas-Editor是一个开源项目,支持通过插件机制扩展编辑器的功能,如DOCX、PDF导出、表格分页等。 丰富的文本编辑功能:支持多种文本编辑操作,如插入表格、分页、性能优化等。
972 0
【福利😍】2024年最新103本互联网大厂程序员编程书合集【高清文字版无水印pdf】
推荐优质编程电子书资源,涵盖Python入门、算法设计、Java高并发、Docker、机器学习等领域,适合从小白到高级开发者。书籍包括《编程小白的第一本Python入门书》、《编程珠玑》等,助你提升技能,紧跟技术前沿,在职场中脱颖而出。下载地址含国内外网盘链接,更多资源可访问资料吧网站获取。
582 0

热门文章

最新文章

AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等