Конвертируйте файлы PPTx в PDF, таблицы на слайдах становятся черными после преобразования - PullRequest
0 голосов
/ 10 января 2020

У меня есть требование конвертировать файлы PPTx в PDF в формате scala, и в настоящее время я использую подход, в котором мы конвертируем слайды ppt в изображения (с POI 3.17 - у меня есть зависимость, не могу использовать более высокую версию) в al oop и затем добавьте их в файл 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

Я нашел несколько ссылок, где он было упомянуто, что это как-то связано с прозрачными пикселями, но ни один из них мне не подходит.

...