Java 将 XChart 保存为 PDF

Java save XChart as a PDF

使用XChart我可以制作漂亮的图表。当我制作图表时,我可以右键单击它,然后出现 "save as" 的选项。然后,我可以将图片以指定的格式保存到指定的目录下。

我如何编写 Java 代码来为我自动执行此操作?也就是说,我有一个创建大约五十张图表的应用程序,我不想每次 运行 应用程序时都必须手动将每个图表保存在它所属的位置。

这是我制作图表的方法:

private void makeLineChart(int[][] data, String title) {
    MyLineChart c = new MyLineChart(data, title);
    XYChart chart = c.getChart();
    new SwingWrapper<XYChart>(chart).displayChart();
    // save as pdf...?
}

xchart的示例代码有解决办法。 BitmapEncoder 可以在您每次启动应用程序时执行此操作。BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.PNG);

public class Example1 {

public static void main(String[] args) throws Exception {
 double[] yData = new double[] { 2.0, 1.0, 0.0 };
// Create Chart
XYChart chart = new XYChart(500, 400);
chart.setTitle("Sample Chart");
chart.setXAxisTitle("X");
chart.setXAxisTitle("Y");
XYSeries series = chart.addSeries("y(x)", null, yData);
series.setMarker(SeriesMarkers.CIRCLE);

BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.PNG);
BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.JPG);
BitmapEncoder.saveJPGWithQuality(chart, "./Sample_Chart_With_Quality.jpg", 0.95f);
BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.BMP);
BitmapEncoder.saveBitmap(chart, "./Sample_Chart", BitmapFormat.GIF);

BitmapEncoder.saveBitmapWithDPI(chart, "./Sample_Chart_300_DPI", BitmapFormat.PNG, 300);
BitmapEncoder.saveBitmapWithDPI(chart, "./Sample_Chart_300_DPI", BitmapFormat.JPG, 300);
BitmapEncoder.saveBitmapWithDPI(chart, "./Sample_Chart_300_DPI", BitmapFormat.GIF, 300);

VectorGraphicsEncoder.saveVectorGraphic(chart, "./Sample_Chart", VectorGraphicsFormat.EPS);
VectorGraphicsEncoder.saveVectorGraphic(chart, "./Sample_Chart", VectorGraphicsFormat.PDF);
VectorGraphicsEncoder.saveVectorGraphic(chart, "./Sample_Chart", VectorGraphicsFormat.SVG);

} }

类似于 ,但更具体地针对 OP 的问题,并且仅将输出写入 PDF。

可以使用 VectorGraphicsEncoder, which is shown in the examples under the heading "Save Chart as Bitmap".

编写 PDF

在这里,我将示例精简为仅包含相关信息:

package com.example;

import java.io.IOException;

import org.knowm.xchart.VectorGraphicsEncoder;
import org.knowm.xchart.VectorGraphicsEncoder.VectorGraphicsFormat;
import org.knowm.xchart.XYChart;
import org.knowm.xchart.XYSeries;
import org.knowm.xchart.style.markers.SeriesMarkers;

public class TryXchartToPdf extends XchartBase {
    /**
     * Creates a simple Chart and saves it as a PDF file.
     * @throws IOException
     */

    public static void main(String[] args) throws IOException {

        double[] yData = new double[] { 2.0, 1.0, 0.0 };

        // Create Chart
        XYChart chart = new XYChart(500, 400);
        chart.setTitle("Sample Chart");
        chart.setXAxisTitle("X");
        chart.setXAxisTitle("Y");
        XYSeries series = chart.addSeries("y(x)", null, yData);
        series.setMarker(SeriesMarkers.CIRCLE);

        VectorGraphicsEncoder.saveVectorGraphic(chart, "./Sample_Chart", VectorGraphicsFormat.PDF);

    }
}