Создание снимка экрана сцены или части сцены в JavaFx 2.2

Мне удалось создать WritableImage, используя

WritableImage снимок = obj.getScene (). Снимок (ноль);

Теперь я хотел бы вывести этот снимок экрана в PDF-файл. Мне уже удалось вывести текст в PDF-файл с помощью библиотеки Apache pdfbox, используя следующий код:

PDDocument doc = null; PDPage page = null;

   try{
       doc = new PDDocument();
       page = new PDPage();

       doc.addPage(page);
       PDFont font = PDType1Font.HELVETICA_BOLD;

       PDPageContentStream content = new PDPageContentStream(doc, page);
       content.beginText();
       content.setFont( font, 12 );
       content.moveTextPositionByAmount( 100, 700 );
       content.drawString("Hello World");

       content.endText();
       content.close();
      doc.save("PDFWithText.pdf");
      doc.close();
    } catch (Exception e){
    System.out.println(e);
    }

Как я могу это сделать при использовании WritableImage, а не при использовании базовых текстов String?

Кроме того, как я могу сделать снимок экрана определенных узлов в сцене?

Спасибо


person Morelka    schedule 02.08.2013    source источник
comment
К вашему сведению: когда у вас есть несколько вопросов, обычно лучше задавать их в разных вопросах.   -  person jewelsea    schedule 03.08.2013


Ответы (1)


Снимок экрана сцены

У вас уже есть рабочий код для этого в вашем вопросе.

WritableImage snapshot = stage.getScene().snapshot(null);

Снимок экрана с расширением. . . часть сцены в JavaFx 2.2

Создание снимка узла похоже на создание снимка сцены, вы просто используете методы моментального снимка на Узле, а не на сцене. Сначала поместите свой узел в сцену, а затем сделайте снимок узла.

WritableImage snapshot = node.snapshot(null, null);

Первый параметр, который может быть передан вызову node.snapshot, - это некоторая конфигурация для SnapshotParameters (которые, вероятно, вам не нужны, но вы можете изучить их, чтобы узнать, нужны ли они или полезны в вашем случае).


Теперь я хотел бы вывести этот снимок экрана в PDF-файл. Как я могу это сделать при использовании WritableImage, а не при использовании базовых текстов String?

Я не использовал набор инструментов pdfbox, на который вы ссылаетесь в своем вопросе. Вероятно, этот инструментарий работает с изображениями на основе awt, а не с изображениями JavaFX, поэтому вам нужно будет преобразовать изображение снимка состояния JavaFX в изображение с буферизацией awt, используя SwingFXUtils.fromFXImage.

Чтобы фактически преобразовать изображение в кодировке awt в файл pdf, обратитесь к документации по набору инструментов pdfbox. Ответ Касаса на Добавить BufferedImage в документ PDFBox, похоже, предоставляет фрагмент кода для этой операции. . Похоже, соответствующий код (а я еще не пробовал):

PDPageContentStream content = new PDPageContentStream(doc, page);
PDXObjectImage ximage = new PDJpeg(doc, bufferedImage);
content.drawImage(ximage, x, y);
person jewelsea    schedule 02.08.2013
comment
Спасибо за ответ! Это действительно помогло. Я на один шаг ближе к размещению изображения в PDF-файле, но когда я использую код, PDF-файл не отображается, но когда я добавляю InputStream и OutputStream, показанные тем же потоком, который вы указали, документ создается, но я получить сообщение об ошибке от программы Adobe о том, что Acrobat не может правильно отображать страницу. Как только я возвращаюсь к использованию класса BufferedImage, документ просто не создается, и я не знаю почему. Код мне понятен. - person Morelka; 04.08.2013