1

CMYKカラーのみでJFreeChartを生成するには?

すべてを呼び出す.setPaint(new CmykColor(...))必要がありますか、それとももっとエレガントな方法がありますか? 私でさえ、考えられるすべての方法を知っているわけではありません.setPaint(...)

問題を再現するために、小さな単体テストを作成しました。Chart を生成し、最後に CMYK のみを許可する PDF/x に追加します。

no の場合、テストは緑色になりcom.lowagie.text.pdf.PdfXConformanceExceptionます。Colorspace 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>   
4

1 に答える 1

0

プロットがさまざまなデータセットに使用する色を変更するには、plot.setDrawingSupplier()を呼び出して、好きな色を指定します(役立つ場合は、ChartColorクラスを使用できます)。これはインターフェイスなので、独自に作成することも、DefaultDrawingSupplierを使用して、multiargconstuctorを使用して簡単にすることもできます。次に、setOutlinePaint、setBackgroundPaint、そして念のためにsetNoDataPaintがあります。すでに灰色になっている目盛りなどを除いて、ほとんどのことをカバーしていると思います。

于 2012-10-02T01:52:18.283 に答える