iText7 PDF需要花费一些时间来生成

时间:2018-12-11 10:09:37

标签: android pdf itext pdf-generation itext7

我正在尝试使用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页,上面有图像。

请帮助解决该问题。

1 个答案:

答案 0 :(得分:0)

您确定在背景工作者结束工作后可以保存pdf吗? 您听说过多线程概念中的监视器/关键部分吗?

您应该等待保存PDF,直到所有后台工作人员都将停止使用PDF。 另请注意,每个后台工作程序(线程)都可以创建PDF,而不是编辑现有的后台工作线程,因此您总是会错过某些内容,因为PDF可能会被一个后台工作程序覆盖,这可能导致丢失另一个后台工作程序生成的数据(线程)。