Image JFreeChart&;iText:创建pdf时的黑色图像

Image JFreeChart&;iText:创建pdf时的黑色图像,image,pdf,itext,jfreechart,Image,Pdf,Itext,Jfreechart,我正在使用JFreeChart 1.0.9创建图表,并使用iText 1.3.1在PDF文件中显示此图表。 为此,我创建了一个JFreeChart,然后将其转换为字节数组: final TimeSeriesCollection dataset = new TimeSeriesCollection(); final TimeSeries s1 = new TimeSeries("Series 1", Minute.class); s1.add(new Minute(0, 0, 7, 12, 200

我正在使用JFreeChart 1.0.9创建图表,并使用iText 1.3.1在PDF文件中显示此图表。 为此,我创建了一个JFreeChart,然后将其转换为字节数组:

final TimeSeriesCollection dataset = new TimeSeriesCollection();
final TimeSeries s1 = new TimeSeries("Series 1", Minute.class);
s1.add(new Minute(0, 0, 7, 12, 2003), 1.2);
s1.add(new Minute(30, 12, 7, 12, 2003), 3.0);   // 12h30  => value = 3
s1.add(new Minute(15, 14, 7, 12, 2003), 8.0);

final TimeSeries s2 = new TimeSeries("Series 2", Minute.class);
s2.add(new Minute(0, 3, 7, 12, 2003), 0.0);
s2.add(new Minute(30, 9, 7, 12, 2003), 0.0);
s2.add(new Minute(15, 10, 7, 12, 2003), 0.0);

dataset.addSeries(s1);
dataset.addSeries(s2);
XYDataset dataset2 = dataset;

final JFreeChart chart = ChartFactory.createTimeSeriesChart(
            "Sample Chart",
            "Date", 
            "Value",
            dataset2,
            true,
            true,
            false
);
chart.setBackgroundPaint(Color.white);
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());

BufferedImage originalImage = chart.createBufferedImage(500, 300, info);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( originalImage, "jpg", baos );
byte[] imageInByte = baos.toByteArray();
然后,我使用iText将这个字节数组简单地放入PDF文件中,如下所示:

Document document=new Document();
PdfWriter.getInstance(document,new FileOutputStream("hello.pdf"));
document.open(); 

Image image = Image.getInstance(imageInByte);
document.add(image);

document.close();
但是当我打开我的PDF文件时,我的图像应该是全黑的


你知道是什么原因造成的吗?

在转换过程中,图像似乎被反转了。请尝试以下代码

package demo;

import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.time.Minute;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.PdfWriter;


public class PDF {

    public static void main(String[] args) {
        final TimeSeriesCollection dataset = new TimeSeriesCollection();
        final TimeSeries s1 = new TimeSeries("Series 1", Minute.class);
        s1.add(new Minute(0, 0, 7, 12, 2003), 1.2);
        s1.add(new Minute(30, 12, 7, 12, 2003), 3.0);   // 12h30  => value = 3
        s1.add(new Minute(15, 14, 7, 12, 2003), 8.0);

        final TimeSeries s2 = new TimeSeries("Series 2", Minute.class);
        s2.add(new Minute(0, 3, 7, 12, 2003), 0.0);
        s2.add(new Minute(30, 9, 7, 12, 2003), 0.0);
        s2.add(new Minute(15, 10, 7, 12, 2003), 0.0);

        dataset.addSeries(s1);
        dataset.addSeries(s2);
        XYDataset dataset2 = dataset;

        final JFreeChart chart = ChartFactory.createTimeSeriesChart(
                    "Sample Chart",
                    "Date", 
                    "Value",
                    dataset2,
                    true,
                    true,
                    false
        );
        chart.setBackgroundPaint(Color.white);
        java.awt.Image originalImage = chart.createBufferedImage(500, 300);
        try {           
            Document document=new Document();
            PdfWriter.getInstance(document,new FileOutputStream("hello.pdf"));
            document.open(); 
            com.lowagie.text.Image image1 = com.lowagie.text.Image.getInstance(originalImage,Color.white);
            document.add(image1);
            document.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
使用iText的最新版本,我可以得到这个PDF

希望你也能得到同样的结果

我对你的代码做了如下更改

java.awt.Image originalImage = chart.createBufferedImage(500, 300);
移除

ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
因为它不需要。我还删除了ByteArrayOutputStream的
,并将其替换为

   com.lowagie.text.Image image1 = com.lowagie.text.Image.getInstance(originalImage,Color.white);

注意
com.lowagie.text.Imag
e和
java.awt.Image
的全名,因为awt和lowagie都有名为Image的类。

iText 1.3.1,真的吗?这个版本不止一个!我不是说这就是你问题的原因,跳到最新版本(5.3.0)会解决问题,但如果我是你,我会尝试一下…我没有选择我使用的版本。。。