java各种文件转pdf,pdf加入水印

Java文件转pdf

个人需求,把所有文件夹内的数据转为pdf,目录类型不变,文件夹不转pdf

首先引入maven依赖

   <!-- Java pdf转换依赖 itextpdf  -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.11</version>
        </dependency>
        <!-- Java pdf转换依赖 itext-asian -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

逻辑代码

package com.nfd.common;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;

import java.io.*;

/**
 * 类描述:TODO
 *
 * @author admin
 * @date 2022-07-13 15:42
 **/
public class JavaToPdf {
    private static String FONT = "C:\\Windows\\Fonts\\CENTURY.TTF";
    public static String markName = "仅限参考"; //水印名称

    /**
     * java 转pdf
     *
     * @param text java文本的地址
     * @param pdf  需要转换为pdf的地址
     */
    public static void text2pdf(String text, String pdf) {
        try {
            Document document = new Document(PageSize.A4);
            OutputStream os = new FileOutputStream(new File(pdf));
            PdfWriter.getInstance(document, os);
            //方法一:使用Windows系统字体(TrueType)
            BaseFont baseFont = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            Font font = new Font(baseFont);
            document.open();
            InputStreamReader isr = new InputStreamReader(new FileInputStream(new File(text)), "UTF-8");
            BufferedReader bufferedReader = new BufferedReader(isr);
            String str;
            while ((str = bufferedReader.readLine()) != null) {
                document.add(new Paragraph(str, font));
            }


            document.close();
            os.close();
            bufferedReader.close();
            isr.close();

        } catch (Exception e) {
//            e.printStackTrace();
        }


    }


    /**
     * 为pdf文件加入水印
     *
     * @param srcFile  原pdf的地址
     * @param destFile 加入水印后pdf的地址
     * @param text     水印的内容
     * @throws Exception
     */
    public static void addWaterMark(String srcFile, String destFile, String text) throws Exception {
        // 待加水印的文件
        PdfReader reader = new PdfReader(srcFile);
        // 加完水印的文件
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destFile));

        int total = reader.getNumberOfPages() + 1;
        PdfContentByte content;

        // 设置透明度
        PdfGState gs = new PdfGState();
        gs.setFillOpacity(0.3f);
        // 设置字体
        BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
        // 循环对每页插入水印
        for (int i = 1; i < total; i++) {
            // 水印的起始
            content = stamper.getOverContent(i);
            content.setGState(gs);
            content.setFontAndSize(base, 50);
            // 开始
            content.beginText();
            // 设置颜色 默认为黑色
            content.setColorFill(BaseColor.BLACK);
            // 开始写入水印

            content.showTextAligned(Element.ALIGN_MIDDLE, text, 198,
                    221, 45);
            content.showTextAligned(Element.ALIGN_MIDDLE, text, 598,
                    221, 45);
            content.showTextAligned(Element.ALIGN_MIDDLE, text, 998,
                    221, 45);
            content.endText();
        }
        stamper.close();
        reader.close();
    }


    /**
     * 查找文件
     *因为再pdf加水印的时候,不能同名,所以下面会有name,pdfname,pdfmarkname三个。
     name为当前文件的路径名
     pdfname为转换pdf的路径名
     pdfmarkname为加入水印的pdf文件名
     之后把原文件删掉,再把pdf删掉,最后把水印pdf的名字,变为源文件名加.pdf
     * @param file
     */
    public static void convertFile(File file) {
        try {
            File[] list = file.listFiles();  //无法做到list多层文件夹数据
            if (list != null) {
                for (File temp : list) {     //先去递归删除子文件夹及子文件
                    convertFile(temp);   //注意这里是递归调用
                }
            }
            if (file.exists() && !file.isDirectory()) {

                String name = file.getAbsolutePath();  //自身路径
                String pdfname = file.getAbsolutePath().concat(".pdf");  //pdf路径
                String pdfmarkname = file.getAbsolutePath().concat("1.pdf");  //pdf加水印路径
                text2pdf(file.getAbsolutePath(), pdfname);   //创建pdf文件
                addWaterMark(pdfname, pdfmarkname, markName);   //创建pdf加水印文件
                File removeName = new File(name);   //删掉自身文件
                removeName.delete();
                File removePdfName = new File(pdfname);  //删掉pdf文件
                removePdfName.delete();
                File renameFile = new File(pdfmarkname); //把加水印文件名改为pdf文件名
                renameFile.renameTo(new File(pdfname));
            }

        } catch (Exception e) {

        }

    }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无奈的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值