web-dev-qa-db-ja.com

MuPDF Readerをアプリに統合する

私はアプリで[〜#〜] pdf [〜#〜]を読むことができるものに取り組んでおり、PDF view in my カスタムレイアウト。好みでしたAndroid PDF Viewer実行したときzoomInzoomOut時間がかかりすぎる時間

したがって、現在はMuPDFオープンソースプロジェクトをプロジェクトに統合するために使用することになっています。これは[〜#〜] jni [〜#〜]に基づいており、使用されていませんそれに。

Cygwinを使用して、ネイティブコードのライブラリをビルドしています。したがって、私はいくつかのことで不明です:

  1. プロジェクトにMuPDFを統合する方法(質問のタイトルごと)

  2. 統合に成功したら、どうすればPDFリーダーをカスタムビュー(XMLまたはプログラムで)に配置できますか?

45
dharam

開発にUbuntuを使用しているため、cygwinを使用してWindowsでこれを行う方法がわかりません。しかし、手順は同じであるべきだと思います。

  1. ここでファイルmupdf-0.9-source.tar.gzをダウンロードします: http://code.google.com/p/mupdf/downloads/list?q=source
  2. Mupdf-thirdparty.Zipファイルをダウンロードします
  3. ソースを抽出します。デフォルトでは、それらはmupdf-0.9 /フォルダーに抽出されます。
  4. Mupdf-thirdparty.Zipファイルをmupdf-0.9 /フォルダーに抽出します。
  5. プロジェクトmupdf-0.9をビルドします(Windowsの場合は、readmeファイルで宣言されているVSを使用する必要があります)
  6. 次に、フォルダmupdf-0.9/Android /に移動します
  7. Ndk-buildを実行します
  8. 次のエラーが発生する可能性があります。

Compile thumb : mupdfthirdparty <= jbig2.c In file included from /home/yury/programming/Android/workspace/mupdf-0.9/Android/jni/../../thirdparty/jbig2dec/os_types.h:53, from /home/yury/programming/Android/workspace/mupdf-0.9/Android/jni/../../thirdparty/jbig2dec/jbig2.c:22: /home/yury/software/Android-ndk-r6b/platforms/Android-8/Arch-arm/usr/include/stdint.h:48: error: redefinition of typedef 'int8_t' /home/yury/programming/Android/workspace/mupdf-0.9/Android/jni/../../thirdparty/jbig2dec/os_types.h:47: note: previous declaration of 'int8_t' was here

ここで解決策を説明します: mupdf for Android:ndk-build problem(error:redefinition of typedef ....) ただし、単にコメントすることができますファイル/thirdparty/jbig2dec/os_types.h内のタイプの定義の行

その後、2つのライブラリを受け取ります。1つは静的で、もう1つはAndroidアプリケーション用に共有されます。

StaticLibrary  : libmupdfthirdparty.a
SharedLibrary  : libmupdf.so

これが最初の質問の答えでした。また、Android/Readme.txtファイルには優れたステップバイステップガイドがあります。

次に、2番目の質問の答えです。 Androidのアプリケーションでは、テストプロジェクトを見つけることができます。3つのファイルがあります。

  • MuPDFActivity.Java
  • MuPDFCore.Java
  • PixmapView.Java

プロジェクトの最後の2つのファイルをコピーするだけです。 MuPDFActivity.Javaの例で、アクティビティにmupdfレイアウトを埋め込む方法を参照してください。このファイルでは、次のように行われます。

    PixmapView pixmapView;
//...   
layout = new RelativeLayout(this);
//...
    RelativeLayout.LayoutParams pixmapParams =
                      new RelativeLayout.LayoutParams(
                                RelativeLayout.LayoutParams.FILL_PARENT,
                                RelativeLayout.LayoutParams.FILL_PARENT);
    pixmapParams.addRule(RelativeLayout.ABOVE,100);
    layout.addView(pixmapView, pixmapParams);

    setContentView(layout);
47
Yury
15
Rizvan

これは私が私のMacで達成する方法です(2012、Intel i5):

ステップ1:取得 mupdf-1.2-source.Zip

ステップ2:取得 Android-ndk-mac-64

ステップ3:新しいフォルダーで両方を解凍し、Android-pdfを呼び出して、unzipフォルダーの名前をmupdfおよびAndroid-ndkに変更します(好きな名前で呼び出すことができます)

ステップ4:ターミナルを開き、Android-pdfフォルダーに入るまでcdコマンドを使用します

ステップ5:cd mupdf thanコマンド:make(すべてのスクリプトを実行するには約40秒かかります)

ステップ6:cd Androidmupdf dir内)

ステップ7:Finderを開き、フォルダーAndroid-pdfに移動し、Android-ndkよりもファイルを呼び出しndk-buildをターミナルコマンドラインにドラッグして入力します(基本的にmudk libで動作するためにndk-buildにパスを追加します) )

そして数秒後にmupdf > Android > libs > ...内に新しいフォルダが必要です。Android=プロジェクトでそれを使用します。

