iText7 PDF требует времени для создания - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь создать PDF в Android с помощью iText.PDF был успешно создан, но для его создания требуется время, так как добавлены изображения.Затем я перемещаю свой код генерации PDF из потока пользовательского интерфейса в фоновый поток.После этого возникает проблема в создании 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 голосов
/ 13 декабря 2018

Вы уверены, что сохранили свой pdf после того, как фоновый работник закончил свою работу?Вы слышали о мониторах / критических разделах в концепции многопоточности?

Вы должны подождать с сохранением PDF, пока все фоновые рабочие не перестанут работать в PDF.Также обратите внимание, что каждый фоновый работник (поток) может создавать PDF, а не РЕДАКТИРОВАТЬ существующий, поэтому вы всегда будете пропускать что-то, потому что PDF может быть перезаписан одним фоновым работником, что может привести к потере данных, сгенерированных другими фоновыми работниками.(потоки).

...