我创建了一个动态功能模块(由资产、字体和文件组成),当用户点击 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);
}