Java iText 7:表的看似不可预测的行为

Java iText 7:表的看似不可预测的行为,java,scala,itext,pdf-generation,itext7,Java,Scala,Itext,Pdf Generation,Itext7,我正在创建一个PDF,上面有几个简单的表格。每个表包含1-2个单元格:一个图像单元格,大多数表还包含一个文本单元格 它适用于所有10个图像,但其中一个图像除外:图像未渲染 现在,我考虑了该图像表格单元格的尺寸,并构建了一个没有图像和文本的小示例,只有一个表格有两个单元格用于调试代码: import com.itextpdf.kernel.colors.DeviceRgb import com.itextpdf.kernel.geom.PageSize import com.itextpdf.ke

我正在创建一个PDF,上面有几个简单的表格。每个表包含1-2个单元格:一个图像单元格,大多数表还包含一个文本单元格

它适用于所有10个图像,但其中一个图像除外:图像未渲染

现在,我考虑了该图像表格单元格的尺寸,并构建了一个没有图像和文本的小示例,只有一个表格有两个单元格用于调试代码:

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.71372727489f,则第二个单元格不会呈现在第一页上

如果我将第一个单元格的高度设置为49或50,则输出与预期的一样,是第一个单元格正下方的第二个单元格

我不相信我的眼睛,但它确实是这样的。我确保它不是某个PDF查看器中的bug

如何解释该行为以及如何确保正确呈现该表

build.sbt中的依赖项:


这个bug看起来确实很奇怪,但幸运的是它已经在7.1.2版本中修复了。虽然还没有公开发布,也没有上传到Maven Central,但新版本的二进制文件已经在上发布了

要在Maven中添加存储库,请使用以下配置:

  <repositories>
    <repository>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>itext-releases</id>
      <name>iText Repository - releases</name>
      <url>https://repo.itextsupport.com/releases</url>
    </repository>
  </repositories>

非常感谢。现在它起作用了。在我尝试使用表格之前,我已经尝试使用div、段落和浮动图像来放置页面内容。我可以获得与现在相同的结果,但当它以某个角度出现时,一个不同的图像突然消失。我真的很好奇这种效果是如何持续的,因此我快速查看了发布更改日志。顺便说一句,该更改日志向我展示了itext7项目的进展情况:。但我看不出相关的变化。你能把我推到正确的方向吗?@ideaboxer请不要期望所有已修复的bug都会列在更改日志中:好的:-我仍然感兴趣。由于我目前正在将该库用于非商业项目,因此我有兴趣了解源代码,以便迟早以拉请求的形式提供一些支持。我认为这个问题是一个很好的切入点。
  <repositories>
    <repository>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>itext-releases</id>
      <name>iText Repository - releases</name>
      <url>https://repo.itextsupport.com/releases</url>
    </repository>
  </repositories>
resolvers += "iText Releases" at "https://repo.itextsupport.com/releases"