如果你有一个PDF文档,然后你想把它发成图文笔记emmm,最好再加个水印,你会怎么做?
其实也不麻烦,打开PDF文档,挨个截图,然后打开PS一张一张图片拖进去,再把水印图片拖进去,一张一张导出,搞定~
但但但是,你是一个程序员呀,还是会用cursor的程序员,所以(●°u°●) 」开干~~
某天下午你正摸着鱼,有个叫产品经理的物种突然出现,给你发了个PDF:"把这个用户手册做成小红书图文笔记,每页加统一水印,很急很急哦!"
你盯着200页的文档瞳孔地震,然后安慰了下自己,其实也不太麻烦哈哈。。。
打开PDF文档,挨个截图,然后打开PS一张一张图片拖进去,再把水印图片拖进去,一张一张导出,搞定~
但但但但但但是!你摸着自己锃亮的程序员脑门(也可能是日渐稀疏的发际线),突然意识到:我可是一个程序员呀,还是会用AI的程序员,所以(●°u°●) 」开干~~
▋ 原始人 vs 赛博人 工作流对比
原始部落打法:
- 打开PDF→滚轮翻页→挨个截图(啊😭第37次忘记取消显示聊天窗口、啊这页截没截?不记得。。打开文件夹看看。。)
- 打开Photoshop:先导入截图,再拖水印,调整位置。。。
- 导出(编号到几来着?)
long time later。。。
而你是赛博程序员,操作不光要简单准确,还必须优雅:
打开Cursor,新建terminal,输入个提示词,然后回车~转身咖啡还没泡完,200张带水印的笔记整整齐齐躺在output文件夹里,甚至自动按文档名+编号整理完毕➡️关机下班(啊😭还要打卡,再坐一会吧)~
我们还是看下效果,这是原文档:
这是生成的图片
还加了水印!
二话不说,完整代码如下(记得请我喝咖啡哈哈(^^)):
package com.pdf2pic;
import org.apache.pdfbox.rendering.ImageType;
import java.io.File;
/**
* PDF转图片工具
* 用于将指定文件夹下的PDF文件转换为图片
*/
public class Pdf2PicConverter {
public static void main(String[] args) {
// 项目根目录下 java -jar target/pdf2pic-1.0-SNAPSHOT-jar-with-dependencies.jar pdfs output
if (args.length < 2) {
System.out.println("用法: java -jar pdf2pic.jar <PDF源文件夹> <图片输出文件夹> [DPI] [格式]");
System.out.println(" [DPI]: 可选参数,图片DPI值,默认为300");
System.out.println(" [格式]: 可选参数,输出图片格式,默认为png");
return;
}
String pdfFolderPath = args[0];
String outputBasePath = args[1];
// 解析可选参数
float dpi = 300;
String format = "png";
if (args.length > 2) {
try {
dpi = Float.parseFloat(args[2]);
} catch (NumberFormatException e) {
System.out.println("警告: 无效的DPI值,使用默认值300");
}
}
if (args.length > 3) {
format = args[3];
}
try {
System.out.println("PDF转图片工具启动...");
System.out.println("PDF源文件夹: " + pdfFolderPath);
System.out.println("图片输出文件夹: " + outputBasePath);
System.out.println("图片DPI: " + dpi);
System.out.println("图片格式: " + format);
// 获取项目根目录下的水印图片
File watermarkFile = new File("2.png");
if (watermarkFile.exists()) {
System.out.println("水印图片: " + watermarkFile.getAbsolutePath());
} else {
System.out.println("警告: 未找到水印图片 2.png");
}
// 创建转换器并设置参数
PdfConverter converter = new PdfConverter()
.withDpi(dpi)
.withFormat(format)
.withImageType(ImageType.RGB);
// 设置水印图片(如果存在)
if (watermarkFile.exists()) {
converter.withWatermark(watermarkFile);
}
// 执行批量转换
converter.batchConvert(pdfFolderPath, outputBasePath, true);
System.out.println("所有PDF文件处理完成!");
} catch (Exception e) {
System.out.println("处理过程中发生错误:");
e.printStackTrace();
}
}
}