日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

android打开预览文件格式,Android中文档预览功能的实现思路及问题

發(fā)布時(shí)間:2024/3/13 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android打开预览文件格式,Android中文档预览功能的实现思路及问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Andriod中的文檔在線查看功能,類似于網(wǎng)易郵箱大師中的附件預(yù)覽功能,要求在app內(nèi)直接打開office文檔、pdf文檔等。

思路一:后臺(tái)統(tǒng)一轉(zhuǎn)換文檔格式,安卓端只預(yù)覽一種格式文檔。

在后臺(tái)將office(Word、Excle、PPT)文檔轉(zhuǎn)換為pdf文檔,在安卓端預(yù)覽的時(shí)候,其實(shí)是從后臺(tái)先把pdf文檔下載到手機(jī)上,再去讀取。

后臺(tái):openoffice + jodconverter將office文檔轉(zhuǎn)換為pdf格式。

集成難度不大,網(wǎng)上教程非常多,需要在服務(wù)器上安裝openoffice,轉(zhuǎn)換速度很慢(頁(yè)數(shù)多特別明顯,頁(yè)數(shù)少的話速度在可以接受的范圍之內(nèi),轉(zhuǎn)換速度與文檔大小關(guān)系不大,主要是文檔頁(yè)數(shù))。

安卓端使用AndroidPdfViewer第三方庫(kù)顯示pdf文檔。

就是使用第三方庫(kù),也很簡(jiǎn)單。

思路二:在安卓端完成文檔轉(zhuǎn)換

使用Apache的Poi組件,但是由于ppt在轉(zhuǎn)換過程中需要用到j(luò)ava的awt,所以無法實(shí)現(xiàn)ppt的轉(zhuǎn)換,也就是說只能實(shí)現(xiàn)word、excle的轉(zhuǎn)換。如果項(xiàng)目中只是有轉(zhuǎn)換word或者excle的需求,可以采用Poi。

具體是:使用Poi將doc、docx、xls、xlsx文檔轉(zhuǎn)換為html,再使用webview加載本地html。

這里要注意的是,Poi的jar包的導(dǎo)入。如果去apache的poi官網(wǎng)查看各組件的功能,以及要導(dǎo)入的jar包,但是網(wǎng)上的代碼一般都是org.apache.poi.xwpf.converter.xhtml

這個(gè)庫(kù)的。等你導(dǎo)入了這個(gè)庫(kù),又自己從官網(wǎng)上下載了poi、poi-ooxml等jar包引入后,很可能會(huì)導(dǎo)致編譯出錯(cuò),提示有重復(fù)文件。這是由于導(dǎo)入的jar包的版本不一致導(dǎo)致的。正確的導(dǎo)入方式可以參考下面的:

這個(gè)會(huì)自動(dòng)把關(guān)聯(lián)的jar包引入,從maven倉(cāng)庫(kù)可以看到這個(gè)jar的依賴,以及依賴的依賴,

總之很多,可以在project視圖中External Libraries來查看這個(gè)庫(kù)文件到底包含了哪些jar包。

compile 'fr.opensagres.xdocreport:org.apache.poi.xwpf.converter.xhtml:1.0.6'

---------------------------------------------------------------------------------------------------

這個(gè)主要是doc的轉(zhuǎn)換用到的,可以不引入,網(wǎng)上也有很多轉(zhuǎn)換方法沒有用到這個(gè)庫(kù)

//compile 'fr.opensagres.xdocreport:fr.opensagres.xdocreport.document:1.0.6'

---------------------------------------------------------------------------------------------------

這個(gè)庫(kù)文件的版本至關(guān)重要,因?yàn)?..xhtml:1.0.6中依賴的poi等jar的版本就是3.10-FINAL,

所以這里必須也是3.10-FINAL,不然編譯肯定不會(huì)通過。

compile 'org.apache.poi:poi-scratchpad:3.10-FINAL'

總之,如果你在apache.poi官網(wǎng)上看各個(gè)組件之間的依賴關(guān)系有些困難,可以去maven看。

除了引入庫(kù)文件以外,還需要在app的gradle文件中添加如下語句:

defaultConfig {

...

multiDexEnabled true

...

}