既存のEclipseプロジェクトでMuPDFを使用する方法:

  1. 「jni」フォルダーを/ Androidフォルダーから既存のEclipseプロジェクトにコピーします。
  2. / thirdpartyフォルダーをプロジェクトの「jni」フォルダーにコピーします。
  3. / cbzフォルダーをプロジェクトの「jni」フォルダーにコピーします。
  4. / drawフォルダーをプロジェクトの「jni」フォルダーにコピーします。
  5. / fitzフォルダーをプロジェクトの「jni」フォルダーにコピーします。
  6. / generatedフォルダーをプロジェクトの「jni」フォルダーにコピーします。
  7. / pdfフォルダーをプロジェクトの「jni」フォルダーにコピーします。
  8. / scriptsフォルダーをプロジェクトの「jni」フォルダーにコピーします。
  9. / xpsフォルダーをプロジェクトの「jni」フォルダーにコピーします。
  10. 「jni」フォルダー内の「Android.mk」を開きます。
  11. 変化する

    MUPDF_ROOT:= ..

MUPDF_ROOT := $(TOP_LOCAL_PATH)
  1. 「Android.mk」を保存します。
  2. 「jni」フォルダー内の「Core.mk」を開きます。
  3. 変化する

    MY_ROOT:= ../ ..

MY_ROOT := $(LOCAL_PATH)
  1. すべてを変更する

    ..

in LOCAL_C_INCLUDESto

$(LOCAL_PATH)
  1. 「Core.mk」を保存します。
  2. 「jni」フォルダー内の「ThirdParty.mk」を開きます。
  3. 変化する

    MY_ROOT:= ../ ..

MY_ROOT := $(LOCAL_PATH)
  1. 変更all

    ..

inLOCAL_C_INCLUDESへ

$(LOCAL_PATH)
  1. 「ThirdParty.mk」を保存します。
  2. ここで、プロジェクトの「jni」ディレクトリで「ndk-build」を実行します。
  3. / Android/srcフォルダー内のすべてをプロジェクトの「src」フォルダーにコピーします。
  4. / Android/res/drawableフォルダー内のすべてをプロジェクトの「res/drawable」フォルダーにコピーします。
  5. / Android/res/drawable-ldpiフォルダー内のすべてをプロジェクトの「res/drawable-ldpi」フォルダーにコピーします。
  6. / Android/res/drawable-mdpiフォルダー内のすべてをプロジェクトの「res/drawable-mdpi」フォルダーにコピーします。
  7. Main.xmlを除く/ Android/res/layoutフォルダー内のすべてをコピーします(既存のプロジェクトにコピーする場合は、既に独自のmain.xmlまたは同等のファイルが必要です)をプロジェクトの「res/layout」フォルダーにコピーします。
  8. / Android/res/valuesフォルダー内のすべてをプロジェクトの「res/values」フォルダーにコピーします。既存のプロジェクトに「strings.xml」が既にある場合は、/ Android/res/values/strings.xmlの ''タグの間にあるすべてのものをプロジェクトのstring.xmlにコピーします( ''タグの間に貼り付けます)。同様に、「colors.xml」の場合、既存のプロジェクトに「colors.xml」が既にある場合は、/ Android/res/values/strings.xmlの ''タグの間にあるすべてのものをプロジェクトのstrings.xmlにコピーします( ''タグの間に貼り付けます)。
  9. プロジェクトで「AndroidManifest.xml」を開きます。
  10. ''タグの間に、アクティビティのすべてのリストを貼り付けます

    AndroidManifest.xml/Androidフォルダー内mupdf内のAndroidManifest.xmlの作業コピーからコピーする必要があります。

  11. 既存のEclipseプロジェクトにMuPDFが追加されました。それを使用するには、アプリケーションでcom.artifex.mupdf.ChoosePDFActivity.classを呼び出します。これは、MuPDFのメインクラスです。

  12. プレフィックスファイルでPDFを開くには:

    Uri uri = Uri.parse( "pdfファイルへのパス");

    Intent intent = new Intent(context、MuPDFActivity.class);

    intent.setAction(Intent.ACTION_VIEW);

    intent.setData(uri);

    context.startActivity(intent);

このヘルプを願っています:)

7
star18bit

このプロジェクトを確認してください eBookDroid

EBookDroidは、VuDroidコードベースに基づくAndroidのオープンソース(GPL化)ドキュメントビューアーです。

次の形式のファイルをサポートしました。

PDF
DjVu
XPS (OpenXPS)
comics books (cbz,cbr)
5
ingsaurabh

私のアプリケーションに表示ページャーがあります。ビューpager.isで各フラグメントのpdfファイルを表示する必要があります。mupdfからpdfビューを取得する方法はありますか?通常、以下のようにmupdfを呼び出します

Uri uri = Uri.parse("path to pdf file");

Intent intent = new Intent(context, MuPDFActivity.class);

intent.setAction(Intent.ACTION_VIEW);

intent.setData(uri);

context.startActivity(intent);

私のアプリにmupdfを使用する場合、各フラグメントでMuPDFActivityを呼び出す必要があります。正しい方法ではないと思いますか?

0
asliyanage

star18bitによって与えられた答えはほとんどそれを要約していますが、私が多くの問題に直面したことをフォローしさえしました。

makeコマンドは私にとってはうまくいかず、Visual Studioを使用してビルドする必要がありました。したがって、すべての前提条件ソフトウェアをリストしました。 ANTのように。また、PATHにSDKフォルダーのtoolsおよびplatform-toolsフォルダーを追加する必要があります。

また、Core2.mkファイルの変更を行う必要がありました。これはCore.mkの変更と同じです。ここですべての情報を提供することはできませんが、それはたくさんあるため、完全な情報についてはこのリンクを参照します。

http://howtojava.net/tutorials/Android/integrate-mupdf-with-Android-in-windows-7

0
nullpointer