Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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 v2将PNG图像写入PDF文件,获取空文件_Java_Image_Pdf_Png_Pdfbox - Fatal编程技术网

Java PDFBox v2将PNG图像写入PDF文件,获取空文件

Java PDFBox v2将PNG图像写入PDF文件,获取空文件,java,image,pdf,png,pdfbox,Java,Image,Pdf,Png,Pdfbox,我用的是PDFBOX2。正在尝试将PNG图像文件写入新的PDF文件 我看到已经有一个答案提到它固定在PDFBox2上: 及 这是我的代码: package pdfProj; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.p

我用的是PDFBOX2。正在尝试将PNG图像文件写入新的PDF文件

我看到已经有一个答案提到它固定在PDFBox2上: 及

这是我的代码:

package pdfProj;

import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

public class b {

    public static void main(String[] args) {
        PDDocument doc = null;
        doc = new PDDocument();        
        doc.addPage(new PDPage());
        try{
            BufferedImage awtImage = ImageIO.read( new File( "c://temp//line_chart.png" ) );
            PDImageXObject  pdImageXObject = LosslessFactory.createFromImage(doc, awtImage);
            PDPageContentStream contentStream = new PDPageContentStream(doc, new PDPage(), true, false);
            contentStream.drawImage(pdImageXObject, 200, 300, awtImage.getWidth() / 2, awtImage.getHeight() / 2);
                contentStream.close();
                doc.save( "c://temp//pdf//PDF_image.pdf" );
            doc.close();
        } catch (Exception io){
            System.out.println(" -- fail --" + io);
        }

    }
}

也不例外。只是创建了一个空的PDF文件。

问题是您要在文档中添加一个新页面

doc.addPage(new PDPage());
但是,然后为另一个新页面创建一个内容流,您不会将其添加到文档中:

PDPageContentStream contentStream = new PDPageContentStream(doc, new PDPage(), true, false);
您应该为添加到文档中的页面创建内容流,例如:

PDDocument doc = null;
doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
try{
    BufferedImage awtImage = ImageIO.read( new File( "c://temp//line_chart.png" ) );
    PDImageXObject  pdImageXObject = LosslessFactory.createFromImage(doc, awtImage);
    PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, false);
    contentStream.drawImage(pdImageXObject, 200, 300, awtImage.getWidth() / 2, awtImage.getHeight() / 2);
    contentStream.close();
    doc.save( "c://temp//pdf//PDF_image.pdf" );
    doc.close();
} catch (Exception io){
    System.out.println(" -- fail --" + io);
}

我犯了这个错误失败--javax.imageio.IIOException:不支持的映像Type@Dhrumil这表明java image io类不支持您使用的图像类型,至少在没有其他插件的情况下不支持。比如JPG,JPEG,PNG等等。。我在Apache PDFBox 2.0.5中遇到了相同的错误。。我必须转移到PDFBox的较低版本,这个问题不会出现。我不知道为什么这个问题会出现在新版本中。请自行将其设置为堆栈溢出问题,并提供准确的关键代码和示例文件来重现该问题。当我使用旧版本的PDF box时,我能够生成PDF格式的图像。我不确定最新版本有什么问题。我将把这个问题发布到ApachePDF问题跟踪器。