我正在尝试使用iText在android中生成PDF。 PDF已成功生成,但是由于添加了图像,因此生成PDF需要花费时间。然后,我将PDF生成的代码从UI线程移到后台线程。此后,PDF生成出现问题。在后台生成PDF时,有时某些页面无法加载或出现图像问题。
源代码
val document = Document(PageSize.A4, 20f, 20f, 100f, 60f)
val pdfWriter = PdfWriter.getInstance(document,FileOutputStream(outputPdfPath))
val event = HeaderFooterPageEvent();
pdfWriter.pageEvent = event;
document.isMarginMirroring = false;
document.open()
val reportBody = Paragraph()
reportBody.font = Font(
Font.FontFamily.TIMES_ROMAN,
16f,
Font.NORMAL
)
reportBody.alignment = Element.ALIGN_CENTER
document.add(getTitle("Prior Damage Check In"))
document.add(createTables(reportBody, checkIn)) //for table creation
document.add(
addImage(
"image url",
PageSize.A4.getWidth() - document.leftMargin() -
document.rightMargin(),
PageSize.A4.getHeight() - document.topMargin() - document.bottomMargin() - 200,
Element.ALIGN_CENTER
)
)
添加图片方法:
private fun addImage(imagePath: String, width: Float, height: Float, alignment: Int): Image? {
val image = Image.getInstance(imagePath)
image.setAlignment(alignment)
//image1.setWidthPercentage(50f);
image.scaleToFit(width, height)
return image
}
共有6页,上面有图像。
请帮助解决该问题。
答案 0 :(得分:0)
您确定在背景工作者结束工作后可以保存pdf吗? 您听说过多线程概念中的监视器/关键部分吗?
您应该等待保存PDF,直到所有后台工作人员都将停止使用PDF。 另请注意,每个后台工作程序(线程)都可以创建PDF,而不是编辑现有的后台工作线程,因此您总是会错过某些内容,因为PDF可能会被一个后台工作程序覆盖,这可能导致丢失另一个后台工作程序生成的数据(线程)。