gpt4 book ai didi

java - 如何生成仅包含 CMYK 颜色的 JFreeChart

转载 作者:行者123 更新时间:2023-12-01 05:06:18 24 4
gpt4 key购买 nike

如何生成仅包含 CMYK 颜色的 JFreeChart?

我是否必须调用所有 .setPaint(new CmykColor(...)) 还是有更优雅的方法?即使我也不知道所有可能的 .setPaint(...) 方法。

为了重现该问题,我编写了一个小型单元测试。它生成一个图表,最后将其添加到仅允许 CMYK 的 PDF/x。

如果没有 com.lowagie.text.pdf.PdfXConformanceException:不允许颜色空间 RGB,则测试变为绿色。抛出异常。

public class TestChart
{
public static final int WIDTH = 500;
public static final int HEIGHT = 400;

private JFreeChart chart;

@Before
public void createChart()
{
final DefaultPieDataset dataSet = new DefaultPieDataset();
dataSet.setValue("United States", 4.54);
dataSet.setValue("Brazil", 2.83);

this.chart = ChartFactory.createPieChart("World Population by countries", dataSet, true, true, false);

// ChartUtilities.saveChartAsPNG(new File("test.png"), chart, width, height);
}

@Test
public void shouldAddChartToPdfX() throws FileNotFoundException, DocumentException
{
final Document document = new Document();
document.addTitle("Test PDF/x");

final PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));
pdfWriter.setPDFXConformance(PdfWriter.PDFX1A2001);

document.open();

final PdfContentByte directContent = pdfWriter.getDirectContent();
final PdfTemplate pdfTemplate = directContent.createTemplate(TestChart.WIDTH, TestChart.HEIGHT);
final Graphics2D graphics2d = pdfTemplate.createGraphics(TestChart.WIDTH, TestChart.HEIGHT);

final Rectangle2D rectangle2d = new Rectangle2D.Double(0, 0, TestChart.WIDTH, TestChart.HEIGHT);

this.chart.draw(graphics2d, rectangle2d);

graphics2d.dispose();

directContent.addTemplate(pdfTemplate, 0, 0);

document.close();

}
}

要执行此操作,您需要此 Maven 依赖项:

<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>

<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.0.14</version>
</dependency>

最佳答案

您可以通过调用plot.setDrawingSupplier() 并提供您喜欢的颜色来更改绘图用于不同数据集的颜色(如果有帮助,您可以使用 ChartColor 类)。它是一个接口(interface),因此您可以创建自己的接口(interface),也可以使用 DefaultDrawingSupplier 及其多参数构造函数来使其更简单。然后是 setOutlinePaint、setBackgroundPaint 和(以防万一)setNoDataPaint。这应该涵盖除刻度线等之外的大多数内容,我相信这些刻度线已经是灰色的。

关于java - 如何生成仅包含 CMYK 颜色的 JFreeChart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12621053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com