Граф JavaFX в PDF-документе itext - PullRequest
2 голосов
/ 29 января 2020

Передо мной стоит следующая задача:

Я получаю некоторые данные (неважно, как) и должен создать отчет в формате PDF. Моя программа в целом имеет GUI, созданную с использованием JavaFX, но часть pdf работает в отдельном потоке. В общем, создание PDF не проблема. Я использую iText в качестве pdf lib.

Проблема в том, что мне нужно включить довольно сложный график в документ pdf. Сам график также не является проблемой, так как я хорошо знаком с графиками JavaFX.

В настоящее время я планирую решить проблему с графиком следующим образом:

// at first create the chart
final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();
final LineChart<Number, Number> chart = new LineChart<>(xAxis, yAxis);

// format the graph and add the data
...not shwon here, not important...

// now get the chart as picture to embed in the document
WritableImage chartWrtImg                   = chart.snapshot(new SnapshotParameters(), null);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

try {

    // convert the WritableImage from javaFX to an Image from itext
    ImageIO.write(SwingFXUtils.fromFXImage(chartWrtImg, null), "png", byteArrayOutputStream);
    Image graphImg = Image.getInstance(byteArrayOutputStream.toByteArray());

    // scale and position the picture
    graphImg.setAbsolutePosition(35, docHeight - 460);
    graphImg.scaleAbsolute(docWidth - 80, 350);

    // the itext pdf document
    document.add(graphImg);

} catch (IOException e) {
    e.printStackTrace();
}

В данный момент я получить следующее исключение при запуске создания PDF:

java.lang.ClassNotFoundException: javafx.embed.swing.SwingFXUtils

Почему я получаю показанное исключение? Я импортирую JavaFX версии 13 через Maven. Там должны быть библиотеки (и они также работают в потоке приложения).

В общем, разумно ли использовать подобную диаграмму JavaFX просто для создания графика для документа PDF?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...