将PPTx文件转换为PDF,转换后幻灯片中的表格变黑

时间:2020-01-10 07:21:19

标签: scala pdf itext apache-poi powerpoint

我需要在scala中将PPTx文件转换为PDF,目前我正在采用以下方法将ppt幻灯片转换为图像(使用POI 3.17-我有一个依赖项,不能使用更高版本)循环,然后将它们添加到pdf文件(iText版本为5.5.13)。 我面临的问题是包含表格的幻灯片,表格的背景变黑了,没有数据可见。

以下是代码

object PptToPdfPOC {

  def main(args: Array[String]) {

    val is = new FileInputStream("src/test/resources/files/2478.pptx")
    val os = new FileOutputStream("src/test/resources/files/2478_Sample_1.pdf")
    val ppt: XMLSlideShow = new XMLSlideShow(is)
    var zoom: Double = 2;
    var at = new AffineTransform()
    at.setToScale(zoom, zoom)
    var pdfDocument = new Document()
    var pdfWriter = PdfWriter.getInstance(pdfDocument, os)
    var table = new PdfPTable(1)
    pdfWriter.open()
    pdfDocument.open()
    var pgsize: Dimension = null
    var slideImage: Image = null

    //getting the dimensions and size of the slide
    pgsize = ppt.getPageSize()
    var slide = ppt.getSlides().toArray

    var img: BufferedImage = null;

    for (i <- 0 to slide.length - 1) {
      //img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB)
      img = new BufferedImage((Math.ceil(pgsize.width * zoom)).toInt, (Math.ceil(pgsize.height * zoom)).toInt, BufferedImage.TYPE_INT_RGB)
      var graphics = img.createGraphics()
      graphics.setTransform(at)

      //clear the drawing area
      graphics.setPaint(Color.white)
      graphics.setColor(Color.white)
      graphics.setBackground(Color.white)
      graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height))

      //render
      slide(i).asInstanceOf[XSLFSlide].draw(graphics)
      graphics.getPaint()
      slideImage = Image.getInstance(img, null)
      table.addCell(new PdfPCell(slideImage, true))
    }

    pdfDocument.add(table)
    pdfDocument.close()
    pdfWriter.close()
    println("2478.pptx was converted to a PDF file")
  }

}

示例输出代码段

enter image description here

我发现了一些链接,其中提到它与透明像素有关,但似乎没有一个适合我。

0 个答案:

没有答案