Инструменты пользователя

Инструменты сайта


develop:java:javafx_howto

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
develop:java:javafx_howto [2023/06/25 04:49]
admin создано
develop:java:javafx_howto [2023/08/05 11:49] (текущий)
admin
Строка 3: Строка 3:
  
 ===== Сборка/запуск ===== ===== Сборка/запуск =====
 +<details>
 +<summary>:!: Доп пакеты</summary>
 т.к. пакет FX выпилили в отдельный модуль, то и для сборки/запуска нужно еще что то использовать, находится все в [[https://openjfx.io/|OpenJFX]], по аналогии с JDK скачивается/ставится\\ т.к. пакет FX выпилили в отдельный модуль, то и для сборки/запуска нужно еще что то использовать, находится все в [[https://openjfx.io/|OpenJFX]], по аналогии с JDK скачивается/ставится\\
 Вроде как можно с помощью мавена включить зависимости в состав пакета, но что то не получается пока, включает все, но не запускается\\ Вроде как можно с помощью мавена включить зависимости в состав пакета, но что то не получается пока, включает все, но не запускается\\
Строка 9: Строка 11:
 java --module-path path/to/javafx/lib --add-modules javafx.controls,javafx.fxml -jar myproject.jar java --module-path path/to/javafx/lib --add-modules javafx.controls,javafx.fxml -jar myproject.jar
 </code> </code>
 +</details>
  
 +<details>
 +<summary>:!: Проба1_javafx-maven-plugin</summary>
 +[[https://github.com/openjfx/javafx-maven-plugin|git]]\\
 +pow.xml
 +<code xml>
 +(...)
 +    <dependencies>
 +        <dependency>
 +            <groupId>org.openjfx</groupId>
 +            <artifactId>javafx-controls</artifactId>
 +            <version>20.0.1</version>
 +        </dependency>
 +    </dependencies>
  
 +    <build>
 +        <plugins>
 +            <plugin>
 +                <groupId>org.openjfx</groupId>
 +                <artifactId>javafx-maven-plugin</artifactId>
 +                <version>0.0.8</version>
 +                <configuration>
 +                    <mainClass>com.sakeep.Launcher</mainClass>
 +                </configuration>
 +            </plugin>
 +        </plugins>
 +    </build>
 +(...)
 +</code>
 +
 +<code bash>
 +maven clean compile package install
 +</code>
 +
 +На выходе файл 3кб, ест-но ничего не содержит в себе. и нихрена не запускается, даже на той же машине\\
 +возможно его надо мавеном запускать, но с ide-ешным хз как его там\\
 +</details>
 +
 +
 +<details>
 +<summary>:!: Добавим плагин maven-assembly-plugin</summary>
 +<code xml>
 +(...)
 +<plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-assembly-plugin</artifactId>
 +                <executions>
 +                    <execution>
 +                        <phase>package</phase>
 +                        <goals>
 +                            <goal>single</goal>
 +                        </goals>
 +                    </execution>
 +                </executions>
 +                <configuration>
 +                    <archive>
 +                        <manifest>
 +                            <mainClass>com.sakeep.Launcher</mainClass>
 +                        </manifest>
 +                    </archive>
 +                    <descriptorRefs>
 +                        <descriptorRef>jar-with-dependencies</descriptorRef>
 +                    </descriptorRefs>
 +                </configuration>
 +            </plugin>
 +(...)
 +</code>
 +
 +На выходе уже файл 8мб, содержит в себе все классы, запускается на рабочей машине, но не стартует на другой, ошибки "unamed module.."\\
 +</details>
 +
 +
 +<details>
 +<summary>:!: </summary>
 +<code xml>
 +</code>
 +
 +<code bash>
 +</code>
 +</details>
 +
 +
 +
 +===== Image =====
 +
 +<details>
 +<summary>:!: Image to BufferedImage, save to File</summary>
 +<code java>
 +Image img = (откуда нибудь берем Image);
 +BufferedImage bImage = new BufferedImage(img.getWidth(null)+20, img.getHeight(null)+20, BufferedImage.TYPE_INT_ARGB);
 +Graphics2D bGr = bImage.createGraphics();
 +bGr.drawImage(img, 0, 0, null);
 +bGr.dispose();
 +
 +File outputfile = new File("itext_img.png");
 +ImageIO.write(bImage, "png", outputfile);
 +</code>
 +</details>
 +
 +
 +
 +===== PDF =====
 +Для работы с pdf есть библиотека itext [[https://api.itextpdf.com/iText5/java/5.5.9/com/itextpdf/text/Image.html#setAlignment-int-|дока]]\\
 +Работать удобно, можно ШК организовать, но нет печати, для этого нашелся пакет [[https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox|Apache PDFBox]]
 +
 +<details>
 +<summary>:!: Примеры</summary>
 +Генерация ШК и сохранение
 +<code java>
 +com.itextpdf.text.Document document = new com.itextpdf.text.Document();
 +PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("tmp/itext_probe.pdf"));
 +document.setPageSize(new com.itextpdf.text.Rectangle(58,40));
 +document.setMargins(2,2,2,2);
 +document.open();
 +
 +PdfContentByte pdfContentByte = pdfWriter.getDirectContent();
 +
 +// Генерируем баркод
 +Barcode128 barcode128 = new Barcode128();
 +barcode128.setCode("myString");
 +barcode128.setCodeType(Barcode128.CODE128);
 +
 +// Размеры
 +barcode128.setSize(10);
 +barcode128.setBarHeight(70);
 +
 +com.itextpdf.text.Image code128Image = barcode128.createImageWithBarcode(pdfContentByte, null, null);
 +code128Image.scaleToFit(55,40);
 +code128Image.setAbsolutePosition(10,10);
 +document.add(code128Image);
 +document.close();
 +</code>
 +
 +Печать
 +<code java>
 +PDDocument pdfDoc = PDDocument.load(new File("tmp/itext_probe.pdf"));
 +PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
 +PrinterJob job = PrinterJob.getPrinterJob();
 +job.setPageable(new PDFPageable(pdfDoc));
 +job.setPrintService(printServices[0]);
 +job.print();
 +</code>
 +</details>
 +
 +
 +
 +===== Печать =====
 +
 +<details>
 +<summary>:!: Пример печати изображения с текстом</summary>
 +
 +<code java>
 +java.awt.Image awtImage = barcode128.createAwtImage(Color.black, Color.WHITE);
 +PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
 +PrinterJob job = PrinterJob.getPrinterJob();
 +// Размеры страницы для печати
 +PageFormat pageForm = job.defaultPage();
 +Paper paper = pageForm.getPaper();
 +double width = 8d * 72d;
 +double height = 4d * 72d;
 +double margin = 1d * 72d;
 +paper.setSize(width, height);
 +//paper.setImageableArea(margin, margin, width - (margin * 2), height - (margin * 2));
 +paper.setImageableArea(0, 0, width, height);
 +//pageForm.setOrientation(PageFormat.LANDSCAPE);
 +pageForm.setPaper(paper);
 +job.setPrintable(new Printable() {
 +    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
 +        if (pageIndex != 0) {
 +            return NO_SUCH_PAGE;
 +        }
 +        Graphics2D g2d = (Graphics2D) graphics;
 +        g2d.drawImage(awtImage, 40, 5, null);
 +        // Пишем текст
 +        g2d.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 9));
 +        FontMetrics fm = g2d.getFontMetrics();
 +        String text = selectedProd.getName();
 +        // центрирование текста под ШК
 +        int centerBarcode = awtImage.getWidth(null) / 2 + 40;
 +        int centerText = fm.stringWidth(text) / 2;
 +        // добавляем начальный отступ, как у изображения (15)
 +            // добвялем высоту самого изображения и высоту текста
 +        int yForText= 5 + awtImage.getHeight(null) + fm.getAscent();
 +        g2d.drawString(text, centerBarcode - centerText, yForText);
 +        // объем на второй строке
 +        text = selectedProd.getSelectedVolume().getName();
 +        // центрирование текста под ШК
 +        centerText = fm.stringWidth(text) / 2;
 +        // добавляем начальный отступ, как у изображения (15)
 +        // добвялем высоту самого изображения и высоту текста
 +        yForText= 5 + awtImage.getHeight(null) + (fm.getAscent() * 2);
 +        g2d.drawString(text, centerBarcode - centerText, yForText);
 +        return PAGE_EXISTS;
 +    }
 +}, pageForm);
 +job.setPrintService(printServices[0]);
 +//if (job.printDialog())
 +    job.print();
 +</code>
 +</details>
 +
 +
 +
 +
 +===== Сообщения =====
 +
 +<details>
 +<summary>:!: Alert</summary>
 +<code bash>
 +import javafx.scene.control.Alert;
 +    ...
 +    Alert alert = new Alert(Alert.AlertType.INFORMATION);
 +
 +    alert.setTitle("Information");
 +    alert.setHeaderText(null);
 +    alert.setContentText("Hello World!");
 +
 +    alert.showAndWait();
 +</code>
 +</details>
  
develop/java/javafx_howto.1687668553.txt.gz · Последнее изменение: 2023/06/25 04:49 — admin