PDF转DOC
之前别人分享给我一部分技术文档,但是是PDF的。自己想把它转为DOC文档在做编辑。发现网上许多需要收费,心想就这破烂玩意儿还需要收费。于是自己做了一个解决的。
本人已经亲测无毒,直接服用!
不说了,上代码吧!
package com.rick1024k.data_conversion.PDF;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import com.alibaba.fastjson.JSONObject;
import com.rick1024k.data_conversion.utils.FileUtils;
public class PDFTools {
public static void pdf2DOC(String pdfPath, String pdfName) {
try {
// 后缀名
String suffix = pdfName.substring(pdfName.lastIndexOf(".") + 1);
if (!suffix.equals("pdf")) {
return;
}
// pdf的完全路径
String pdfFile = pdfPath + "//" + pdfName;
PDDocument doc = PDDocument.load(new File(pdfFile));
int pagenumber = doc.getNumberOfPages();
pdfFile = pdfFile.substring(0, pdfFile.lastIndexOf("."));
// doc文件的完全路劲
String fileName = pdfFile + ".doc";
File file = new File(fileName);
if (!file.exists()) {// 文件是否存在,不存在则新增
file.createNewFile();
}
// 写入数据
FileOutputStream fos = new FileOutputStream(fileName);
Writer writer = new OutputStreamWriter(fos, "UTF-8");
PDFTextStripper stripper = new PDFTextStripper();
stripper.setSortByPosition(true);// 排序
stripper.setStartPage(1);// 设置转换的开始页
stripper.setEndPage(pagenumber);// 设置转换的结束页
stripper.writeText(doc, writer);
writer.close();
doc.close();
System.out.println(pdfPath + pdfName + "--------文件转换成功!");
} catch (IOException e) {
System.out.println(pdfPath + pdfName + "--------文件转换报错!");
e.printStackTrace();
}
}
public static void PDF2Markdown(String path) {
// 这是需要获取的文件夹路径
Map<String, List<String>> fileMap = new HashMap<>();
FileUtils.getAllFile(path, fileMap);
System.out.println(JSONObject.toJSONString(fileMap));
Set<String> keySet = fileMap.keySet();
List<String> pdfList;
for (String key : keySet) {
pdfList = fileMap.get(key);
for (String fileName : pdfList) {
pdf2DOC(key, fileName);
}
}
}
public static void main(String[] args) {
String path = "C:/Resource/RICK/DOC/PDF文件夹";
PDF2Markdown(path);
}
}
- file的工具类:
package com.rick1024k.data_conversion.utils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class FileUtils {
public static void getAllFile(String path, Map<String, List<String>> fileMap) {
getAllFile(path, fileMap, 0);
}
/*
* 函数名:getFile 作用:使用递归,输出指定文件夹内的所有文件 参数:path:文件夹路径 deep:表示文件的层次深度,控制前置空格的个数
* 前置空格缩进,显示文件层次结构
*/
public static void getAllFile(String path, Map<String, List<String>> fileMap, int deep) {
// 获得指定文件对象
File file = new File(path);
// 获得该文件夹内的所有文件
File[] fileList = file.listFiles();
List<String> fileNameList = new ArrayList<>();
for (File fileData : fileList) {
if (fileData.isFile()) {// 如果是文件
fileNameList.add(fileData.getName());
} else if (fileData.isDirectory()) {// 如果是文件夹
getAllFile(fileData.getPath(), fileMap, deep + 1);
}
}
fileMap.put(path, fileNameList);
}
}
- 依赖的jar包:
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.18</version>
</dependency>