0

XChart を使用して円グラフを作成し、それを SVG 形式にベクトル化して、PDFBox で作成された PDF で使用しようとしています。

これを行うには、次を使用します。

  • 円グラフの作成とベクトル化のための XChart ;
  • 以前の SVG ベクトル化に基づく Graphics2D 構築用の SVGSalamender ;
  • 以前の Graphics2D を PDF に追加するための PDFBoxGraphics2D。

すべてが正常に実行されますが (エラーなしでコンパイルおよび実行されます)、機能しません。出力 PDF は空のままです。

これは私のコードです:

@Test
public void test() {
  try {
    PieChart camembertXChart = camembertXChart();

    BufferedImage imageCamembertXChart = BitmapEncoder.getBufferedImage(camembertXChart);

    ByteArrayOutputStream output = new ByteArrayOutputStream();
    File svg = new File("F:\\Users\\mangin\\Desktop\\Camembert_XChart.svg");
    VectorGraphicsEncoder.saveVectorGraphic(camembertXChart, svg.getName(), VectorGraphicsFormat.SVG);
    byte[] data = output.toByteArray();
    FileInputStream input = new FileInputStream(svg);
    BufferedImage imageCamembertXChartVectorise = ImageIO.read(input);

    PDDocument document = new PDDocument();
    PDPage page = new PDPage();

    document.addPage(page);

    PDPageContentStream contenu = new PDPageContentStream(document, page, AppendMode.APPEND, false, true);

    PdfBoxGraphics2D pdfBoxGraphics2D = new PdfBoxGraphics2D(document, 200, 200);

    // SVG Salamander
    SVGUniverse universSVG = new SVGUniverse();
    SVGDiagram diagramSVG = universSVG.getDiagram(universSVG.loadSVG(svg.toURI().toURL()));
    diagramSVG.render(pdfBoxGraphics2D);
    pdfBoxGraphics2D.dispose();

    var xform = pdfBoxGraphics2D.getXFormObject();

    var transform = AffineTransform.getTranslateInstance(200, 200);
    xform.setMatrix(transform);

    contenu.drawForm(xform);

    contenu.close();

    document.save("D://tests/archi/PDF_avec_elements_graphique.pdf");
    document.close();
  } catch (Exception e) {
    throw new RuntimeException(e);
  }
}

private PieChart camembertXChart() {
  PieChart camembert2 = new PieChartBuilder().width(200).height(200).build();
  Color[] sliceColors = new Color[] {
    new Color(183, 203, 231),
    new Color(131, 173, 219),
    new Color(84, 143, 197),
    new Color(70, 120, 165) };
  camembert2.getStyler().setSeriesColors(sliceColors);
  camembert2.getStyler().setLegendVisible(false);
  camembert2.getStyler().setPlotBorderVisible(false);
  camembert2.getStyler().setChartTitleVisible(false);
  camembert2.getStyler().setChartTitleBoxVisible(false);
  camembert2.getStyler().setChartPadding(0);
  camembert2.getStyler().setChartTitlePadding(0);
  camembert2.getStyler().setBorderWidth(3);
  camembert2.getStyler().setAnnotationsFont(new Font("Arial", Font.BOLD, 10));
  camembert2.getStyler().setAnnotationsFontColor(Color.WHITE);
  camembert2.addSeries("Item 1", 9);
  camembert2.addSeries("Item 2", 10);
  camembert2.addSeries("Item 3", 23);
  camembert2.addSeries("Item 4", 58);
  return camembert2;
}

同等の開発の経験がある人はいますか? または、PDFが空である理由を誰かが知っていますか?

よろしくお願いいたします。

トーマス。

4

0 に答える 0