2023年8月3日发(作者:)

关于openOffice对于word的转换及遇到的问题⼀:需求详情:  公司需要存储合同⽂件,⽤户上传word⽂档的合同,通过openOffice去把word转换为pdf、再把pdf转换为图⽚格式,并分别存储。因为openOffice的转换需要耗费挺⼤的内存,所以设计为task任务,凌晨⾃动转换。  记录本次需求完成的时候遇到的问题。

⼆:过程  1:本地环境编码(windows)  第⼀步:因为是本地环境的编码⽽且是Windows环境,所以从安装openOffice开始,到启动服务并没有遇到难题。  第⼆步:转换所需要的⼯具包; 1 2 commons-cli 3 commons-cli 4 1.2 5 6 7 8 commons-io 9 commons-io 10 1.4 11

12 13 14 fice 15 juh 16 3.0.1 17

18 19 20 fice 21 jurt 22 3.0.1 23

24 25 26 fice 27 ridl 28 3.0.1 29

30 31 32 4j 33 slf4j-api 34 35 36 37

4j 38 slf4j-jdk14 39 test 40 41 42 43

fice 44 unoil 45 3.0.1 46 47 48 49

m 50 xstream 51 1.3.1 52 53 54

55 56 fontbox 57 2.0.8 58 59 60

61 62 pdfbox 63 2.0.8 64   问题1:在这⾥遇到了第⼀个问题,就是在maven的中央仓库找不到关键的依赖jar包的问题。  jodconverter-cli 这个jar包中央仓库找不到jar包依赖,jodconverter 版本才到2.2.1(这个版本之前的不能⽀持docx格式转换,2.2.2及以后才开始⽀持。)  然后和⼤⽜商量,加⼊到公司内⽹⾃⼰的maven仓库。    第三步:⼯具类 1 /** 2 * @author GH 3 * 输⼊⽂件 4 * 输出⽂件 5 */ 6 public class WordToPdf {//word转pdf 7 public static void docToPdf(File inputFile, File outputFile){

8 OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); 9 try{ 10 t(); 11 DocumentConverter converter =

new OpenOfficeDocumentConverter(connection); 12 t(inputFile, outputFile); 13 }catch(ConnectException cex){ 14

tackTrace(); 15 }finally{ 16 if(connection!=null){ 17 nect(); 18 connection = null; 19 } 20 } 21 } 22 } 1 /** 2 * @author GH 3 * 参数1:要装换的pdf位置 4 * 参数2:转换后的图⽚存放位置 5 * 参数3:中间要拼接的名字 6 * return:转换后的img名字集合 7 */

8 public class PdfToImage {//pdf转img 9 public static List pdfToImagePath(String srcFile,String contractFromSrc,String name){ 10 List

list = new ArrayList<>(); 11 String imagePath; 12 File file = new File(srcFile); 13 try { 14 File f = new File(contractFromSrc); 15 if(!()){ 16

(); 17 } 18 PDDocument doc = (file); 19 PDFRenderer renderer = new PDFRenderer(doc); 20 int pageCount =

berOfPages(); 21 for(int i=0; i

ImageWithDPI(i, 296); 24 // ⽅式2,第⼆个参数是设置缩放⽐(即像素) 25 BufferedImage image = Image(i, 2f); //第⼆个参数越⼤⽣成图⽚分辨率越⾼,转换时间也就越长 26 imagePath = contractFromSrc+name+"-"+i +".jpg"; 27 (image, "PNG", new

File(imagePath)); 28 (name+"-"+i +".jpg"); 29 } 30 (); 31 } catch (IOException e) { 32 tackTrace(); 33 } 34 return list; 35 } 36 }   第四步:编码  ⾸先从数据库读取没有转换过的集合,循环下载oss对象存储⽂件到指定临时⽂件夹。  通过⼯具类转换下载的word为pdf,录⼊数据pdf记录,上传oss对象pdf图⽚。  通过⼯具类转换得到的pdf图⽚,录⼊数据路图⽚记录,上传转换得到的img图⽚。  try catch捕捉异常,有异常就回滚数据库,删除oss对象上传的⽂件。  修改word的转换状态为已转换。  问题2:因为到最后测试环境和⽣产环境都是Linux系统的,因为涉及到⽂件的操作,但是Linux和Windows的⽂件路径是不⼀样的,例如:Windows⽂件路径为(C:)Linux则为(/tmp/)  因此 采⽤这种⽅式1   public final static String Convert_Tmp_Url="C:"+tor+"temp"+tor+"contractToImg"+tor;//进⾏word——img转换的时候的暂时存放路径 window 2 public final static String Convert_Tmp_Url2=tor+"tmp"+tor+"contractToImg"+tor;//进⾏word——img转换的时候的暂时存放路径 linux

  tor 与系统有关的默认名称分隔符,为了⽅便,它被表⽰为⼀个字符串 在Linux此字段的值为 '/' Windows为''  第五步:本地测试,没有问题。  2:测试环境测试(windows)  问题3:在Linux环境下word转换word中⽂出现乱码 空⽩,导致的原因是Linux缺少中⽂字体编码。  解决⽅法:  步骤1:创建路径。  在centos的/usr/java/jdk1.8.0_91/jre/lib/fonts下新建路径:fallback。  步骤2:上传字体。  将字体: ⿊体、 宋体(windows下通过everything找下)上传⾄/usr/java/jdk1.8.0_91/jre/lib/fonts/fallback路径下。  步骤3:查看系统字体⽂件路径。  查看⽅案:1. [root@80ec6 fallback]# cat /etc/fonts/2. 3.

