word转pdf (Centors环境下)

word转pdf (Centors环境下)

1.背景

最近在做网上打印系统,需要计算用户上传文件的页数计算价格,主要文档格式有pdf,txt,doc,docx
(1)对于PDF比较简单直接用api 操作得到页数 准确率挺高的测了很多都对
Maven导包:

<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>pdfbox</artifactId>
  <version>2.0.1</version>
</dependency>

<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>fontbox</artifactId>
  <version>2.0.1</version>
</dependency>

代码:

  public static void main(String args[]) throws IOException {
        String file1 = "C:\\Users\\win10\\Desktop\\书本\\pdf\\Java编程思想第四版完整中文高清版.pdf"; //
        String file2 = "C:\\Users\\win10\\Desktop\\书本\\pdf\\阿里巴巴Java开发手册(纪念版).pdf"; //

        String file3 = "I:\\高代\\高等代数下(复习)-chenqh.pdf"; // 4
        File pdfFile = new File(file3);
        PDDocument document = null;
        try
        {
            // 方式一:
            /**
             InputStream input = null;
             input = new FileInputStream( pdfFile );
             //加载 pdf 文档
             PDFParser parser = new PDFParser(new RandomAccessBuffer(input));
             parser.parse();
             document = parser.getPDDocument();
             **/

            // 方式二:
            document=PDDocument.load(pdfFile);

            // 获取页码
            int pages = document.getNumberOfPages();
            System.out.println(pages);
//            // 读文本内容
//            PDFTextStripper stripper=new PDFTextStripper();
//            // 设置按顺序输出
//            stripper.setSortByPosition(true);
//            stripper.setStartPage(1);
//            stripper.setEndPage(pages);
//            String content = stripper.getText(document);
//            System.out.println(content);
        }
        catch(Exception e)
        {
            System.out.println(e);
        }finally {
            document.close();
        }

    }

(2)对于txt,doc,docx这类文档虽然可以用poi操作读取页数 这个准确率相信也有同学测过,准确率可能就50-60%左右吧,对于设置价格误差太大,不适合。
但我还是说一下吧,有空的同学可以逛逛
maven导包

   <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.17</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-scratchpad</artifactId>
      <version>3.17</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.17</version>
    </dependency>

代码:

   public static void main(String[] args) throws Exception {
    // TODO code application logic here
  // parse2007();
    parse97();
}


// docx文档
public static void parse2007()  throws Exception {

    String fileName1 = "D:\\count\\软1-新生班导工作计划.docx";  // 2  OK
    String fileName2 = "D:\\count\\软3-新生班导工作计划.docx";  // 2  OK
    String fileName3 = "D:\\count\\软4-新生班导工作计划.docx";  // 2  OK


    String fileName4 = "D:\\count\\数2-新生班导工作计划.docx";  // x1   4

    String fileName5 = "D:\\count\\数3-新生班导工作计划.docx";  // 3   OK

    String fileName6 = "D:\\count\\信安-新生班导工作计划.docx";  //x1   5


    XWPFDocument docx = new XWPFDocument(POIXMLDocument.openPackage(fileName6));
    int pages = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getPages();//总页数
    int wordCount = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getCharacters();// 忽略空格的总字符数 另外还有getCharactersWithSpaces()方法获取带空格的总字数。
    System.out.println ("pages=" + pages + " wordCount=" + wordCount);
}



// doc 文档
public static void parse97()  throws Exception {

    String fileName1 = "D:\\count\\福州大学本科生科研训练计划(SRTP)项目申请表(2018年创新类) (1).doc"; // 11 OK

    String fileName2 = "D:\\count\\软2-新生班导工作计划.doc";   // 7 ok
    String fileName3 = "D:\\count\\数1-新生班导工作计划.doc";   // x1  4


    WordExtractor doc = new WordExtractor(new FileInputStream(fileName2));
    int pages = doc.getSummaryInformation().getPageCount();//总页数
    int wordCount = doc.getSummaryInformation().getWordCount();//总字符数
    System.out.println ("pages=" + pages + " wordCount=" + wordCount);
}

2.转变思想

对于pdf可以精准的计算出页数,剩下的就是doc,doxc,ppt博主在网上搜了一大堆资料,方法各异最后我总结出一种最简便高效,且转换后还原度非常高的方法,最重要的是跨平台,接下来就分享给大家。
(1)在linux 上装 unoconv

yum install unoconv

然后

  unoconv -help

查看是否安装成功
(2) 现在就可以通过linux命令

unoconv -f pdf /home/a.doc
unoconv -f pdf /home/a.docx
unoconv -f pdf /home/a.txt

把这三类文件转为pdf且效率高

(3)
对含有中文的文件会出现乱码问题
解决方法:

yum groupinstall chinese-support //安装中文支持

vim /etc/sysconfig/i18n   //修改编码文件添加 没有就创建一个

添加下面三行(locale  可以查看编码)
LANG=”zh_CN.GB18030″
SUPPORTED=”zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en”
SYSFONT=”latarcyrheb-sun16″

vim /etc/vimrc 修改文件

在文件最后添加下面两行
set fileencoding=utf-8
set fileencodings=utf-8,gb18030,gbk,big5
保存修改
reboot 重启服务器


首先,在D:盘创建一个文件夹win 
进入C:\WINDOWS\Fonts把此文件夹下的所以字体复制 到D:\win 
由于win文件夹比较大,进行打包 win.zip 

//解压  
unzip win.zip  
mv win /usr/share/fonts  

cd /usr/share/fonts/win  
chmod  -Rf 755 Fonts  

//加载字体  
mkfontscale  如果没有这个命令 就yum install mkfontscale
mkfontdir  如果没有这个命令 就yum install mkfontdir
fc-cache –fv  

reboot 重启服务器

如果启动后转文件出现 段错误或者Segmentation fault
或者Error: Unable to connect or start own listener. Aborting.
重启一下服务器就ok了

接下来就是用java 操作一下linux命令行 把目标文件转为pdf
最后用pdf计算页数最后计算出结果

下一篇博客讲解如何用java操作linux

备注:
祝各位同学成功。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值