Я создаю PDF с несколькими простыми таблицами. Каждая таблица содержит 1-2 ячейки: ячейка изображения и большинство таблиц также содержат текстовую ячейку.
Хорошо работает для всех 10 изображений, кроме одного: изображение не отображается.
Теперь я взял размеры ячеек таблицы этого изображения и построил небольшой пример (без изображений и текста, всего одна таблица с 2 ячейками) для отладки кода:
import com.itextpdf.kernel.colors.DeviceRgb
import com.itextpdf.kernel.geom.PageSize
import com.itextpdf.kernel.pdf.{PdfDocument, PdfWriter}
import com.itextpdf.layout.Document
import com.itextpdf.layout.borders.Border
import com.itextpdf.layout.element.{Cell, Table}
object PdfTablePdf extends App {
val pdfWriter: PdfWriter = new PdfWriter("/tmp/table.pdf")
val pdfDocument: PdfDocument = new PdfDocument(pdfWriter)
val document = new Document(pdfDocument, new PageSize(2000, 3000))
val table = new Table(1)
val cellA = new Cell()
.setMargin(0)
.setPadding(0)
.setBorder(Border.NO_BORDER)
cellA.setBackgroundColor(new DeviceRgb(0, 255, 0))
cellA.setWidth(1331.1774900609144f)
cellA.setHeight(49.71372725227489f)
// replace that value by 49f or 50f and the pdf will be rendered as expected
table.addCell(cellA)
val cellB = new Cell()
.setMargin(0)
.setPadding(0)
.setBorder(Border.NO_BORDER)
cellB.setBackgroundColor(new DeviceRgb(0, 0, 255))
cellB.setWidth(1331.1774900609144f)
cellB.setHeight(994.2745450454978f)
table.addCell(cellB)
document.add(table)
document.close()
}
И хотя это выглядит безобидно, оно все же демонстрирует некоторое странное поведение: если я установлю высоту первой ячейки равной вычисленному значению 49.71372725227489f, вторая ячейка не будет отображена на первой странице.
Если я установлю высоту первой ячейки на 49 или 50, выходной сигнал будет таким, как ожидалось (вторая ячейка находится непосредственно под первой ячейкой).
Я не поверил своим глазам, но они действительно вели себя так. И я убедился, что это не ошибка в определенной программе просмотра PDF.
Как объяснить это поведение и как убедиться в правильности отображения таблицы?
Зависимости в build.sbt
:
name := "pdftablepdf"
version := "0.1"
scalaVersion := "2.12.4"
libraryDependencies ++= Seq(
"org.scala-lang" % "scala-library" % scalaVersion.value,
"org.scala-lang" % "scala-reflect" % scalaVersion.value,
"org.scalactic" %% "scalactic" % "3.0.5",
"org.scalatest" %% "scalatest" % "3.0.5" % "test",
"com.itextpdf" % "kernel" % "7.1.1",
"com.itextpdf" % "io" % "7.1.1",
"com.itextpdf" % "layout" % "7.1.1",
"com.itextpdf" % "forms" % "7.1.1",
"ch.qos.logback" % "logback-classic" % "1.2.3"
)