用Java写一个PDF,Word文件转换工具(java实现pdf转ofd)

  本篇文章为你整理了用Java写一个PDF,Word文件转换工具(java实现pdf转ofd)的详细内容,包含有java实现doc转换pdf java实现pdf转ofd java word转pdf poi java实现word转pdf文件(高效不失真) 用Java写一个PDF,Word文件转换工具,希望能帮助你了解 用Java写一个PDF,Word文件转换工具。

  前段时间一直使用到word文档转pdf或者pdf转word,寻思着用Java应该是可以实现的,于是花了点时间写了个文件转换工具

  源码weloe/FileConversion (github.com)

  主要功能就是word和pdf的文件转换,如下

  pdf 转 word

  pdf 转 图片

  word 转 图片

  word 转 html

  word 转 pdf

  主要使用了pdfbox Apache PDFBox A Java PDF Library以及spire.doc Free Spire.Doc for Java 100% 免费 Java Word 组件 (e-iceblue.cn)两个工具包

  pom.xml

  

 repositories 

 

   repository

   id com.e-iceblue /id

   url http://repo.e-iceblue.cn/repository/maven-public/ /url

   /repository

   /repositories

  
maven.compiler.source 8 /maven.compiler.source

   maven.compiler.target 8 /maven.compiler.target

   /properties

   dependencies

   dependency

   groupId org.apache.pdfbox /groupId

   artifactId pdfbox /artifactId

   version 2.0.4 /version

   /dependency

   dependency

   groupId junit /groupId

   artifactId junit /artifactId

   version 4.13.2 /version

   scope test /scope

   /dependency

   dependency

   groupId e-iceblue /groupId

   artifactId spire.doc.free /artifactId

   version 3.9.0 /version

   /dependency

   /dependencies

  

 

  策略接口

  

public interface FileConversion {

 

   boolean isSupport(String s);

   String convert(String pathName,String dirAndFileName) throws Exception;

  

 

  PDF转图片实现

  

public class PDF2Image implements FileConversion{

 

   private String suffix = ".jpg";

   public static final int DEFAULT_DPI = 150;

  
@Override

   public String convert(String pathName,String dirAndFileName) throws Exception {

   String outPath = dirAndFileName + suffix;

   if(Files.exists(Paths.get(outPath))){

   throw new RuntimeException(outPath+" 文件已存在");

   pdf2multiImage(pathName,outPath,DEFAULT_DPI);

   return outPath;

   * pdf转图片

   * 多页PDF会每页转换为一张图片,下面会有多页组合成一页的方法

   * @param pdfFile pdf文件路径

   * @param outPath 图片输出路径

   * @param dpi 相当于图片的分辨率,值越大越清晰,但是转换时间变长

   public void pdf2multiImage(String pdfFile, String outPath, int dpi) {

   if (dpi = 0) {

   // 如果没有设置DPI,默认设置为150

   dpi = DEFAULT_DPI;

   try (PDDocument pdf = PDDocument.load(new FileInputStream(pdfFile))) {

   int actSize = pdf.getNumberOfPages();

   List BufferedImage picList = new ArrayList ();

   for (int i = 0; i actSize; i++) {

   BufferedImage image = new PDFRenderer(pdf).renderImageWithDPI(i, dpi, ImageType.RGB);

   picList.add(image);

   // 组合图片

   ImageUtil.yPic(picList, outPath);

   } catch (IOException e) {

   e.printStackTrace();

  

 

  PDF转word实现

  

public class PDF2Word implements FileConversion {

 

   private String suffix = ".doc";

   @Override

   public boolean isSupport(String s) {

   return "pdf2word".equals(s);

   * @param pathName

   * @throws IOException

   @Override

   public String convert(String pathName,String dirAndFileName) throws Exception {

   String outPath = dirAndFileName + suffix;

   if(Files.exists(Paths.get(outPath))){

   throw new RuntimeException(outPath+" 文件已存在");

   pdf2word(pathName, outPath);

   return outPath;

  
private void pdf2word(String pathName, String outPath) throws IOException {

   PDDocument doc = PDDocument.load(new File(pathName));

   int pagenumber = doc.getNumberOfPages();

   // 创建文件

   createFile(Paths.get(outPath));

   FileOutputStream fos = new FileOutputStream(outPath);

   Writer writer = new OutputStreamWriter(fos, "UTF-8");

   PDFTextStripper stripper = new PDFTextStripper();

  
stripper.setStartPage(1);//设置转换的开始页

   stripper.setEndPage(pagenumber);//设置转换的结束页

   stripper.writeText(doc, writer);

   writer.close();

   doc.close();

  

 

  word转html

  

public class Word2HTML implements FileConversion{

 

   private String suffix = ".html";

   @Override

   public boolean isSupport(String s) {

   return "word2html".equals(s);

   @Override

   public String convert(String pathName, String dirAndFileName) {

   String outPath = dirAndFileName + suffix;

   if(Files.exists(Paths.get(outPath))){

   throw new RuntimeException(outPath+" 文件已存在");

   Document doc = new Document();

   doc.loadFromFile(pathName);

   doc.saveToFile(outPath, FileFormat.Html);

   doc.dispose();

   return outPath;

  

 

  word转图片

  

public class Word2Image implements FileConversion{

 

   private String suffix = ".jpg";

   @Override

   public boolean isSupport(String s) {

   return "word2image".equals(s);

   @Override

   public String convert(String pathName, String dirAndFileName) throws Exception {

   String outPath = dirAndFileName + suffix;

   if(Files.exists(Paths.get(outPath))){

   throw new RuntimeException(outPath+" 文件已存在");

   Document doc = new Document();

   //加载文件

   doc.loadFromFile(pathName);

   //上传文档页数,也是最后要生成的图片数

   Integer pageCount = doc.getPageCount();

   // 参数第一个和第三个都写死 第二个参数就是生成图片数

   BufferedImage[] image = doc.saveToImages(0, pageCount, ImageType.Bitmap);

   // 组合图片

   List BufferedImage imageList = Arrays.asList(image);

   ImageUtil.yPic(imageList, outPath);

   return outPath;

  

 

  word转pdf

  

public class Word2PDF implements FileConversion{

 

   private String suffix = ".pdf";

   @Override

   public boolean isSupport(String s) {

   return "word2pdf".equals(s);

   @Override

   public String convert(String pathName, String dirAndFileName) throws Exception {

   String outPath = dirAndFileName + suffix;

   if(Files.exists(Paths.get(outPath))){

   throw new RuntimeException(outPath+" 文件已存在");

   //加载word

   Document document = new Document();

   document.loadFromFile(pathName, FileFormat.Docx);

   //保存结果文件

   document.saveToFile(outPath, FileFormat.PDF);

   document.close();

   return outPath;

  

 

  输入转换方法,文件路径,输出路径(输出路径如果输入null则为文件同目录下同名不同后缀文件)

  转换方法可选项:

  pdf2word

  pdf2image

  word2html

  word2image

  word2pdf

  例如输入:

  

pdf2word D:\test\testpdf.pdf null

 

  

 

  控制台输出:

  

转换方法: pdf2word 文件: D:\test\testFile.pdf

 

  转换成功!文件路径: D:\test\testFile.doc

  

 

  以上就是用Java写一个PDF,Word文件转换工具(java实现pdf转ofd)的详细内容,想要了解更多 用Java写一个PDF,Word文件转换工具的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: