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
备注:
祝各位同学成功。