spire的office依赖包包含了doc和pdf等一些相关依赖,所以只导入这个包即可,而且还避免了依赖包版本冲突的问题
<repositories>
<repository>
<id>com.e-iceblueid>
<url>http://repo.e-iceblue.cn/repository/maven-public/url>
repository>
repositories>
<dependencies>
<dependency>
<groupId>e-icebluegroupId>
<artifactId>spire.office.freeartifactId>
<version>5.3.1version>
dependency>
dependencies>
iceBlue研发的工具是我觉得做word、pdf相关文件格式转换比较好的,里面除了word和pdf互转之外,还可以将word转为execl、image、html、加密的pdf等等,当然pdf也可以转为其类似的文件格式。不过它分为两个版本:收费/免费,使用免费版本的有页数的限制但是转换格式出来的文件没有官方水印,用于个人来说足以满足需求
public class WordConvertUtils {
// pdf文件的路径
static final String source = "C:\\Users\\RichZhou\\Desktop\\sample.docx";
// 需要转为指定格式的存放路径
static final String pdfDestination = "C:\\Users\\RichZhou\\Desktop\\敖丙pdf.pdf";
static final String imageDestination = "C:\\Users\\RichZhou\\Desktop\\";
static final String htmlDestination = "C:\\Users\\RichZhou\\Desktop\\toHtml.html";
public static void main(String[] args) {
// docx 转为 pdf
docxConvertPdf(source, pdfDestination);
// docx 转为 image
docxConvertImage(source, imageDestination);
// docx 转为 html
docxConvertHtml(source, htmlDestination);
}
public static void docxConvertPdf(String source, String pdfDestination) {
try {
// 创建doc对象
Document doc = new Document();
// 加载docx文件
doc.loadFromFile(source);
// 创建ToPdfParameterList对象
ToPdfParameterList ppl = new ToPdfParameterList();
// 在PDF文档中嵌入所有字体
ppl.isEmbeddedAllFonts(true);
// 删除超链接并保留字符格式
ppl.setDisableLink(false);
// 设置输出图像质量为原始图像的40%,默认设置为80%。
doc.setJPEGQuality(40);
// 转为pdf
doc.saveToFile(pdfDestination, ppl);
System.out.println("docx文件转为pdf成功...");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void docxConvertImage(String source, String imageDestination) {
try {
// 创建doc对象
Document doc = new Document();
// 加载docx文件
doc.loadFromFile(source);
// 将整个文档转换为单独的缓冲图像
BufferedImage[] images = doc.saveToImages(ImageType.Bitmap);
// 循环遍历图片数组
for (int i = 0; i < images.length; i++) {
// 获取图片
BufferedImage image = images[i];
// 用不同的颜色空间重写图像
BufferedImage newImg = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
newImg.getGraphics().drawImage(image, 0, 0, null);
// 将图片存入指定文件中
File file = new File(imageDestination + String.format(("Image-%d.jpg"), i));
ImageIO.write(newImg, "JPEG", file);
// ImageIO.write(newImg, "PNG", file);
// ImageIO.write(newImg, "SVG", file);
System.out.println("docx文件转为图片成功...");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void docxConvertHtml(String source, String htmlDestination) {
try {
// 创建doc对象
Document doc = new Document();
// 加载docx文件
doc.loadFromFile(source);
// 转为html
doc.saveToFile(htmlDestination, FileFormat.Html);
System.out.println("docx文件转为html成功...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
word不仅仅只能转为上述代码中的格式,还有的格式在接口文档中有,自行查看
public class PdfConvertUtils {
// pdf文件的路径
static final String source = "C:\\Users\\RichZhou\\Desktop\\敖丙.pdf";
// 需要转为指定格式的存放路径
static final String docDestination = "C:\\Users\\RichZhou\\Desktop\\敖丙doc.doc";
static final String docxDestination = "C:\\Users\\RichZhou\\Desktop\\敖丙docx.docx";
static final String xlsxDestination = "C:\\Users\\RichZhou\\Desktop\\敖丙xlsx.xlsx";
static final String imageDestination = "C:\\Users\\RichZhou\\Desktop";
static final String htmlDestination = "C:\\Users\\RichZhou\\Desktop\\ToHtml.html";
public static void main(String[] args) {
// 转为doc
pdfConvertDoc(source, docDestination);
// 转为docx
pdfConvertDocx(source, docxDestination);
// 转为xlsx
pdfConvertXlsx(source, xlsxDestination);
// 转为image
pdfConvertImage(source, imageDestination);
// 转为html
pdfConvertHtml(source, htmlDestination);
}
public static void pdfConvertDoc(String source, String destination) {
try {
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
//加载pdf文件
pdf.loadFromFile(source);
//转为doc
pdf.saveToFile(destination, FileFormat.DOC);
System.out.println("pdf转为doc文件成功...");
pdf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void pdfConvertDocx(String source, String destination) {
try {
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
//加载pdf文件
pdf.loadFromFile(source);
//转为docx
pdf.saveToFile(destination, FileFormat.DOCX);
System.out.println("pdf转为docx文件成功...");
pdf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void pdfConvertXlsx(String source, String destination) {
try {
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
//加载pdf文件
pdf.loadFromFile(source);
//转为xlsx
pdf.saveToFile(destination, FileFormat.XLSX);
System.out.println("pdf转为excel文件成功...");
pdf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void pdfConvertImage(String source, String destination) {
try {
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
//加载pdf文件
pdf.loadFromFile(source);
//循环pdf页
for (int i = 0; i < pdf.getPages().getCount(); i++) {
//Convert all pages to images and set the image Dpi
BufferedImage image = pdf.saveAsImage(i, PdfImageType.Bitmap, 500, 500);
//Save images to a specific folder as a .png files
File file = new File(destination + "/" + String.format(("ToImage-img-%d.png"), i));
ImageIO.write(image, "PNG", file);
System.out.println("pdf转为image图片成功...");
}
pdf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void pdfConvertHtml(String source, String destination) {
try {
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
//加载pdf文件
pdf.loadFromFile(source);
//转为html格式
pdf.saveToFile(destination, FileFormat.HTML);
System.out.println("pdf转化html格式成功...");
}catch (Exception e) {
e.printStackTrace();
}
}
}
pdf不仅仅只能转为上述代码中的格式,还有的格式在接口文档中有,自行查看