我需要在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")
}
}
示例输出代码段
我发现了一些链接,其中提到它与透明像素有关,但似乎没有一个适合我。