簡體   English   中英

在應用程序中集成MuPDF Reader

[英]Integrate MuPDF Reader in an app

我正在研究一些應該能夠在我的應用程序中閱讀PDF的東西,並且我希望將PDF視圖放在我的自定義布局中 我更喜歡Android PDF Viewer但是當我執行zoomIn時zoomOut需要花費太多時間

所以目前我應該使用MuPDF開源項目集成到我的項目中,它基於JNI ,我不習慣它。

我正在使用Cygwin為本機代碼構建庫。 因此,我不清楚幾件事情:

  1. 如何在我的項目中整合MuPDF (根據我的問題標題)?

  2. 一旦我成功整合它,那么如何將PDF閱讀器放入我的自定義視圖 (在XML或programmaticaly中)?

我不知道如何在Windows中使用cygwin這樣做,因為我正在使用Ubuntu進行開發。 但我認為程序應該是一樣的。

  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,你應該使用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(錯誤:重新定義typedef ....)但是,你可以簡單地在文件/thirdparty/jbig2dec/os_types.h中注釋類型定義的行。

之后,您將收到兩個庫:一個靜態和一個共享您的Android應用程序。

StaticLibrary  : libmupdfthirdparty.a
SharedLibrary  : libmupdf.so

這是第一個問題的答案。 android / Readme.txt文件中還有一個很好的分步指南。

現在回答第二個問題。 在Android應用程序中,您可以找到測試項目。 有3個文件:

  • MuPDFActivity.java
  • MuPDFCore.java
  • PixmapView.java

只需復制項目中的最后兩個文件即可。 請參閱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);

這是我在我的mac上實現的方式(2012,intel i5):

第1步:獲取mupdf-1.2-source.zip

第2步:獲取android-ndk-mac-64

第3步:在新文件夾中解壓縮兩個文件,調用Android-pdf並將unzip文件夾重命名為mupdfandroid-ndk (你可以隨意調用它們)

第4步:打開終端並使用命令: cd直到你在android-pdf文件夾中

第5步:cd mupdf不是命令: make (運行所有腳本需要大約40秒)

第6步:cd android (在mupdf目錄中。)

步驟7:打開查找器轉到你創建的文件夾Android-pdf ,而不是android-ndk將文件調用ndk-build拖到終端命令行並輸入(基本上添加一個路徑到ndk-build來操作mupdf lib。)

幾秒鍾后 你應該在mupdf > android > libs > ...有新文件夾mupdf > android > libs > ...在你的android項目中使用它。

如何在您的EXISTING 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. 改變所有

    ..

在LOCAL_C_INCLUDES

$(LOCAL_PATH)
  1. 保存'Core.mk'。
  2. 在'jni'文件夾中打開'ThirdParty.mk'。
  3. 更改

    MY_ROOT:= ../ ..

MY_ROOT := $(LOCAL_PATH)
  1. 改變所有

    ..

LOCAL_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. 復制/ android / res / layout文件夾中的所有內容EXCEPT main.xml(因為如果要復制到現有項目中,那么您應該已經擁有自己的main.xml或等效文件)到項目的“res / layout”文件夾中。
  8. 將/ android / res / values文件夾中的所有內容復制到項目的“res / values”文件夾中。 如果您現有項目中已有'strings.xml',請將/android/res/values/strings.xml中的''標記之間的所有內容復制到項目的strings.xml中(粘貼在''標記之間)。 與'colors.xml'類似,如果您現有項目中已經有'colors.xml',請將/android/res/values/strings.xml中''標簽之間的所有內容復制到項目的strings.xml中(粘貼在''標簽之間)。
  9. 打開項目中的“AndroidManifest.xml”。
  10. 在''標簽之間粘貼所有活動列表

    AndroidManifest.xml里面的/ android文件夾, 你應該從你的 mupdf里面的AndroidManifest.xml 的工作副本中復制

  11. MuPDF現在在您現有的Eclipse項目中。 要使用它,請在應用程序中調用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(意向);

希望這有幫助:)

檢查這個項目eBookDroid

EBookDroid是一個基於VuDroid代碼庫的Android開源(GPL)文檔查看器。

支持以下格式的文件:

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

我在我的應用程序中查看了尋呼機。 我需要在視圖pager中的每個片段上顯示pdf文件。有從mupdf獲取pdf視圖的mupdf嗎? 通常我們將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 。我認為它不正確嗎?

star18bit給出的star18bit幾乎總結了它,但即便如此,我也遇到了很多問題。

就像make命令對我不起作用而我必須使用Visual Studio構建它。 所以我列出了所有pre-req軟件。 像ANT一樣。 我們還需要在PATH中添加sdk文件夾的toolsplatform-tools文件夾。

此外,我不得不做的改變Core2.mk文件,方式相同的Core.mk 我不能在這里提供所有信息,因為它很多,所以我引用此鏈接獲取完整信息:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM