office轉pdf和圖片實現線上預覽
jar包和openoffice的下載
最好都到官網下載或者sourceforge下載,不要在csdn或者其他的地方下載,因為很多都被人重新打包過導致各種問題。
- pdfbox的下載地址
只需要pdfbox-1.8.13.jar,fontbox-1.8.13.jar,用來pdf轉圖片
- openoffice的下載地址
- commons-loging.jar的下載(你如果下載過poi,你會發現裡面也有)
- JODConverter的下載地址
用來連線openoffice
開啟openoffice
2.啟動OpenOffice的服務
安裝完openoffice,安裝服務
cd C:\Program Files (x86)\OpenOffice 4\program
執行
soffice -headless -accept=”socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard
檢視是否安裝成功,檢視埠對應的pid
netstat -ano|findstr "8100"
檢視pid對應的服務程式名
tasklist|findstr "pid值"
若有對於值,說明服務啟動成功
程式碼
(我的程式碼都是針對於專案的doc資料夾下面的檔案,如果要直接用,需要新建一個doc資料夾,並把檔案放在下面,若要換成其他路徑,需要修改tmpDir)
附該程式碼專案的下載地址
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import org.apache.commons.io.FilenameUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.rendering.PDFRenderer;
import com.artofsolving.jodconverter.DefaultDocumentFormatRegistry;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.DocumentFormat;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
import com.sun.star.io.ConnectException;
public class MyOfficeImage {
//臨時儲存目錄
public static final String tmpDir = "doc/";
//pdf轉圖片
public static void pdf2Img(String pdfPath)
{
File file = new File(pdfPath);
if ( !file.exists() )
{
return;
}
String imgName = pdfPath.substring(pdfPath.lastIndexOf("/"), pdfPath.lastIndexOf(".")) + ".png";
PDDocument doc = null;
List<BufferedImage> list = new ArrayList<BufferedImage>();
int heights = 0;
try {
doc = PDDocument.load(file);
PDFRenderer render = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
for(int i = 0; i < pageCount; i++)
{
BufferedImage image = render.renderImage(i);
list.add(image);
heights += image.getHeight();
//下面這一句可以轉成多張圖片
//ImageIO.write(image, "PNG", new File("doc/"+dir[0]+"/"+i+".png"));
}
imgs2img(list, tmpDir + imgName, heights);
} catch (InvalidPasswordException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
finally
{
if (doc != null)
{
try {
doc.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/*
* 不建議這樣子的寫法,因為用了太多臨時變數,沒必要
*/
@Deprecated
public static void imgs2imgold(List<BufferedImage> list, String imgpath)
{
int imgCount = list.size();
List<int[]> imgRgb = new ArrayList<int[]>(); //總資料
int[] tmpImgRgb;
int height = 0; //總高度
int width = 0;
int tmpHeight = 0; //當前偏移高度
int[] heightArray = new int[imgCount];
BufferedImage buffer = null;
for(int i = 0; i < imgCount; i++)
{
buffer = list.get(i);
heightArray[i] = buffer.getHeight();
if (i == 0) width = buffer.getWidth();
height += heightArray[i];
tmpImgRgb = new int[width * heightArray[i]];
tmpImgRgb = buffer.getRGB(0, 0, width, heightArray[i], tmpImgRgb, 0, width);
imgRgb.add(tmpImgRgb);
}
BufferedImage imageResult = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int i = 0; i < imgCount; i++)
{
if (i != 0) tmpHeight += heightArray[i];
imageResult.setRGB(0, tmpHeight, width, heightArray[i], imgRgb.get(i), 0, width);
}
try {
ImageIO.write(imageResult, "PNG", new File(imgpath));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//多張圖合成一張
public static void imgs2img(List<BufferedImage> list, String imgpath, int heights)
{
//heights;//總高度
int imgCount = list.size(); //總圖片數
int[] tmpImgRgb; //臨時儲存圖片的臨時畫素值
int width = list.get(0).getWidth(); //圖片的寬度,這裡預設所以圖片的寬度是一樣的
int tmpHeight = 0; //當前偏移高度
BufferedImage buffer = null; //用來臨時儲存圖片
//用來儲存最後那張總的圖片
BufferedImage imageResult = new BufferedImage(width, heights, BufferedImage.TYPE_INT_RGB);
for(int i = 0; i < imgCount; i++)
{
buffer = list.get(i);
if (i != 0) tmpHeight += buffer.getHeight();
tmpImgRgb = new int[width * buffer.getHeight()];
tmpImgRgb = buffer.getRGB(0, 0, width, buffer.getHeight(), tmpImgRgb, 0, width);
imageResult.setRGB(0, tmpHeight, width, buffer.getHeight(), tmpImgRgb, 0, width);
}
try
{
ImageIO.write(imageResult, "PNG", new File(imgpath));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//office轉pdf
public static String office2Pdf(String officePath)
{
File inputfile = new File(officePath);
File outputFile = null;
if ( !inputfile.exists() )
{
return null;
}
String outPdf = tmpDir + officePath.substring(officePath.lastIndexOf('/'), officePath.lastIndexOf('.'))
+ ".pdf";
try {
// 如果目標路徑不存在, 則新建該路徑
outputFile = new File(outPdf);
// connect to an OpenOffice.org instance running on port 8100
OpenOfficeConnection connection = new SocketOpenOfficeConnection(
"127.0.0.1", 8100);
connection.connect();
// convert
DocumentConverter converter = new OpenOfficeDocumentConverter(
connection);
converter.convert(inputfile, outputFile);
// close the connection
connection.disconnect();
} catch (IOException e) {
e.printStackTrace();
return null;
}
//return outputFile.getAbsolutePath();
return outPdf;
}
public static void office2Imag(String docPath)
{
String pdfPath = office2Pdf(docPath);
pdf2Img(pdfPath);
}
public static void main(String[] args)
{
// pdf2Img("doc/a.pdf");
// pdf2Img("doc/基於交通視訊的運動目標檢測和跟蹤.pdf");
//office2Imags("doc/自動化畢業論文開題報告範文.docx");
office2Imag("doc/決算收支.xls");
}
}
相關文章
- 實現圖片預覽
- 在electron下實現PDF線上預覽功能
- php實現pdf轉圖片PHP
- vue實現圖片預覽Vue
- html中線上預覽pdf檔案之pdf線上預覽外掛HTML
- Office文件線上預覽方案
- react實現移動端PDF線上預覽外掛React
- html input type=file 選擇圖片,圖片預覽 純html js實現圖片預覽HTMLJS
- 用createObjectURL實現本地圖片預覽Object地圖
- 前端實現線上預覽pdf、word、xls、ppt等檔案前端
- 直播平臺搭建,使用vue-pdf 實現pdf線上預覽並且自定義預覽框高度Vue
- react-pdf預覽線上PDF的使用React
- JPG轉PDF如何實現?圖片批次轉換PDF的快捷方法
- Windows 系統,PHP實現PPT轉PDF,PDF轉圖片的操作WindowsPHP
- HTML5線上預覽PDFHTML
- react線上預覽pdf,外掛react-pdfReact
- 短視訊平臺開發,圖片上傳和圖片預覽功能實現
- C#實現 word、pdf、ppt 轉為圖片C#
- angularjs 實現圖片上傳實時預覽AngularJS
- pdf怎麼轉換成jpg圖片,線上實現的操作方法給到你
- 前端實現圖片上傳預覽並轉換base64前端
- 結合 Laravel 實現檔案(PDF、world、Excel 之類)線上預覽?LaravelExcel
- 文件線上預覽的實現
- 圖片怎麼轉換成PDF,圖片轉PDF教程
- javascript和HTML5上傳圖片之前實現預覽效果JavaScriptHTML
- 基於WPSOffice+Pywpsrpc構建Docker映象,實現文件轉換和線上預覽服務RPCDocker
- linux下安裝 openoffice 實現 office文件轉 pdfLinux
- SpringMVC實現ajax上傳圖片實時預覽SpringMVC
- 如何實現檔案轉換與線上預覽功能
- .net5NuGet安裝包Spire.PDF實現PDF轉圖片
- 純JS實現圖片預覽與等比例縮放和居中JS
- java實現文件線上預覽工具Java
- uniapp 線上預覽pdf 或者 檔案APP
- 前端圖片預覽前端
- jsp+springmvc實現檔案上傳、圖片上傳和及時預覽圖片JSSpringMVC
- FileReader初步使用實現上傳圖片預覽效果
- vue中如何實現pdf檔案預覽?Vue
- 記錄--前端實現檔案預覽(word、excel、pdf、ppt、xmind、 音影片、圖片、文字) 國際化前端Excel