使用动态功能模块:下载并安装在Asset文件夹中的字体,但不是在PDF-VIEW中呈现,而在APP-UI-VIEW中呈现?

问题描述

我创建了一个动态功能模块(由资产,字体和文件组成),当用户点击onChooseFontClicked()时将下载并安装该模块。正在下载并安装动态模块,但字体未在PDF中呈现。这些字体可用于在应用程序视图内设置文本的字体,但它们不会在PDF中呈现。为什么?

有人可以帮助我解决这个问题吗? 它在DEBUG模式下运行正常。

SomeActivity.java:无法使用此代码进行渲染。 资产文件已下载并保存到资产文件夹,该文件夹再次在“应用程序视图”中呈现,但不在PDF视图(iTextPDF)中呈现。

String downloadedAssetsName = "assets/fonts/fontName.ttf";
BaseFont bFont = BaseFont.createFont(downloadedAssetsName,"UTF-8",BaseFont.EMbedDED);
Font urFontName = new Font(bFont,12);
Paragraph createdAtparagraph = new Paragraph("Some Data",urFontName);

在发布模式下,使用上述几行PDF会使用新下载字体的认字体显示出来。但是在借记模式下,此代码可以正常工作。

**

@Override
public void onChooseFontClicked(View v) {
    String fontModule = "module_font";
    if (splitInstallManager.getInstalledModules().contains(fontModule)) {

        AppUtils.showToast(this,"Already Installed module.");
        showFontStyleFragment();

    } else {
        requestInstall(fontModule);
    }

}

private void requestInstall(String moduleName) {

    Splitinstallrequest request = Splitinstallrequest.newBuilder()
            .addModule(moduleName)
            .build();
    splitInstallManager.startInstall(request);

}

/**
 * Perform actions on callbacks of state updates for the install session.
 */
private SplitInstallStateUpdatedListener stateListener =
        splitInstallSessionState -> {
            if (splitInstallSessionState.status() == SplitInstallSessionStatus.Failed &&
                    splitInstallSessionState.sessionId() < 0) {
                AppUtils.showLog(TAG,"Service process died");
                return;
            }
            if (splitInstallSessionState.status() == SplitInstallSessionStatus.DOWNLOADING) {
                long size = splitInstallSessionState.totalBytesTodownload();
                long downloaded = splitInstallSessionState.bytesDownloaded();
                int percentage = (int) ((downloaded * 100) / size);

//                    double completedPercent = Double.parseDouble(downloaded + "") * 100 / Double.parseDouble(size + "");
                AppUtils.showToast(PDFPreviewActivity.this,percentage + "% Completed. Total MB: " + size / 1000000 + " Downloaded: " + downloaded / 1000000 + "MB");
                AppUtils.showLog(TAG,"SplitInstallSessionStatus.DOWNLOADING: " + downloaded);

                // Update progress bar.
            } else if (splitInstallSessionState.status() == SplitInstallSessionStatus.CANCELED) {
                AppUtils.showLog(TAG,"Installation cancelled");
            } else if (splitInstallSessionState.status() == SplitInstallSessionStatus.Failed) {
                Log.e(TAG,"Install Failed");
            } else if (splitInstallSessionState.status() == SplitInstallSessionStatus.INSTALLED) {
                AppUtils.showLog(TAG,"Split successfully installed,launching GreetActivity");
                //Module is downloaded successfully
                AppUtils.showToast(PDFPreviewActivity.this,"SplitInstallSessionStatus.INSTALLED: ");
                SplitInstallHelper.updateAppInfo(PDFPreviewActivity.this);

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    // Update app context with the code and resources of the installed module.
                    SplitInstallHelper.updateAppInfo(PDFPreviewActivity.this);
                }
                SplitCompat.installActivity(this);
                showFontStyleFragment();
            }

        };

@Override
protected void onResume() {
    super.onResume();
    splitInstallManager.registerListener(stateListener);
}

@Override
protected void onPause() {
    super.onPause();
    splitInstallManager.unregisterListener(stateListener);
}

@Override
 protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(newBase);
    SplitCompat.install(this);
 }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)