文件转码(word、ppt、图片、Excal)
生活随笔
收集整理的這篇文章主要介紹了
文件转码(word、ppt、图片、Excal)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
好久沒和大家見面了,在假期的時候學習了一點關于轉碼的,有一些心得和大家分享一下,希望對你們有所幫助。
1、添加全局配置文件
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit-1.4.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 定義RabbitMQ的連接工廠 --><rabbit:connection-factory id="connectionFactory"host="127.0.0.1" port="5672" username="guest" password="guest"virtual-host="/" /><rabbit:admin connection-factory="connectionFactory" /><!-- spring template聲明 --><rabbit:template exchange="amqpExchange" id="amqpTemplate" connection-factory="connectionFactory" /><rabbit:queue name="myQueue" ></rabbit:queue><!--聲明 direct 交換模式 --><rabbit:direct-exchange name="amqpExchange"><rabbit:bindings><rabbit:binding queue="myQueue" key="queue" ></rabbit:binding></rabbit:bindings></rabbit:direct-exchange> <!-- 隊列監聽 --> <bean id="transCodeReceiver" class="com.text.ibo.service.rabbitmq.TransCodeConsumer" /><rabbit:listener-container connection-factory="connectionFactory"><rabbit:listener ref="transCodeReceiver" method="listen" queue-names="myQueue" /></rabbit:listener-container></beans>2、安裝相關軟件
1、https://download.csdn.net/download/weixin_40106067/10963320 2、https://download.csdn.net/download/weixin_40106067/10963373 3、rabbitMQ的安裝和配置請參考:https://www.cnblogs.com/LipeiNet/p/5973061.html3、創建工具類
3.1、發送消息隊列
import java.util.Date; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import net.sf.json.JSONObject;public class MqUtil{public static void mqSend(String queueName, 實體類 vo) throws Exception {AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:applicationContext-mq.xml");//RabbitMQ模板RabbitTemplate template = ctx.getBean(RabbitTemplate.class);template.convertAndSend(queueName, vo);System.out.println("[" + new Date() + "]" + "*發送消息隊列*: " + queueName);System.out.println("[" + new Date() + "]" + "*發送消息參數*: " + JSONObject.fromObject(vo));Thread.sleep(3000);// 休眠3秒ctx.close();} }3.1、office轉PDF工具類
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.net.ConnectException; import java.util.Date; import java.util.Properties; import com.artofsolving.jodconverter.DocumentConverter; import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection; import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection; import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;public class OfficeToPDF {/*** 環境變量下面的url.properties的絕對路徑*/private static final String RUL_PATH = 配置系統虛擬路徑;/*** 將Office文檔轉換為PDF. 運行該函數需要用到OpenOffice, OpenOffice下載地址為* http://www.openoffice.org/* * <pre>* 方法示例:* String sourcePath = "D:\\office\\source.doc";* String destFile = "D:\\office\\dest.pdf";* Converter.office2PDF(sourcePath, destFile);* </pre>* * @param sourceFile* 源文件, 絕對路徑. 可以是Office2003-2007全部格式的文檔, Office2010的沒測試. 包括.doc,* .docx, .xls, .xlsx, .ppt, .pptx等. 示例: D:\\office\\source.doc* @param destFile* 目標文件. 絕對路徑. 示例: D:\\office\\dest.pdf* @return 操作成功與否的提示信息. 如果返回 -1, 表示找不到源文件, 或url.properties配置錯誤; 如果返回 0,* 則表示操作成功; 返回1, 則表示轉換失敗*/public static int reverse(String sourceFile, String destFile) {try {File inputFile = new File(sourceFile);if (!inputFile.exists()) {return -1;// 找不到源文件, 則返回-1}// 如果目標路徑不存在, 則新建該路徑File outputFile = new File(destFile);if (!outputFile.getParentFile().exists()) {outputFile.getParentFile().mkdirs();}/** 從url.properties文件中讀取OpenOffice的安裝根目錄, OpenOffice_HOME對應的鍵值.* 我的OpenOffice是安裝在D:\Program Files\OpenOffice.org 3下面的, 如果大家的* OpenOffice不是安裝的這個目錄下面,需要修改url.properties文件中的 OpenOffice_HOME的鍵值.* 但是需要注意的是:要用"\\"代替"\",用"\:"代替":" . 如果大家嫌麻煩,* 可以直接給OpenOffice_HOME變量賦值為自己OpenOffice的安裝目錄*/Properties prop = new Properties();FileInputStream fis = null;fis = new FileInputStream(RUL_PATH);// 屬性文件輸入流prop.load(fis);// 將屬性文件流裝載到Properties對象中fis.close();// 關閉流String OpenOffice_HOME = prop.getProperty("OpenOffice_HOME");if (OpenOffice_HOME == null)return -1;// 如果從文件中讀取的URL地址最后一個字符不是 '\',則添加'\'if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {OpenOffice_HOME += "\\";}// 啟動OpenOffice的服務String command = OpenOffice_HOME+ "program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\" -nofirststartwizard";Process pro = Runtime.getRuntime().exec(command);System.out.println("[" + new Date() + "]" + "*啟動OpenOffice服務*");// connect to an OpenOffice.org instance running on port 8100OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);//Thread.sleep(2000);// 休眠2秒 要連接openoffice需要等待soffice聯動啟動soffice.bin// 連接 long con_s=System.currentTimeMillis(); connection.connect(); long con_e=System.currentTimeMillis(); if(connection.isConnected()) {System.out.println("[" + new Date() + "]" + "*OpenOffice連接成功*, 耗時:" + (con_e-con_s)/1000 + "." + (con_e-con_s)%1000 + "s"); }else {System.out.println("[" + new Date() + "]" + "*OpenOffice連接失敗* , 耗時:" + (con_e-con_s)/1000 + "." + (con_e-con_s)%1000 + "s");}System.out.println("[" + new Date() + "]" + "*OpenOffice轉換開始*");// convert //StreamOpenOfficeDocumentConverter //OpenOfficeDocumentConverterDocumentConverter converter = new OpenOfficeDocumentConverter(connection);//轉換long dc_s=System.currentTimeMillis();converter.convert(inputFile, outputFile); long dc_e=System.currentTimeMillis(); System.out.println("[" + new Date() + "]" + "*OpenOffice轉換結束* "+ ",耗時:" + (dc_e-dc_s)/1000 + "." + (dc_e-dc_s)%1000 + "s"); ;// close the connectionconnection.disconnect();// 關閉OpenOffice服務的進程pro.destroy();System.out.println("[" + new Date() + "]" + "*關閉OpenOffice服務*");return 0;} catch (FileNotFoundException e) {e.printStackTrace();return -1;} catch (ConnectException e) {e.printStackTrace();System.out.println("[" + new Date() + "]" + "*OpenOffice連接異常文件轉換出錯,請檢查本機是否安裝OpenOffice或者OpenOffice服務是否啟動。*");} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return 1;} }3.3、圖片轉PDF工具類
import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.imageio.ImageIO; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.io.RandomAccessFile; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.pdmodel.graphics.xobject.PDCcitt; import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg; import org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap; import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage; import org.apache.pdfbox.util.PDFTextStripper;public class TuToPDF {/*** PDF文件插入圖片* * @param inputFile The input PDF to add the image to.* @param image The filename of the image to put in the PDF.* @param outputFile The file to write to the pdf to.** @throws IOException If there is an error writing the data.* @throws COSVisitorException If there is an error writing the PDF.*/public static int reverse(String inputFile, String image, String outputFile) { try { // 新建pdf文件模板PDDocument document = new PDDocument(); BufferedImage sourceImg =ImageIO.read(new FileInputStream(image)); //獲取圖片尺寸并設置PDF尺寸PDPage ppap = new PDPage(new PDRectangle(sourceImg.getWidth(), sourceImg.getHeight())); document.addPage(ppap); PDPageContentStream stream = new PDPageContentStream(document, ppap); stream.close(); document.save(inputFile);document.close(); //文檔PDDocument doc = null;doc = PDDocument.load(inputFile);//添加圖片到第一頁PDPage page = (PDPage) doc.getDocumentCatalog().getAllPages().get(0);PDXObjectImage ximage = null;if (image.toLowerCase().endsWith(".jpg")) {ximage = new PDJpeg(doc, new FileInputStream(image));} else if (image.toLowerCase().endsWith(".tif") || image.toLowerCase().endsWith(".tiff")) {ximage = new PDCcitt(doc, new RandomAccessFile(new File(image), "r"));} else {BufferedImage awtImage = ImageIO.read(new File(image));ximage = new PDPixelMap(doc, awtImage);}PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, true);float scale = 1f; // 減少此值防止圖片過大contentStream.drawXObject(ximage, 0, 0, ximage.getWidth() * scale, ximage.getHeight() * scale);contentStream.close();doc.save(outputFile);if (doc != null) {doc.close();} File file = new File(inputFile);if (file.exists()) { file.delete(); //刪除模板文件} return 0;} catch (Exception e) {e.printStackTrace();return -1;}} }4、創建一個消費者,用于監聽消息-轉碼
import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.RandomUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import net.sf.json.JSONObject;public class TransCodeConsumer {// 監聽資源上傳-公用public void listen(TransCodeVo vo) {System.out.println("[" + new Date() + "]" + "*消費者捕獲隊列,開始消費*");System.out.println("[" + new Date() + "]" + "*接收消息參數*:" + JSONObject.fromObject(vo));System.out.println("[" + new Date() + "]" + "*文件轉碼開始*");try {// 更新轉碼狀態vo.setConvertStatus("P"); // P轉碼中// 獲取文件路徑int status = -1; // 工具類轉碼狀態String resourceUrl = vo.getResourceUrl(); // 源文件絕對路徑String fileType = null;//String resourceUrl = xxx; // 源文件絕對路徑if (resourceUrl != null) {if("alternativeresources".equals(vo.getTableName().toLowerCase())) {fileType = 文件類型.toLowerCase();}else {fileType = resourceUrl.substring(resourceUrl.indexOf(".")+1).toLowerCase();}} else {return;}String fileName = resourceUrl.substring(resourceUrl.lastIndexOf("/") + 1, resourceUrl.lastIndexOf(".")); // 文件名String tansCodePath = xxx;//文件絕對路徑String resourceViewUrl = tansCodePath + fileName + ".pdf"; // 目標文件絕對路徑 // 轉碼if ("doc".equals(fileType) || "docx".equals(fileType) || "xls".equals(fileType) || "xlsx".equals(fileType)|| "ppt".equals(fileType) || "pptx".equals(fileType) || "wps".equals(fileType)) {status = OfficeToPDF.reverse(resourceUrl, resourceViewUrl);} else if ("jpeg".equals(fileType) || "jpg".equals(fileType) || "bmp".equals(fileType)|| "png".equals(fileType)) { String inputFile = tansCodePath + "demo.pdf"; status = TuToPDF.reverse(inputFile, resourceUrl, resourceViewUrl);} if (status == 0) {System.out.println("[" + new Date() + "]" + "*轉碼成功*: " + resourceUrl + " ----> " + resourceViewUrl);// 將更新后的轉碼視圖地址 轉碼狀態保存vo.setConvertStatus("C"); // C已完成vo.setResourceViewUrl(resourceViewUrl);int count = update語句;if (count > 0) {System.out.println("[" + new Date() + "]" + "*更新轉碼地址成功*");} else {System.out.println("[" + new Date() + "]" + "*轉碼地址未更新*");}} else {System.out.println("[" + new Date() + "]" + "*轉碼失敗*: 暫不支持. " + fileType + "類型文件轉碼");vo.setConvertStatus("E"); // E錯誤update語句;}System.out.println("[" + new Date() + "]" + "*文件轉碼結束*");} catch (Exception e) {e.printStackTrace();System.out.println("[" + new Date() + "]" + "*文件轉碼異常*");vo.setConvertStatus("E"); // E錯誤update語句;}} }?
?
總結
以上是生活随笔為你收集整理的文件转码(word、ppt、图片、Excal)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FCPX插件平面图片转三维空间动画 PR
- 下一篇: Scratch软件编程等级考试一级——2