Android應用開發之PDF轉圖片功能實現
阿新 • • 發佈:2018-12-26
一、概述
轉眼畢業小兩年了,回想這兩年寫的程式碼,不由得想起了上學那會兒某位網際網路大牛說,搞IT這行如果你沒有寫夠十萬行程式碼,那你就還沒有入門,俺這個時候真的有點汗顏啊,此處省略十萬字。小編最近開始整理這兩年寫的程式碼,不由得首先想起了今天要寫的這個功能—PDF
轉圖片,它的使用很簡單,但是原理好像有點複雜,複雜的東西這裡就不介紹了(有價值東西當然得自個兒研究了,幹啥事別做申手黨),這個功能是採用C/C++
語言編寫的mupdf
開源框架實現的。
二、內容
1.開發環境
- 作業系統:
Ubuntu18.04
IDE
:Android-Studio3.2
- 執行環境:
android
智慧手機 SDK
android SDK
NDK
:android-ndk-r16b
2.生成mupdf
動態庫與呼叫
- 在
build.gradle
檔案中加入如下程式碼
externalNativeBuild {
ndkBuild {
path 'src/main/cpp/Android.mk'
}
}
JNI
的java
介面程式碼
private native long openFile(String filename); //讀取PDF檔案
private native String fileFormatInternal();
private native boolean isUnencryptedPDFInternal();
private native int countPagesInternal();//
private native void gotoPageInternal(int localActionPageNum);
private native float getPageWidth();//PDF某頁圖片寬度
private native float getPageHeight();//PDF某頁圖片高度
private native void drawPage(Bitmap bitmap,//轉圖片
int pageW, int pageH,
int patchX, int patchY,
int patchW, int patchH,
long cookiePtr);
private native void destroying();
private native long createCookie();
private native void destroyCookie(long cookie);
private native void abortCookie(long cookie);
android
程式碼的呼叫
public void setPage(int page, PointF size) {
//獲取頁面大小
pdfSize = correctBugMuPdf(size);
setParentSize(new Point((int)size.x, (int)size.y));
if (mEntireBm == null ) {
try {
mEntireBm = Bitmap.createBitmap(mParentSize.x,
mParentSize.y,Bitmap.Config.ARGB_8888);
} catch (OutOfMemoryError e) {
e.printStackTrace();
}
}
mSourceScale = Math.min(mParentSize.x / size.x,
mParentSize.y / size.y);
Point newSize = new Point((int) (size.x * mSourceScale),
(int) (size.y * mSourceScale));
mSize = newSize;
MuPDFCore.Cookie cookie = core.new Cookie();
//圖片生成
try{
core.drawPage(mEntireBm, page,mSize.x, mSize.y,
0, 0, mSize.x, mSize.y, cookie);
}catch(Exception e){
}
//儲存圖片以及銳化圖片
saveBitmapFile(sharpenImageAmeliorate(mEntireBm));
//釋放資源
releaseBitmaps();
}
執行結果
三、後記
本文介紹的PDF轉圖片功能只是mupdf開源框架的一個功能,還有一些其他功能沒有挖掘,另外就是因為這個框架還包括其他平臺的內容所以有一些冗餘的程式碼沒有清除。