2

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

谁能帮我解决这个问题?它在调试模式下完美运行。

SomeActivity.java:无法使用此代码进行渲染。资产文件被下载并保存到资产文件夹中,该文件夹再次在 App View 中呈现,但不在 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);
 }
4

0 回答 0