Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java pdfBox将pdf转换为具有透明度的图像_Java_Pdfbox - Fatal编程技术网

Java pdfBox将pdf转换为具有透明度的图像

Java pdfBox将pdf转换为具有透明度的图像,java,pdfbox,Java,Pdfbox,到目前为止,这一切都很好,但是如何为生成的图像添加透明度呢 for (img <- 0 until f.length) { val inputPdf = PDDocument.load(f(img).getPath).getDocumentCatalog.getAllPages.get(0).asInstanceOf[PDPage] val outputfile = new File(f(img).getName + ".png") ImageIO.write(i

到目前为止,这一切都很好,但是如何为生成的图像添加透明度呢

for (img <- 0 until f.length) {
    val inputPdf = PDDocument.load(f(img).getPath).getDocumentCatalog.getAllPages.get(0).asInstanceOf[PDPage]

    val outputfile = new File(f(img).getName + ".png")
    ImageIO.write(inputPdf.convertToImage(), "png", outputfile)
}
for(img尝试使用with

您可以查看convertToImage的代码:(1.8.4)或(1.8.8-current)

您可能希望使用:

convertToImage(BufferedImage.TYPE_INT_ARGB, 2 * DEFAULT_USER_SPACE_UNIT_DPI);

注意:PDF支持透明对象。但是,正如@mkl所述,它与PDF引用不兼容。

基本上是将PDF页面渲染为位图图像。但指定PDF页面在所有绘制的内容后面有白色背景(当谈到透明度时,规范将页面概括为一个透明度组,由放置在页面上的整个对象堆栈组成,并与纯白色和完全不透明的背景合成)。因此,当绘制整个页面时,结果没有任何透明度。@mkl PDF似乎从1.4开始就支持透明度。@NiematojakTomasz是的,在页面上合成对象时内部支持,否则“透明度组”的概念毕竟,上面的内容毫无意义。但作为最终对象的页面预计将绘制在白色背景上。(不过,这只是规范,在您自己的渲染器中,您可以使用自己选择的背景,包括完全透明的背景。但这就是为什么您不应该期望现有PDF库在要求绘制页面时返回透明图像的原因。)@mkl假设您在纸上打印;)PDF目前被广泛用于不同的目的。但你是对的。根据PDF,你总是在指定的颜色空间中打印,并且没有一个支持透明度。这可能确实有帮助;毕竟
转换图像(int,int)
重载使用
图形初始化背景。setBackground(透明白)
之后是整个图像区域的
clearRect
。修复了我的问题。非常感谢。
convertToImage(BufferedImage.TYPE_INT_ARGB, 2 * DEFAULT_USER_SPACE_UNIT_DPI);