packagingOptions {

...

exclude 'META-INF/LICENSE'

exclude 'META-INF/NOTICE'

dexOptions {

javaMaxHeapSize "3g"

jumboMode = true

preDexLibraries = false

}

lintOptions {

abortOnError false

}

project.tasks.withType(com.android.build.gradle.tasks.Dex) {

additionalParameters = ['--core-library']

}

思路三:其他

POI由于預(yù)覽效果不是很好,不建議使用(安卓無法轉(zhuǎn)換ppt與pptx)

Flashpaper缺少后續(xù)支持,不建議使用(后臺(tái),與安卓無關(guān))

第三方付費(fèi)產(chǎn)品中,Office Web 365

完全依賴于第三方云服務(wù),在安全性、靈活性、穩(wěn)定性為驗(yàn)證,不建議使用

科瀚的SOAOffice和卓正軟件的pageoffice需要瀏覽器Activex插件的支持,對(duì)用戶不是很友好,不建議試用(后臺(tái),與安卓無關(guān))

OpenOffice的預(yù)覽效果稍差,但集成方便;

Office Web Apps預(yù)覽效果最佳,釘釘、126等也采用此方式,但估計(jì)集成難度稍大,另外釘釘?shù)念A(yù)覽偶爾也出現(xiàn)不穩(wěn)定的情況;

永中office的預(yù)覽效果和集成難度比較平衡,但需付費(fèi)。

總之,除非需求必須,否則這種功能還是不要實(shí)現(xiàn),因?yàn)殡y度很大,耗時(shí)費(fèi)力,一般情況下交給系統(tǒng)去打開就行了。當(dāng)然,主要功能是文檔閱讀的app除外。

一些代碼參考

說明:大部分是從網(wǎng)上找的,僅供參考,功能沒問題,但很多細(xì)節(jié)有待完善。

package com.ght.loginapp.utilities;

import org.apache.poi.hssf.converter.ExcelToHtmlConverter;

import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.converter.PicturesManager;

import org.apache.poi.hwpf.converter.WordToHtmlConverter;

import org.apache.poi.hwpf.usermodel.Picture;

import org.apache.poi.hwpf.usermodel.PictureType;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.ss.usermodel.WorkbookFactory;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.apache.poi.xwpf.converter.core.FileImageExtractor;

import org.apache.poi.xwpf.converter.core.FileURIResolver;

import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;

import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;

import org.apache.poi.xwpf.usermodel.XWPFDocument;

import org.w3c.dom.Document;

import java.io.BufferedWriter;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.OutputKeys;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFDataFormat;

import org.apache.poi.hssf.usermodel.HSSFFont;

import org.apache.poi.hssf.usermodel.HSSFPalette;

import org.apache.poi.hssf.util.HSSFColor;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.util.CellRangeAddress;

import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import org.apache.poi.xssf.usermodel.XSSFColor;

import org.apache.poi.xssf.usermodel.XSSFFont;

/**

* 2016/9/12 0012,由 yuezc 創(chuàng)建 .

*

* 功能描述:

*

* 說明:

* ---------------------------

* 修改時(shí)間:

* 修改說明:

* 修改人:

*

* POIFS

* POIFS是該項(xiàng)目的最古老,最穩(wěn)定的一部分。.這是格式化OLE 2復(fù)合文檔為純Java的接口。 它同時(shí)支持讀寫功能。所有的組件,最終都依賴于它的定義

*

* HSSF 和 XSSF

* HSSF: MS-Excel 97-2003(.xls),基于BIFF8格式的JAVA接口。

* XSSF:MS-Excel 2007+(.xlsx),基于OOXML格式的JAVA接口。

*

* HWPF 和XWPF

* HWPF: MS-Word 97-2003(.doc),基于BIFF8格式的JAVA接口。只支持.doc文件簡(jiǎn)單的操作,讀寫能力有限。本API為POI項(xiàng)目早期開發(fā),很不幸的 是主要負(fù)責(zé)HWPF模塊開發(fā)的工程師-“Ryan Ackley”已經(jīng)離開Apache組織,現(xiàn)在該模塊沒有人維護(hù)、更新、完善。

* XWPF:MS-Word 2007+(.docx),基于OOXML格式的JAVA接口。較HWPF功能完善。

*/

public class DocumentFormatConvertUtils {

/**

* doc文檔轉(zhuǎn)成html格式

*/

public static void doc2html(String docPath, final String docName, String htmlName, String htmlPath) {

HWPFDocument wordDocument = null;

try {

wordDocument = new HWPFDocument(new FileInputStream(docPath + docName));

} catch (IOException e) {

e.printStackTrace();

}

WordToHtmlConverter wordToHtmlConverter = null;

try {

wordToHtmlConverter = new WordToHtmlConverter(

DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());

} catch (ParserConfigurationException e) {

e.printStackTrace();

}

//設(shè)置圖片路徑

wordToHtmlConverter.setPicturesManager(new PicturesManager() {

public String savePicture(byte[] content,

PictureType pictureType, String suggestedName,

float widthInches, float heightInches) {

String name = docName.substring(0, docName.indexOf("\\."));

return name + "/" + suggestedName;

}

});

//保存圖片

List pics = wordDocument.getPicturesTable().getAllPictures();

if (pics != null) {

for (int i = 0; i < pics.size(); i++) {

Picture pic = (Picture) pics.get(i);

System.out.println(pic.suggestFullFileName());

try {

String name = docName.substring(0, docName.indexOf("\\."));

pic.writeImageContent(new FileOutputStream(htmlPath + name + "/"

+ pic.suggestFullFileName()));

} catch (Exception e) {

e.printStackTrace();

}

}

}

wordToHtmlConverter.processDocument(wordDocument);

Document htmlDocument = wordToHtmlConverter.getDocument();

ByteArrayOutputStream out = new ByteArrayOutputStream();

DOMSource domSource = new DOMSource(htmlDocument);

StreamResult streamResult = new StreamResult(out);

TransformerFactory tf = TransformerFactory.newInstance();

Transformer serializer = null;

try {

serializer = tf.newTransformer();

} catch (TransformerConfigurationException e) {

e.printStackTrace();

}

serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");

serializer.setOutputProperty(OutputKeys.INDENT, "yes");

serializer.setOutputProperty(OutputKeys.METHOD, "html");

try {

serializer.transform(domSource, streamResult);

} catch (TransformerException e) {

e.printStackTrace();

}

try {

out.close();

} catch (IOException e) {

e.printStackTrace();

}

//保存html文件

writeFile(new String(out.toByteArray()), htmlPath + htmlName);

}

/**

* docx文檔轉(zhuǎn)成html格式

*/

public static void docx2html(String docxPath, String docxName, String htmlName, String htmlPath) {

try {

final String file = docxPath + docxName;

File f = new File(file);

if (!f.exists()) {

System.out.println("Sorry File does not Exists!");

} else {

if (f.getName().endsWith(".docx") || f.getName().endsWith(".DOCX")) {

// 1) 加載word文檔生成 XWPFDocument對(duì)象

InputStream in = new FileInputStream(f);

XWPFDocument document = new XWPFDocument(in);

// 2) 解析 XHTML配置 (這里設(shè)置IURIResolver來設(shè)置圖片存放的目錄)

File imageFolderFile = new File(docxPath);

XHTMLOptions options = XHTMLOptions.create().URIResolver(new FileURIResolver(imageFolderFile));

options.setExtractor(new FileImageExtractor(imageFolderFile));

options.setIgnoreStylesIfUnused(false);

options.setFragment(true);

// 3) 將 XWPFDocument轉(zhuǎn)換成XHTML

OutputStream out = new FileOutputStream(new File(htmlPath + htmlName));

XHTMLConverter.getInstance().convert(document, out, options);

} else {

System.out.println("Enter only MS Office 2007+ files");

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* xls文檔轉(zhuǎn)成html格式

*/

public static void xls2html(String xlsPath, String xlsName, String htmlName, String htmlPath) {

try {

InputStream input = new FileInputStream(xlsPath + xlsName);

HSSFWorkbook excelBook = new HSSFWorkbook(input);

ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());

excelToHtmlConverter.processWorkbook(excelBook);

List pics = excelBook.getAllPictures();

if (pics != null) {

for (int i = 0; i < pics.size(); i++) {

Picture pic = (Picture) pics.get(i);

try {

pic.writeImageContent(new FileOutputStream(xlsName.substring(0, xlsName.indexOf(".")) + pic.suggestFullFileName()));

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

}

Document htmlDocument = excelToHtmlConverter.getDocument();

ByteArrayOutputStream outStream = new ByteArrayOutputStream();

DOMSource domSource = new DOMSource(htmlDocument);

StreamResult streamResult = new StreamResult(outStream);

TransformerFactory tf = TransformerFactory.newInstance();

Transformer serializer = tf.newTransformer();

serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");

serializer.setOutputProperty(OutputKeys.INDENT, "yes");

serializer.setOutputProperty(OutputKeys.METHOD, "html");

serializer.transform(domSource, streamResult);

outStream.close();

//保存html文件

writeFile(new String(outStream.toByteArray()), htmlPath + htmlName);

} catch (Exception e) {

}

}

/**

* xlsx文檔轉(zhuǎn)成html格式

*/

public static void xlsx2html(String xlsxPath, String xlsxName, String htmlName, String htmlPath) {

writeFile(readExcelToHtml(xlsxPath + xlsxName, true), htmlPath + htmlName);

}

public static void ppt2html(String pptPath, String pptName, String htmlName, String htmlPath) {

//抱歉,沒有實(shí)現(xiàn)

}

public static void pptx2html(String pptxPath, String pptxName, String htmlName, String htmlPath) {

//抱歉,沒有實(shí)現(xiàn)

}

---------------------------------------

/**

* 將html文件保存到sd卡

*/

public static void writeFile(String content, String path) {

FileOutputStream fos = null;

BufferedWriter bw = null;

try {

File file = new File(path);

if (!file.exists()) {

file.createNewFile();

}

fos = new FileOutputStream(file);

bw = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"));

bw.write(content);

} catch (FileNotFoundException fnfe) {

fnfe.printStackTrace();

} catch (IOException ioe) {

ioe.printStackTrace();

} finally {

try {

if (bw != null)

bw.close();

if (fos != null)

fos.close();

} catch (IOException ie) {

}

}

}

/**

* @param filePath 文件的路徑

* @param isWithStyle 是否需要表格樣式 包含 字體 顏色 邊框 對(duì)齊方式

* @return

* ...

*

* 字符串

*/

public static String readExcelToHtml(String filePath, boolean isWithStyle) {

InputStream is = null;

String htmlExcel = null;

try {

File sourcefile = new File(filePath);

is = new FileInputStream(sourcefile);

Workbook wb = WorkbookFactory.create(is);

if (wb instanceof XSSFWorkbook) {

XSSFWorkbook xWb = (XSSFWorkbook) wb;

htmlExcel = getExcelInfo(xWb, isWithStyle);

} else if (wb instanceof HSSFWorkbook) {

HSSFWorkbook hWb = (HSSFWorkbook) wb;

htmlExcel = getExcelInfo(hWb, isWithStyle);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return htmlExcel;

}

public static String getExcelInfo(Workbook wb, boolean isWithStyle) {

StringBuffer sb = new StringBuffer();

Sheet sheet = wb.getSheetAt(0);// 獲取第一個(gè)Sheet的內(nèi)容

int lastRowNum = sheet.getLastRowNum();

Map map[] = getRowSpanColSpanMap(sheet);

sb.append("

Row row = null; // 兼容

Cell cell = null; // 兼容

for (int rowNum = sheet.getFirstRowNum(); rowNum <= lastRowNum; rowNum++) {

row = sheet.getRow(rowNum);

if (row == null) {

sb.append("

");

continue;

}

sb.append("

");

int lastColNum = row.getLastCellNum();

for (int colNum = 0; colNum < lastColNum; colNum++) {

cell = row.getCell(colNum);

if (cell == null) { // 特殊情況 空白的單元格會(huì)返回null

sb.append("

");

continue;

}

String stringValue = getCellValue(cell);

if (map[0].containsKey(rowNum + "," + colNum)) {

String pointString = map[0].get(rowNum + "," + colNum);

map[0].remove(rowNum + "," + colNum);

int bottomeRow = Integer.valueOf(pointString.split(",")[0]);

int bottomeCol = Integer.valueOf(pointString.split(",")[1]);

int rowSpan = bottomeRow - rowNum + 1;

int colSpan = bottomeCol - colNum + 1;

sb.append("

} else if (map[1].containsKey(rowNum + "," + colNum)) {

map[1].remove(rowNum + "," + colNum);

continue;

} else {

sb.append("

}

// 判斷是否需要樣式

if (isWithStyle) {

dealExcelStyle(wb, sheet, cell, sb);// 處理單元格樣式

}

sb.append(">");

if (stringValue == null || "".equals(stringValue.trim())) {

sb.append(" ");

} else {

// 將ascii碼為160的空格轉(zhuǎn)換為html下的空格( )

sb.append(stringValue.replace(String.valueOf((char) 160), " "));

}

sb.append("

");

}

sb.append("

");

}

sb.append("

");

return sb.toString();

}

private static Map[] getRowSpanColSpanMap(Sheet sheet) {

Map map0 = new HashMap();

Map map1 = new HashMap();

int mergedNum = sheet.getNumMergedRegions();

CellRangeAddress range = null;

for (int i = 0; i < mergedNum; i++) {

range = sheet.getMergedRegion(i);

int topRow = range.getFirstRow();

int topCol = range.getFirstColumn();

int bottomRow = range.getLastRow();

int bottomCol = range.getLastColumn();

map0.put(topRow + "," + topCol, bottomRow + "," + bottomCol);

// System.out.println(topRow + "," + topCol + "," + bottomRow + ","

// + bottomCol);

int tempRow = topRow;

while (tempRow <= bottomRow) {

int tempCol = topCol;

while (tempCol <= bottomCol) {

map1.put(tempRow + "," + tempCol, "");

tempCol++;

}

tempRow++;

}

map1.remove(topRow + "," + topCol);

}

Map[] map = {map0, map1};

return map;

}

/**

* 獲取表格單元格Cell內(nèi)容

*

* @param cell

* @return

*/

private static String getCellValue(Cell cell) {

String result = new String();

switch (cell.getCellType()) {

case Cell.CELL_TYPE_NUMERIC:// 數(shù)字類型

if (HSSFDateUtil.isCellDateFormatted(cell)) {// 處理日期格式、時(shí)間格式

SimpleDateFormat sdf = null;

if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {

sdf = new SimpleDateFormat("HH:mm");

} else {// 日期

sdf = new SimpleDateFormat("yyyy-MM-dd");

}

Date date = cell.getDateCellValue();

result = sdf.format(date);

} else if (cell.getCellStyle().getDataFormat() == 58) {

// 處理自定義日期格式:m月d日(通過判斷單元格的格式id解決,id的值是58)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

double value = cell.getNumericCellValue();

Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);

result = sdf.format(date);

} else {

double value = cell.getNumericCellValue();

CellStyle style = cell.getCellStyle();

DecimalFormat format = new DecimalFormat();

String temp = style.getDataFormatString();

// 單元格設(shè)置成常規(guī)

if (temp.equals("General")) {

format.applyPattern("#");

}

result = format.format(value);

}

break;

case Cell.CELL_TYPE_STRING:// String類型

result = cell.getRichStringCellValue().toString();

break;

case Cell.CELL_TYPE_BLANK:

result = "";

break;

default:

result = "";

break;

}

return result;

}

/**

* 處理表格樣式

*

* @param wb

* @param sheet

* @param cell

* @param sb

*/

private static void dealExcelStyle(Workbook wb, Sheet sheet, Cell cell, StringBuffer sb) {

CellStyle cellStyle = cell.getCellStyle();

if (cellStyle != null) {

short alignment = cellStyle.getAlignment();

sb.append("align='" + convertAlignToHtml(alignment) + "' ");// 單元格內(nèi)容的水平對(duì)齊方式

short verticalAlignment = cellStyle.getVerticalAlignment();

sb.append("valign='" + convertVerticalAlignToHtml(verticalAlignment) + "' ");// 單元格中內(nèi)容的垂直排列方式

if (wb instanceof XSSFWorkbook) {

XSSFFont xf = ((XSSFCellStyle) cellStyle).getFont();

short boldWeight = xf.getBoldweight();

sb.append("style='");

sb.append("font-weight:" + boldWeight + ";"); // 字體加粗

sb.append("font-size: " + xf.getFontHeight() / 2 + "%;"); // 字體大小

int columnWidth = sheet.getColumnWidth(cell.getColumnIndex());

sb.append("width:" + columnWidth + "px;");

XSSFColor xc = xf.getXSSFColor();

if (xc != null && !"".equals(xc)) {

sb.append("color:#" + xc.getARGBHex().substring(2) + ";"); // 字體顏色

}

XSSFColor bgColor = (XSSFColor) cellStyle.getFillForegroundColorColor();

// System.out.println("************************************");

// System.out.println("BackgroundColorColor:

// "+cellStyle.getFillBackgroundColorColor());

// System.out.println("ForegroundColor:

// "+cellStyle.getFillForegroundColor());//0

// System.out.println("BackgroundColorColor:

// "+cellStyle.getFillBackgroundColorColor());

// System.out.println("ForegroundColorColor:

// "+cellStyle.getFillForegroundColorColor());

// String bgColorStr = bgColor.getARGBHex();

// System.out.println("bgColorStr: "+bgColorStr);

if (bgColor != null && !"".equals(bgColor)) {

sb.append("background-color:#" + bgColor.getARGBHex().substring(2) + ";"); // 背景顏色

}

sb.append(getBorderStyle(0, cellStyle.getBorderTop(),

((XSSFCellStyle) cellStyle).getTopBorderXSSFColor()));

sb.append(getBorderStyle(1, cellStyle.getBorderRight(),

((XSSFCellStyle) cellStyle).getRightBorderXSSFColor()));

sb.append(getBorderStyle(2, cellStyle.getBorderBottom(),

((XSSFCellStyle) cellStyle).getBottomBorderXSSFColor()));

sb.append(getBorderStyle(3, cellStyle.getBorderLeft(),

((XSSFCellStyle) cellStyle).getLeftBorderXSSFColor()));

} else if (wb instanceof HSSFWorkbook) {

HSSFFont hf = ((HSSFCellStyle) cellStyle).getFont(wb);

short boldWeight = hf.getBoldweight();

short fontColor = hf.getColor();

sb.append("style='");

HSSFPalette palette = ((HSSFWorkbook) wb).getCustomPalette(); // 類HSSFPalette用于求的顏色的國(guó)際標(biāo)準(zhǔn)形式

HSSFColor hc = palette.getColor(fontColor);

sb.append("font-weight:" + boldWeight + ";"); // 字體加粗

sb.append("font-size: " + hf.getFontHeight() / 2 + "%;"); // 字體大小

String fontColorStr = convertToStardColor(hc);

if (fontColorStr != null && !"".equals(fontColorStr.trim())) {

sb.append("color:" + fontColorStr + ";"); // 字體顏色

}

int columnWidth = sheet.getColumnWidth(cell.getColumnIndex());

sb.append("width:" + columnWidth + "px;");

short bgColor = cellStyle.getFillForegroundColor();

hc = palette.getColor(bgColor);

String bgColorStr = convertToStardColor(hc);

if (bgColorStr != null && !"".equals(bgColorStr.trim())) {

sb.append("background-color:" + bgColorStr + ";"); // 背景顏色

}

sb.append(getBorderStyle(palette, 0, cellStyle.getBorderTop(), cellStyle.getTopBorderColor()));

sb.append(getBorderStyle(palette, 1, cellStyle.getBorderRight(), cellStyle.getRightBorderColor()));

sb.append(getBorderStyle(palette, 3, cellStyle.getBorderLeft(), cellStyle.getLeftBorderColor()));

sb.append(getBorderStyle(palette, 2, cellStyle.getBorderBottom(), cellStyle.getBottomBorderColor()));

}

sb.append("' ");

}

}

/**

* 單元格內(nèi)容的水平對(duì)齊方式

*

* @param alignment

* @return

*/

private static String convertAlignToHtml(short alignment) {

String align = "left";

switch (alignment) {

case CellStyle.ALIGN_LEFT:

align = "left";

break;

case CellStyle.ALIGN_CENTER:

align = "center";

break;

case CellStyle.ALIGN_RIGHT:

align = "right";

break;

default:

break;

}

return align;

}

/**

* 單元格中內(nèi)容的垂直排列方式

*

* @param verticalAlignment

* @return

*/

private static String convertVerticalAlignToHtml(short verticalAlignment) {

String valign = "middle";

switch (verticalAlignment) {

case CellStyle.VERTICAL_BOTTOM:

valign = "bottom";

break;

case CellStyle.VERTICAL_CENTER:

valign = "center";

break;

case CellStyle.VERTICAL_TOP:

valign = "top";

break;

default:

break;

}

return valign;

}

private static String convertToStardColor(HSSFColor hc) {

StringBuffer sb = new StringBuffer("");

if (hc != null) {

if (HSSFColor.AUTOMATIC.index == hc.getIndex()) {

return null;

}

sb.append("#");

for (int i = 0; i < hc.getTriplet().length; i++) {

sb.append(fillWithZero(Integer.toHexString(hc.getTriplet()[i])));

}

}

return sb.toString();

}

private static String fillWithZero(String str) {

if (str != null && str.length() < 2) {

return "0" + str;

}

return str;

}

static String[] bordesr = {"border-top:", "border-right:", "border-bottom:", "border-left:"};

static String[] borderStyles = {"solid ", "solid ", "solid ", "solid ", "solid ", "solid ", "solid ", "solid ",

"solid ", "solid", "solid", "solid", "solid", "solid"};

private static String getBorderStyle(HSSFPalette palette, int b, short s, short t) {

if (s == 0)

return bordesr[b] + borderStyles[s] + "#d0d7e5 1px;";

String borderColorStr = convertToStardColor(palette.getColor(t));

borderColorStr = borderColorStr == null || borderColorStr.length() < 1 ? "#000000" : borderColorStr;

return bordesr[b] + borderStyles[s] + borderColorStr + " 1px;";

}

private static String getBorderStyle(int b, short s, XSSFColor xc) {

if (s == 0)

return bordesr[b] + borderStyles[s] + "#d0d7e5 1px;";

if (xc != null && !"".equals(xc)) {

String borderColorStr = xc.getARGBHex();// t.getARGBHex();

borderColorStr = borderColorStr == null || borderColorStr.length() < 1 ? "#000000"

: borderColorStr.substring(2);

return bordesr[b] + borderStyles[s] + borderColorStr + " 1px;";

}

return "";

}

}

總結(jié)

以上是生活随笔為你收集整理的android打开预览文件格式,Android中文档预览功能的实现思路及问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人免费看毛片 | 极品少妇网站 | 日本美女日批视频 | 日韩欧美一区在线观看 | 国产精品无码一区二区桃花视频 | 久久精品国产网红主播 | 国产视频一二三 | 中文字幕1| 男人插入女人下面的视频 | 国产欧美一区二区三区在线老狼 | 国产人妖在线观看 | 潘金莲性xxxxhd | www国产 | 国产成人在线观看免费网站 | 2019中文字幕在线视频 | 欧美肥老妇视频 | 国产五月天婷婷 | 亚洲网站视频 | 色综合久久中文字幕无码 | 午夜私人福利 | 91精品国产综合久久久蜜臀九色 | 美女视频久久 | 欧美整片在线 | 色老头免费视频 | 久久精品视频16 | 伊人网综合网 | 国产无遮挡又黄又爽又色 | 老熟妇毛茸茸 | 久久久久久久久久久久久国产 | 无码人妻精品一区二区三区夜夜嗨 | www.久久色| 日b免费视频 | 一区二区在线精品 | 午夜福利啪啪片 | 男人的天堂久久 | 性生交大片免费看狂欲 | youjizz国产| 日本精品区 | 无码人妻精品一区二区三应用大全 | 欧美高清精品一区二区 | 国产一区二区网站 | 日韩亚洲精品中文字幕 | 欧美日韩xxxx| 天天看片天天爽 | 99热播精品 | 一卡二卡三卡在线视频 | 顶级嫩模啪啪呻吟不断好爽 | 亚洲国产一区二区三区a毛片 | 天天射美女| 99久久久精品免费观看国产 | 丁香九月激情 | 日本精品在线一区 | 日韩一级片av| 少妇天天干 | 久久久久国产综合av天堂 | 亚洲乱码一区二区 | 欧美成年人在线视频 | av中文字幕在线播放 | 朝桐光av一区二区三区 | 亚洲国产精品999 | 中文字幕免费高清在线 | 国产在线h | 91av在线视频观看 | 亚洲影视中文字幕 | 亚洲精品视频在线播放 | 毛片视频软件 | 日本黄色免费大片 | 国产香蕉一区二区三区 | 国产高潮自拍 | 国产精品网站视频 | 亚洲永久免费视频 | 国产精品乱码久久久久久久久 | 激情四月| juliaannxxxxx高清| av在线免费网站 | 国产精品久久久久久妇女 | 亚洲综合色自拍一区 | 精品人妻一区二区三 | 亚洲精品aⅴ | 最新在线黄色网址 | 人妻一区在线 | 国产精品爱啪在线线免费观看 | 日本激情小视频 | 东凛在线观看 | 日韩精品人妻一区二区三区免费 | 欧美一区二区三区观看 | 国产一卡二卡三卡四卡 | 亚洲国产精品成人午夜在线观看 | 六月天综合网 | 精品国产一二三四区 | 亚洲天堂色| 欧美日韩中文字幕视频 | 嫩草视频91 | 日韩精品成人免费观看视频 | 亚洲成人免费 | 午夜影院a| 亚洲欧洲色 | 亚洲av无码一区二区乱子伦as | 国产精品剧情av |