我的应用程序代码如下。
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()捕获。 我该怎么做才能防止应用程序崩溃?
你想做的事
使用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)
}