Androidアプリケーションでmupdfライブラリを使用してpdfファイルを表示しています。mupdfライブラリを使用してPDFの各ページのビットマップ画像を取得する方法を教えてもらえますか?前もって感謝します....
3 に答える
ビットマップを生成するための解決策を見つけました。
ThumbnailsActivity.mBitmapList=new ArrayList<Bitmap>();
for(int i=0;i<core.countPages();i++){
Bitmap bitmap=core.drawPage(i, 200, 200, 0, 0, 200, 200);
if(bitmap!=null){
ThumbnailsActivity.mBitmapList.add(bitmap);
}
}
これが他の人に役立つことを願っています.Thanks!
で関数を使用するとMUPDFcore.class
、呼び出されますdrawPage(int page, int PDF width,int PDF height, 0,0,int bitmap width,int bitmap height)
この関数はビットマップ イメージを返します。1 番目のパラメーターは、レンダリングされるページです。
2 番目と 3 番目のパラメーターは PDF のサイズです。
4 番目と 5 番目のパラメーターは、PDF でレンダリングされたイメージで埋められるビットマップ位置の始まりです (これらのパラメーターに関する正確なドキュメントがないため、これは仮定です)。
6 番目と 7 番目のパラメーターは、PDF でレンダリングされたイメージで埋められるビットマップ サイズです。
私は彼らから与えられたサンプルプロジェクト内ですでにそれを行っています。現在、別のプロジェクトで使用しようとしていますが、まだ問題があります。
ライブラリは更新されているようで、drawPage() を呼び出すと画像がレンダリングされませんが、updatePage() を指定すると正常に動作します
サンプル ソース コードから以下のスニペットを見つけます
//Activity onCreate()
int x = Utils.getScreenSize(this)[0];
int y = Utils.getScreenSize(this)[1];
final ImageView imageView = (ImageView) findViewById(R.id.holderimageview);
final Bitmap mSharedHqBm = Bitmap.createBitmap(x,y, Bitmap.Config.ARGB_8888);
new CancellableAsyncTask<Void, Void>(getDrawPageTask(mSharedHqBm, x,y, 0, 0, x, y)) {
@Override
public void onPreExecute() {
imageView.setImageBitmap(null);
imageView.invalidate();
// Show some imageholder/spinner/progress etc.
}
@Override
public void onPostExecute(Void result) {
imageView.setImageBitmap(mSharedHqBm);
imageView.invalidate();
}
}
// method in activity
protected CancellableTaskDefinition<Void, Void> getDrawPageTask(final Bitmap bm, final int sizeX, final int sizeY, final int patchX, final int patchY, final int patchWidth, final int patchHeight) { return new MuPDFCancellableTaskDefinition<Void, Void>(core) {
@Override
public Void doInBackground(MuPDFCore.Cookie cookie, Void ... params) {
// Workaround bug in Android Honeycomb 3.x, where the bitmap generation count
// is not incremented when drawing.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB && Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) bm.eraseColor(0);
core.updatePage(bm, somepagenumber, sizeX, sizeY, patchX, patchY, patchWidth, patchHeight, cookie);
return null;
}
};
}