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) {
}
}
}