使用 Android Pdf Viewer 渲染 PDF 时 Android 应用程序崩溃

问题描述 投票:0回答:1

我的应用程序代码如下。

pdfView.fromFile(File(pdfPath))
.pages(0)
.enableSwipe(false)
.swipeHorizontal(false)
.enableDoubletap(false)
.defaultPage(0)
.enableAnnotationRendering(true)
.password(null)
.scrollHandle(null)
.enableAntialiasing(false)
.onError(OnErrorListener {
    // error handling
})
.load()

注释似乎存在一些问题,因为在enableAnnotationRendering(false)时它不会崩溃。 另外,有些 PDF 会崩溃,有些则不会。 在 Windows 或 Android 上编辑的 PDF 不会崩溃,但在 Mac 或 iPhone 上编辑的 PDF 会崩溃。 我怀疑是由于缺少字体导致渲染失败,但是如果没有字体,应用程序是否有可能崩溃?

而且,即使渲染失败,也无法用onError()捕获。 我该怎么做才能防止应用程序崩溃?

你想做的事

  1. 使用 onError() 或其他方法捕获渲染失败,以避免应用程序崩溃。
  2. 1完成了,如果字体不存在我想改成设备默认字体
android fonts crash annotations androidpdfviewer
1个回答
0
投票

使用PDFBox(TomRoush),使用以下两种方法不再出现崩溃情况。

第一种方法是将AcroForm的needAppearance设置为false。
修改后的代码如下。

val document = PDDocument.load(File(pdfPath))
val form = document.documentCatalog.acroForm
if(form != null) {
   form.needAppearances = false
}
document.save(pdfPath)
document.close()

第二种方法是获取PDAnnotation,并为字体(COSName.DA)指定不同的字体。
修改后的代码如下。

PDDocument.load(File(pdfPath)).use { document ->
  val annotations = arrayListOf<PDAnnotation>()
  val page = document.pages[0]
    for (annotation in page.annotations) {
      if (annotation.subtype == PDAnnotationWidget.SUB_TYPE) {
        var cosObject = annotation.cosObject
        cosObject.setString(COSName.DA, PDType1Font.HELVETICA.baseFont)
        annotations.add(annotation)
      }
    }
  page.annotations = annotations
  document.save(pdfPath)
}
© www.soinside.com 2019 - 2024. All rights reserved.