/usr/share/fonts4. /usr/share/X11/fonts/Type1 /usr/share/X11/fonts/TTF /usr/local/share/fonts5. ~/.fonts  步骤4:字体拷贝。  将 /usr/java/jdk1.8.0_91/jre/lib/fonts的全部内容,拷贝到步骤3查看的路径下, 我的字体路径为:/usr/share/fonts。  步骤5:更新缓存  执⾏命令:fc-cache  步骤6:kill掉openoffice进程。  [root@80ec6 fonts]# ps -ef | grep openoffice  root 3045 3031 0 06:19 pts/1 00:00:03 /opt/openoffice4/program/ -headless-accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard  执⾏kill:kill -9 3045  步骤7:重启后台运⾏openoffice。 [root@a3cf78780ec6 openoffice4]# soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &     3:测试环境和⽣产环境内核不⼀样,安装的安装包不⼀样。  测试环境的安装的是deb⽂件,使⽤ dpkg命令安装所有的deb⽂件,启动服务就能使⽤。  ⽣产环境的是dpkg命令找不到。改换安装prm⽂件,执⾏安装之后,竟然启动不了,查找原因之后尽然是没有安装完,RPMS⽬录下有desktop-integration⽂件夹,进⼊到desktop-integration⽬录,⾥⾯有四个rpm  ⽂件,选择相应的安装即可,这⾥我选择的是redhat版本。  执⾏ rpm -ivh 

欢迎⼤家⼀起说出⾃⼰的想法。

2023年8月3日发(作者:)

关于openOffice对于word的转换及遇到的问题⼀:需求详情:  公司需要存储合同⽂件,⽤户上传word⽂档的合同,通过openOffice去把word转换为pdf、再把pdf转换为图⽚格式,并分别存储。因为openOffice的转换需要耗费挺⼤的内存,所以设计为task任务,凌晨⾃动转换。  记录本次需求完成的时候遇到的问题。

⼆:过程  1:本地环境编码(windows)  第⼀步:因为是本地环境的编码⽽且是Windows环境,所以从安装openOffice开始,到启动服务并没有遇到难题。  第⼆步:转换所需要的⼯具包; 1 2 commons-cli 3 commons-cli 4 1.2 5 6 7 8 commons-io 9 commons-io 10 1.4 11

12 13 14 fice 15 juh 16 3.0.1 17

18 19 20 fice 21 jurt 22 3.0.1 23

24 25 26 fice 27 ridl 28 3.0.1 29

30 31 32 4j 33 slf4j-api 34 35 36 37

4j 38 slf4j-jdk14 39 test 40 41 42 43

fice 44 unoil 45 3.0.1 46 47 48 49

m 50 xstream 51 1.3.1 52 53 54

55 56 fontbox 57 2.0.8 58 59 60

61 62 pdfbox 63 2.0.8 64   问题1:在这⾥遇到了第⼀个问题,就是在maven的中央仓库找不到关键的依赖jar包的问题。  jodconverter-cli 这个jar包中央仓库找不到jar包依赖,jodconverter 版本才到2.2.1(这个版本之前的不能⽀持docx格式转换,2.2.2及以后才开始⽀持。)  然后和⼤⽜商量,加⼊到公司内⽹⾃⼰的maven仓库。    第三步:⼯具类 1 /** 2 * @author GH 3 * 输⼊⽂件 4 * 输出⽂件 5 */ 6 public class WordToPdf {//word转pdf 7 public static void docToPdf(File inputFile, File outputFile){

8 OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); 9 try{ 10 t(); 11 DocumentConverter converter =

new OpenOfficeDocumentConverter(connection); 12 t(inputFile, outputFile); 13 }catch(ConnectException cex){ 14

tackTrace(); 15 }finally{ 16 if(connection!=null){ 17 nect(); 18 connection = null; 19 } 20 } 21 } 22 } 1 /** 2 * @author GH 3 * 参数1:要装换的pdf位置 4 * 参数2:转换后的图⽚存放位置 5 * 参数3:中间要拼接的名字 6 * return:转换后的img名字集合 7 */

