我正在嘗試使用MuPDF作爲針對Android和iOS的AIR渲染引擎。使用MuPDF渲染引擎編寫AIR本機擴展
爲了達到這個目的,我試着做一個AIRNativeExtension(.ane)。
用於.ane的用例是這樣的:
打開單個頁面的.pdf
渲染的PDF爲位圖的(可能是縮放)部分,並將其傳遞迴空氣。
我不需要與UI完整的PDF閱讀器應用程序和所有花哨多餘的東西像大綱和說明等
所以AR,我成功地簽出,並內置MuPDF Android和編碼所有'膠水'與ActionScript進行交流。 但是,在我的項目中整合MuPDF給我很難。我試圖按照這個線程here,但它有點過時了,很多在那裏描述的類/路徑在最近幾個月顯然發生了變化,很難找到任何有關庫的java端實現的指導
所以我最終導出了一個28兆的大文件,這對我來說有點大,可以使用。所以我必須把它降到最低限度。
現在的問題:
該方法在執行上面扔下我一個例外:
異常Ljava /朗/ UnsatisfiedLinkError;在初始化時拋出 Lcom/artifex/mupdfdemo/MuPDFCore;
我該如何解決這個問題?或者這是一個糟糕的主意嗎?
是否有可能去除MuPDF,所以我只能導入我需要的部分?
是否可以用這種方法渲染pdf的空氣?有沒有人試過這個?
非常感謝!
P.S.我在這裏粘貼的只是我的代碼的一小部分,因爲其他的東西只是基本的.ane設置,沒有具體的在這裏完成。另外,我剝離了一切不需要的東西來重現錯誤,所以代碼實際上什麼都不做。只要它能夠工作,我當然會將這個項目作爲開源分享。
package com.skill.ane.pdfrenderer;
import android.util.Log;
import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREObject;
import com.artifex.mupdfdemo.MuPDFCore;
public class OpenFileFunction implements FREFunction {
public static final String TAG = "OpenFileFunction";
@Override
public FREObject call(FREContext context, FREObject[] args)
{
try
{
String path = args[0].getAsString();
try
{
MuPDFCore core = new MuPDFCore(context.getActivity().getBaseContext() , path);
// do all the magic stuff in here.
}
catch (Exception e)
{
Log.e(TAG, Log.getStackTraceString(e));
return null;
}
}
catch(Exception e)
{
Log.e(TAG, Log.getStackTraceString(e));
}
return null;
}
}
感謝您的回答。所以你建議做一個自己的JNI包裝?實際上,包中的接口對於我的用例來說過於複雜,而不是相反;-)另外,我想對libmupdf.so減輕一些壓力,因爲它大約只有8個兆字節,不知道從哪裏開始。任何提示非常受歡迎 –
其中6個megs是PDF呈現所需的數據資源 - 備用字體和編碼表。您可以使用系統字體來修剪此大小(使用提供的掛載來加載系統字體,並且編譯時不使用默認的內置字體)。 – ccxvii