數學公式是如何實現的?
數學公式實現大方向
青優網
有個軟體可以做到轉換公式:word2tex和tex2word
後臺上傳檔案–>系統識別出公式,將其轉換為Latex程式碼–>前臺用Mathjax進行渲染。
梯子網
Aspose,它是美國開發商的商業包,具體詳情登入外網才能知道。google搜到了官網,看了下產品資訊,發現它近乎完美支援Java/.net生成word文件,涵括了字型大小、主標題副標題、表格、顏色等等等等。
分析了一下局勢,原來是和微軟的word不開源有關係的。雖然我們在word裡寫了一段話、傳了一張圖片、編輯了一個公式,但是它底層到底經過了哪些步驟,是以什麼形式儲存的,這些大家都不知道。所以雖然有工具可以將word公式轉成tex以及轉回去,但是有時候還是會生成亂碼,說明穩定性還是不容樂觀。具體問題我就不深入研究了。
猿題庫:
猿題庫主打學生端的線上刷題app,雖然它也有題庫系統,但是僅從手機app端來說很難看出來它是怎麼設計和維護的。不過我們可以從手機app端能瞭解到他們的題的構成。
將題目分享到微信朋友之後,再用微信電腦端開啟,我們就可以在pc端拿到手機app上猿題庫的試題連結了!
這樣一看就明顯了:猿題庫的公式都是用圖片進行儲存的。
解析word並切圖並不複雜,是可以實現的,具體就不贅述了。
最理想的題庫管理方案是:支援在線上傳以及word上傳,支援線上編輯,支援下載,並且下載的word公式是可以進行編輯的。
然而現實卻不能完全實現,所以只能在設計自己的題庫時有所取捨。
Mathjax可以解析Latex、mathml等程式碼。
word2tex可以將word裡的公式轉換為tex程式碼。
Latex是基於tex的,理論上是相通的。
Aspose是商業包,近乎完美地支援Java/.NET線上編輯生成word文件。
題庫是線上K12教育的基礎,而題的實現則是題庫的基礎。在設計自家題庫之初要想到所有的可能性以及解決方案,有了方向做起來就不難了。
好吧,其實後面的打賞顯示是手敲上去的,簡書目前並沒有支援打賞顯示隱藏資訊。
既然大家都對如何實現比較好奇,那麼我簡單地說一下吧。
首先要看你的公司支不支援一個專門錄題團隊。有錢,有精力,這樣生成的題質量是最好的。
其次是不是有必要下載成word。目前網上有很多賣題的,題裡面帶有html標籤,很不規範,下載下來的題也不能看。
再次下載成word的公式有沒有必要可以編輯。也有賣word版的,他們的題的公式都是圖片。
還有網上買的題有一小部分的題需要人工稽核修改,後期有一定的工作量,不能保證買完全部能用。而且買的程式碼標籤格式的題,不能下載成word。
我家題庫大概就是通過上面幾點然後做的決策。具體細節涉及商業機密不便透露了。
三種方式:1.輸出公式圖片、2.輸出公式html、3.輸出Latex讓前端渲染
我們曾經敲出一塊伺服器資源專門做公式的後臺渲染,然後把渲染出來的公式html儲存到資料庫,客戶端請求時直接推送過去,連渲染都省了,比圖片要輕便。 唯一的壞處是公式太多時,文字因為包含了太多公式標籤導致體積過大。
數學公式實現之——解析world
android 解析docx檔案
總結
使用poi解析docx檔案
流程:
呼叫介面將docx轉化為html,然後app中通過webview載入該html即可顯示
在自己的應用中實現word文件查閱功能,整合app閱讀word功能也可以通過幾種方式實現
例如:購買專門的sdk包,像Aspose等(money啊)或者伺服器端處理成圖片或者html,然後android端去請求訪問等方式。對於大部分個人開發者而言,這兩種方式就顯得比較重量級了。
下面介紹兩種專門解析docx檔案的方式:docx4j 以及poi
Docx4j
Docx4j
github地址:https://github.com/plutext/AndroidDocxToHtml
這個是官網demo,基本可以直接使用,解析出來的格式比較全,樣式也比較接近原文件,就是解析速度令人不敢恭維,手機上測試的話,一般一份兒docx文件都需要30s以上甚至更多,有時候測試文件明明就只有幾十k大小而已,對於比較大,比較複雜的文件,時間就更是讓人崩潰。解析速度不是令人滿意。解析測試中遇到的bug
1.表格丟失,內容丟失:內嵌表格(表格中還有表格的這種)的內容和樣式會有部分丟失現象
2.表格(又是我?)樣式:假如文件中的表格在word文件中排版時超出了該文件的邊界線,你會發現超出邊界的內容又不見了
3.目錄亂碼:如果文件中有目錄,目錄會被加上一些超連結,需要手工處理去掉
4.圖片無法解析:有一些格式的圖片無法解析,比如EMF,WMF這種型別的
5.批註無法顯示:目前沒有找到批註顯示的地方,暫且算丟失吧,後面在試試
6.。。。其它暫時還沒被發現的問題
POI
POI
poi是apache的一個開源專案,不多說,直接上官網去下載就可以
官網地址:http://poi.apache.org/
如果你是android studio使用者:那就很簡單了
只需要引入依賴(版本號不一定哦,gradle會自己把相關依賴包下載到位):
compile 'fr.opensagres.xdocreport:org.apache.poi.xwpf.converter.xhtml:1.0.5'
那如果你是eclipse使用者(夥計,趕緊用studio吧)
需要手工引入以下jar包,包括:poi , poi-ooxml , ooxml-schema,org.apache.poi.xwpf.converter.xhtml,org.apache.poi.xwpf.converter.core
實現程式碼如下
{
InputStream is = new FileInputStream(file);
XWPFDocument docx = new
XWPFDocument(is);
OutputStream os = new ByteArrayOutputStream();
String imgDesPath = "/sdcard/img";
File imgFile = new File("/sdcard/img");
this.baseUrl = this.getDir("image", Context.MODE_PRIVATE).toURL().toString();
if (!imgFile.exists()) {
file.mkdirs();
}
poi解析的問題
速度比docx4j要稍快一點,會有文件內容解析不全樣式丟失的情況
流程:
呼叫介面將docx轉化為html,然後app中通過webview載入該html即可顯示
轉化程式碼如下(我就想問下,這程式碼格式到底該怎麼調啊~好煩躁):
try {
InputStream is = new FileInputStream(file);
XWPFDocument docx = new
XWPFDocument(is);
OutputStream os = new ByteArrayOutputStream();
String imgDesPath = "/sdcard/img";
File imgFile = new File("/sdcard/img");
this.baseUrl = this.getDir("image", Context.MODE_PRIVATE).toURL().toString();
if (!imgFile.exists()) {
file.mkdirs();
}
XHTMLOptions options = XHTMLOptions.create().URIResolver(new BasicURIResolver(imgDesPath));
options.setExtractor(new FileImageExtractor(imgFile));
options.setIgnoreStylesIfUnused(false);
options.setFragment(true);
XHTMLConverter.getInstance().convert(docx, os, options);
**os.write("/sdcard/xxx/html檔案")**
} catch (Exception e) {
Log.d(TAG, "catch " + e.getMessage());
}
webview 裡面直接load 上面生成的html檔案就可以了
poi將word2007轉化成html
1:匯入jar包依賴
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.10.1</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>org.apache.poi.xwpf.converter.core</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>org.apache.poi.xwpf.converter.xhtml</artifactId>
<version>1.0.6</version>
</dependency>
2:建立工具類,便於後面直接呼叫即可
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
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;
public class WordtoHtml07 {
public static void word07ToHtml(String fileName ,String imageFile , String htmFile) throws IOException{
File f = new File(fileName);
if (!f.exists()) {
System.out.println("sorry file does not exists");
}else{
if (f.getName().endsWith(".docx")|| f.getName().endsWith(".DOCX") || f.getName().endsWith(".doc")) {
//1:載入文件到XWPFDocument
InputStream in = new FileInputStream(f);
XWPFDocument document = new XWPFDocument(in);
//2:載入圖片到指定資料夾
File imgFile = new File(imageFile);
XHTMLOptions options = XHTMLOptions.create().URIResolver(new FileURIResolver(imgFile));
options.setExtractor(new FileImageExtractor(imgFile));
//3:轉換XWPFDocument to XHTML
OutputStream out = new FileOutputStream(new File(htmFile));
XHTMLConverter.getInstance().convert(document, out, options);
}else{
System.out.println("Enter only MS Office 2007+ files");
}
}
}
public static void main(String args[]) {
try {
word07ToHtml("F:/51/1.doc","F:/51/media","F:/51/1.htm");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
解析doc並顯示
package com.lattice.sodocument.attachment;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Table;
import org.apache.poi.hwpf.usermodel.TableCell;
import org.apache.poi.hwpf.usermodel.TableIterator;
import org.apache.poi.hwpf.usermodel.TableRow;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.ScrollView;
import android.widget.TextView;
import com.lattice.sodocument.main.BaseActivity;
import com.lattice.sodocument.main.R;
import com.lattice.sodocument.util.CompressionOfImage;
import com.lattice.sodocument.util.ConversionUtil;
import com.lattice.sodocument.util.FileUtil;
import com.lattice.sodocument.util.FunctionUtil;
import com.lattice.sodocument.util.LogUtil;
//doc和docx有問題
@SuppressLint({ "SetJavaScriptEnabled", "HandlerLeak" })
public class AttachmentView extends BaseActivity {
ScrollView scrollView;
TextView textView;
ImageView imageView;
Bitmap bitmap;
Handler mHandler;
ProgressBar mBar;
Runnable runnable = new Runnable() {
public void run() {
// 最終版
bitmap = ConversionUtil.string2Bitmap(attachmentString);
// 測試版
// bitmap = BitmapFactory.decodeResource(
// AttachmentView.this.getResources(), R.drawable.welcome);
bitmap = CompressionOfImage.comp(bitmap);
Message message = new Message();
mHandler.sendMessage(message);
}
};
StringBuffer text = new StringBuffer();
private Range range = null;
private HWPFDocument hwpf = null;
private String htmlPath;
private String picturePath;
@SuppressWarnings("rawtypes")
private List pictures;
private TableIterator tableIterator;
private int presentPicture = 0;
private int screenWidth;
private FileOutputStream output;
private File myFile;
String xml;
protected WebView mWebView;
public static final int ERROR = 0;
public static final int DOC = 1;
public static final int DOCX = 2;
public static final int IMAGE = 3;
public static final int TXT = 4;
private int attachmentType = 0;
private String attachmentString = "0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9////BQAAAP7///8EAAAABgAAAP7///8HAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAD+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAABgkCAAAAAADAAAAAAAAARgAAAAAAAAAAAAAAAODafPelbc8BAwAAAEAcAAAAAAAABQBTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgEEAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AEAAAAAAAAFAEQAbwBjAHUAbQBlAG4AdABTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAOAACAf///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAADwAQAAAAAAAFcAbwByAGQARABvAGMAdQBtAGUAbgB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADMOAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAP7///8JAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAA/v///xEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAAAA5AAAAOgAAADsAAAA8AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAQwAAAEQAAABFAAAARgAAAEcAAABIAAAA/v///0oAAABLAAAATAAAAE0AAABOAAAATwAAAFAAAABRAAAAUgAAAFMAAABUAAAAVQAAAFYAAABXAAAAWAAAAFkAAABaAAAAWwAAAFwAAABdAAAAXgAAAF8AAABgAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAagAAAGsAAABsAAAAbQAAAG4AAABvAAAAcAAAAP7////////////////////////////////////////////////////////////////////////////////////+/wAABgMCAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCrkQgAKyez2TAAAADMAQAAEQAAAAEAAACgAAAAAAAAgKgAAAACAAAAsAAAAAMAAADgAAAABAAAAOwAAAAFAAAABAEAAAYAAAAQAQAABwAAABwBAAAIAAAAPAEAAAkAAABUAQAADAAAAGABAAANAAAAbAEAAA4AAAB4AQAADwAAAIABAAAQAAAAiAEAABIAAACQAQAAEwAAAMQBAAAAAAAAAAAAAAAAAAAAAAAAAgAAALAEAAATAAAABAgAAB8AAAATAAAA2Y8vZgBOKk5LbdWLRJb2TgIw2Y8vZgBOKk5LbdWLRJb2TgIwAAAAAB8AAAABAAAAAAAAAB8AAAAHAAAAZgBlAGkAZgBlAGkAAAAAAB8AAAABAAAAAAAAAB8AAAABAAAAAAAAAB8AAAALAAAATgBvAHIAbQBhAGwALgB3AHAAdAAAAAAAHwAAAAcAAABmAGUAaQBmAGUAaQAAAAAAHwAAAAIAAAAyAAAAQAAAAABOozw2Z8kBQAAAAADyHfelbc8BAwAAAAEAAAADAAAAAAAAAAMAAAAAAAAAHwAAABYAAABNAGkAYwByAG8AcwBvAGYAdAAgAE8AZgBmAGkAYwBlACAAVwBvAHIAZAAAAAMAAAAAAAAAAAAAAP7/AAAGAwIAAAAAAAAAAAAAAAAAAAAAAAIAAAAC1c3VnC4bEJOXCAArLPmuRAAAAAXVzdWcLhsQk5cIACss+a5cAQAAGAEAABAAAAABAAAAiAAAAAAAAICQAAAADwAAAJgAAAACAAAApAAAAA4AAACwAAAABgAAALwAAAAFAAAAxAAAABEAAADMAAAAAwAAANQAAAAEAAAA4AAAAAcAAADoAAAACAAAAPAAAAAJAAAA+AAAAAoAAAAAAQAACwAAAAgBAAAQAAAAEAEAAAIAAACwBAAAEwAAAAQIAAAfAAAAAQAAAAAAAAAfAAAAAQAAAAAAAAAfAAAAAQAAAAAAAAADAAAAAQAAAAMAAAABAAAAAwAAAAAAAAAfAAAAAQAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAACwAAAAAAAAALAAAAAAAAAJQAAAAEAAAAAAAAACgAAAABAAAAXAAAAAAAAIBkAAAAAgAAAGwAAAABAAAAAgAAABMAAABLAFMATwBQAHIAbwBkAHUAYwB0AEIAdQBpAGwAZABWAGUAcgAAAAAAAgAAALAEAAATAAAABAgAAB8AAAAQAAAAMgAwADUAMgAtADkALgAxAC4AMAAuADQANAAwADUAAAAAAAAAAAAAAAAAAAAAAAAAMABUAGEAYgBsAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAgEFAAAAAwAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJAAAA3AkAAAAAAABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADspcEAiYgJBAAAFFC/AAAAAAAAEAAAAAAACAAAJggAAA4AS1NLU8MACAAAAAAAAAAAAAAAAAAAAAAAAAAECBYAMw4AAAAAAAAAAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAAAAAAAAAAAAKQAAAAAANoDAAAAAAAA2gMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7wgAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2gMAAAwAAADmAwAADAAAAAAAAAAAAAAABwQAAPYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2gkAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAywgAACQAAABjBgAAaAIAAP0FAABmAAAA8gMAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMJAADXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIADAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANmPL2YATipOS23Vi0SW9k4CMNmPL2YATipOS23Vi0SW9k4CMA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACQIAAAmCAAA/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbygBAAIACAAAJggAAP0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAATEAH7CCLiCwxkEhsAgHI5CgBSKwCAckkKAFJbAAABewUwMYsOADMlACADGQOAH/0QIAAAAAAAAAAAAAAAAAAACGAhEAEgABAJwADwAEAAAAAQAAAAAABAAAAAAAmAAAAJ4AAACeAAAAngAAAJ4AAACeAAAAngAAAJ4AAACeAAAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAAdgIAAHYCAAB2AgAAdgIAAHYCAAB2AgAAdgIAAHYCAAB2AgAANgYAADYGAAA2BgAABAAAAAQAAAA2BgAAPgIAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAAKgAAAA2BgAANgYAAAQAAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAALgAAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAABoAQAASAEAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAABGAABA8f8CAEYAAAAAAAAAAAAAAAIAY2uHZQAACwAAAGEkAwMkAzEkAAAcAENKFQBQSgEAS0gCAG1ICQRzSAkEbkgECHRIBAgAAAAAAAAAAAAAAAAAAAAAAAAkAEFA8v+hACQAAAgAAAAAAAAAAAYA2J6ki7VrPYRXW1NPAAAAAAAAAAAAAAAAjgAfQAEA8gCOAAAIAAAAAAAAAAACAHWYCXcAAGMADwASZPAAAQBhJAMDJANHJABAJgkkZAAAAAFOxggAAAD/AAABACVkAAAABE/GCAAAAP8AAAQA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";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_attachment);
initViews();
initEvents();
// Intent intent = getIntent();
// attachmentType = intent.getIntExtra("attachmentType", 0);
// attachmentString = intent.getStringExtra("attachmentString");
switch (attachmentType) {
case ERROR:
// toastShow("附件開啟錯誤,請重試");
// finish();
// overridePendingTransition(R.anim.activity_in_from_left,
// R.anim.activity_out_to_right);
dialogChoose(new String[]{"1","2","3"});
break;
case DOC:
// 可以用一個handle統一處理所有訊息,也可以分開
final Handler handler2 = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
mWebView.loadUrl(xml);
dialogDismiss();
}
}
};
mWebView.setVisibility(View.VISIBLE);
final byte[] buf = FunctionUtil.stringToByte(attachmentString);
dialogShow("正在載入中");
new Thread() {
public void run() {
try {
// 測試長的doc文件顯示
test();
// getRange(buf);
} catch (Exception e) {
e.printStackTrace();
toastShow("附件開啟錯誤,請重試");
finish();
overridePendingTransition(R.anim.activity_in_from_left,
R.anim.activity_out_to_right);
}
makeFile();
readAndWrite();
xml = "file://" + htmlPath;
Message msg = new Message();
msg.what = 1;
handler2.sendMessage(msg);
}
}.start();
break;
case DOCX:
break;
case IMAGE:
imageView.setVisibility(View.VISIBLE);
mHandler = new Handler() {
public void handleMessage(Message msg) {
imageView.setImageBitmap(bitmap);
}
};
new Thread(runnable).start();
break;
case TXT:
scrollView.setVisibility(View.VISIBLE);
textView.setVisibility(View.VISIBLE);
String fileName = android.os.Environment
.getExternalStorageDirectory() + "/DCIM/README.txt";
try {
FileInputStream fin = new FileInputStream(fileName);
String string = ConversionUtil.stream2String(fin);
textView.setText(string);
} catch (Exception e) {
}
break;
}
}
public void onClick(View arg0) {
}
protected void initViews() {
scrollView = (ScrollView) findViewById(R.id.scrollView1);
textView = (TextView) findViewById(R.id.textView1);
imageView = (ImageView) findViewById(R.id.testpic);
mWebView = (WebView) findViewById(R.id.webView1);
mWebView.getSettings().setJavaScriptEnabled(true);
// 將圖片調整到適合webview的大小
mWebView.getSettings().setUseWideViewPort(false);
// 支援縮放
mWebView.getSettings().setSupportZoom(true);
// 設定支援各種不同的裝置
mWebView.getSettings()
.setUserAgentString(
"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X;en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334bSafari/531.21.10");
}
protected void initEvents() {
mWebView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
});
mWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mWebView.loadUrl(url);
return true;
}
public void onReceivedSslError(WebView view,
SslErrorHandler handler, android.net.http.SslError error) {
handler.proceed();
}
});
}
protected void onDestroy() {
super.onDestroy();
FileUtil.deleteDir(android.os.Environment.getExternalStorageDirectory()
+ "/tempDoc");
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
} else {
FileUtil.deleteDir(android.os.Environment
.getExternalStorageDirectory() + "/tempDoc");
finish();
overridePendingTransition(R.anim.activity_in_from_left,
R.anim.activity_out_to_right);
}
return true;
}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
public void makeFile() {
String sdStateString = android.os.Environment.getExternalStorageState();
if (sdStateString.equals(android.os.Environment.MEDIA_MOUNTED)) {
try {
File sdFile = android.os.Environment
.getExternalStorageDirectory();
String path = sdFile.getAbsolutePath() + File.separator
+ "tempDoc";
File dirFile = new File(path);
if (!dirFile.exists()) {
dirFile.mkdir();
}
File myFile = new File(path + File.separator + "my.html");
if (!myFile.exists()) {
myFile.createNewFile();
}
htmlPath = myFile.getAbsolutePath();
} catch (Exception e) {
}
}
}
public void makePictureFile() {
String sdString = android.os.Environment.getExternalStorageState();
if (sdString.equals(android.os.Environment.MEDIA_MOUNTED)) {
try {
File picFile = android.os.Environment
.getExternalStorageDirectory();
String picPath = picFile.getAbsolutePath() + File.separator
+ "tempDoc";
File picDirFile = new File(picPath);
if (!picDirFile.exists()) {
picDirFile.mkdir();
}
File pictureFile = new File(picPath + File.separator
+ presentPicture + ".jpg");
if (!pictureFile.exists()) {
pictureFile.createNewFile();
}
picturePath = pictureFile.getAbsolutePath();
} catch (Exception e) {
System.out.println("PictureFile Catch Exception");
}
}
}
// 讀取word中的內容寫到sdcard上的.html檔案中
public void readAndWrite() {
try {
myFile = new File(htmlPath);
output = new FileOutputStream(myFile);
String head = "<html><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> <body>";
String tagBegin = "<p>";
String tagEnd = "</p>";
output.write(head.getBytes());
int numParagraphs = range.numParagraphs();
for (int i = 0; i < numParagraphs; i++) {
Paragraph p = range.getParagraph(i);
if (p.isInTable()) {
int temp = i;
if (tableIterator.hasNext()) {
String tableBegin = "<table style=\"border-collapse:collapse\" border=1 bordercolor=\"black\">";
String tableEnd = "</table>";
String rowBegin = "<tr>";
String rowEnd = "</tr>";
String colBegin = "<td>";
String colEnd = "</td>";
Table table = tableIterator.next();
output.write(tableBegin.getBytes());
int rows = table.numRows();
for (int r = 0; r < rows; r++) {
output.write(rowBegin.getBytes());
TableRow row = table.getRow(r);
int cols = row.numCells();
int rowNumParagraphs = row.numParagraphs();
int colsNumParagraphs = 0;
for (int c = 0; c < cols; c++) {
output.write(colBegin.getBytes());
TableCell cell = row.getCell(c);
int max = temp + cell.numParagraphs();
colsNumParagraphs = colsNumParagraphs
+ cell.numParagraphs();
for (int cp = temp; cp < max; cp++) {
Paragraph p1 = range.getParagraph(cp);
output.write(tagBegin.getBytes());
writeParagraphContent(p1);
output.write(tagEnd.getBytes());
temp++;
}
output.write(colEnd.getBytes());
}
int max1 = temp + rowNumParagraphs;
for (int m = temp + colsNumParagraphs; m < max1; m++) {
range.getParagraph(m);
temp++;
}
output.write(rowEnd.getBytes());
}
output.write(tableEnd.getBytes());
}
i = temp;
} else {
output.write(tagBegin.getBytes());
writeParagraphContent(p);
output.write(tagEnd.getBytes());
}
}
String end = "</body></html>";
output.write(end.getBytes());
output.close();
} catch (Exception e) {
System.out.println("readAndWrite Exception");
}
}
// 以段落的形式來往html檔案中寫內容
public void writeParagraphContent(Paragraph paragraph) {
Paragraph p = paragraph;
int pnumCharacterRuns = p.numCharacterRuns();
for (int j = 0; j < pnumCharacterRuns; j++) {
CharacterRun run = p.getCharacterRun(j);
if (run.getPicOffset() == 0 || run.getPicOffset() >= 1000) {
if (presentPicture < pictures.size()) {
writePicture();
}
} else {
try {
// StringBuffer text = new StringBuffer();
String text = run.text();
// boolean b = run.text().startsWith(" ");
// if (b) {
// text.append(" ");
// }
// text.append(run.text());
//
//
// output.write(text.toString().getBytes());
if (text.length() >= 2 && pnumCharacterRuns < 2) {
output.write(text.getBytes());
} else {
int size = run.getFontSize();
int color = run.getColor();
String fontSizeBegin = "<font size=\""
+ decideSize(size) + "\">";
String fontColorBegin = "<font color=\""
+ decideColor(color) + "\">";
String fontEnd = "</font>";
String boldBegin = "<b>";
String boldEnd = "</b>";
String islaBegin = "<i>";
String islaEnd = "</i>";
output.write(fontSizeBegin.getBytes());
output.write(fontColorBegin.getBytes());
if (run.isBold()) {
output.write(boldBegin.getBytes());
}
if (run.isItalic()) {
output.write(islaBegin.getBytes());
}
output.write(text.getBytes());
if (run.isBold()) {
output.write(boldEnd.getBytes());
}
if (run.isItalic()) {
output.write(islaEnd.getBytes());
}
output.write(fontEnd.getBytes());
output.write(fontEnd.getBytes());
}
} catch (Exception e) {
System.out.println("Write File Exception");
}
}
}
}
// 將word中的圖片寫入到.jpg檔案中
public void writePicture() {
Picture picture = (Picture) pictures.get(presentPicture);
byte[] pictureBytes = picture.getContent();
Bitmap bitmap = BitmapFactory.decodeByteArray(pictureBytes, 0,
pictureBytes.length);
makePictureFile();
presentPicture++;
File myPicture = new File(picturePath);
try {
FileOutputStream outputPicture = new FileOutputStream(myPicture);
outputPicture.write(pictureBytes);
outputPicture.close();
} catch (Exception e) {
System.out.println("outputPicture Exception");
}
String imageString = "<img src=\"" + picturePath + "\"";
if (bitmap.getWidth() > screenWidth) {
imageString = imageString + " " + "width=\"" + screenWidth + "\"";
}
imageString = imageString + ">";
try {
output.write(imageString.getBytes());
} catch (Exception e) {
System.out.println("output Exception");
}
}
// 處理word和html字型的轉換
public int decideSize(int size) {
if (size >= 1 && size <= 8) {
return 1;
}
if (size >= 9 && size <= 11) {
return 2;
}
if (size >= 12 && size <= 14) {
return 3;
}
if (size >= 15 && size <= 19) {
return 4;
}
if (size >= 20 && size <= 29) {
return 5;
}
if (size >= 30 && size <= 39) {
return 6;
}
if (size >= 40) {
return 7;
}
return 3;
}
// 處理word和html顏色的轉換
private String decideColor(int a) {
int color = a;
switch (color) {
case 1:
return "#000000";
case 2:
return "#0000FF";
case 3:
case 4:
return "#00FF00";
case 5:
case