8 public class PdfToImage {//pdf转img 9 public static List pdfToImagePath(String srcFile,String contractFromSrc,String name){ 10 List

list = new ArrayList<>(); 11 String imagePath; 12 File file = new File(srcFile); 13 try { 14 File f = new File(contractFromSrc); 15 if(!()){ 16

(); 17 } 18 PDDocument doc = (file); 19 PDFRenderer renderer = new PDFRenderer(doc); 20 int pageCount =

berOfPages(); 21 for(int i=0; i

ImageWithDPI(i, 296); 24 // ⽅式2,第⼆个参数是设置缩放⽐(即像素) 25 BufferedImage image = Image(i, 2f); //第⼆个参数越⼤⽣成图⽚分辨率越⾼,转换时间也就越长 26 imagePath = contractFromSrc+name+"-"+i +".jpg"; 27 (image, "PNG", new

File(imagePath)); 28 (name+"-"+i +".jpg"); 29 } 30 (); 31 } catch (IOException e) { 32 tackTrace(); 33 } 34 return list; 35 } 36 }   第四步:编码  ⾸先从数据库读取没有转换过的集合,循环下载oss对象存储⽂件到指定临时⽂件夹。  通过⼯具类转换下载的word为pdf,录⼊数据pdf记录,上传oss对象pdf图⽚。  通过⼯具类转换得到的pdf图⽚,录⼊数据路图⽚记录,上传转换得到的img图⽚。  try catch捕捉异常,有异常就回滚数据库,删除oss对象上传的⽂件。  修改word的转换状态为已转换。  问题2:因为到最后测试环境和⽣产环境都是Linux系统的,因为涉及到⽂件的操作,但是Linux和Windows的⽂件路径是不⼀样的,例如:Windows⽂件路径为(C:)Linux则为(/tmp/)  因此 采⽤这种⽅式1   public final static String Convert_Tmp_Url="C:"+tor+"temp"+tor+"contractToImg"+tor;//进⾏word——img转换的时候的暂时存放路径 window 2 public final static String Convert_Tmp_Url2=tor+"tmp"+tor+"contractToImg"+tor;//进⾏word——img转换的时候的暂时存放路径 linux

  tor 与系统有关的默认名称分隔符,为了⽅便,它被表⽰为⼀个字符串 在Linux此字段的值为 '/' Windows为''  第五步:本地测试,没有问题。  2:测试环境测试(windows)  问题3:在Linux环境下word转换word中⽂出现乱码 空⽩,导致的原因是Linux缺少中⽂字体编码。  解决⽅法:  步骤1:创建路径。  在centos的/usr/java/jdk1.8.0_91/jre/lib/fonts下新建路径:fallback。  步骤2:上传字体。  将字体: ⿊体、 宋体(windows下通过everything找下)上传⾄/usr/java/jdk1.8.0_91/jre/lib/fonts/fallback路径下。  步骤3:查看系统字体⽂件路径。  查看⽅案:1. [root@80ec6 fallback]# cat /etc/fonts/2. 3.

/usr/share/fonts4. /usr/share/X11/fonts/Type1 /usr/share/X11/fonts/TTF /usr/local/share/fonts5. ~/.fonts  步骤4:字体拷贝。  将 /usr/java/jdk1.8.0_91/jre/lib/fonts的全部内容,拷贝到步骤3查看的路径下, 我的字体路径为:/usr/share/fonts。  步骤5:更新缓存  执⾏命令:fc-cache  步骤6:kill掉openoffice进程。  [root@80ec6 fonts]# ps -ef | grep openoffice  root 3045 3031 0 06:19 pts/1 00:00:03 /opt/openoffice4/program/ -headless-accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard  执⾏kill:kill -9 3045  步骤7:重启后台运⾏openoffice。 [root@a3cf78780ec6 openoffice4]# soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &     3:测试环境和⽣产环境内核不⼀样,安装的安装包不⼀样。  测试环境的安装的是deb⽂件,使⽤ dpkg命令安装所有的deb⽂件,启动服务就能使⽤。  ⽣产环境的是dpkg命令找不到。改换安装prm⽂件,执⾏安装之后,竟然启动不了,查找原因之后尽然是没有安装完,RPMS⽬录下有desktop-integration⽂件夹,进⼊到desktop-integration⽬录,⾥⾯有四个rpm  ⽂件,选择相应的安装即可,这⾥我选择的是redhat版本。  执⾏ rpm -ivh 

欢迎⼤家⼀起说出⾃⼰的想法。