Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

JavaFXطريقة طباعة النص المدخل في HTMLEditor

المثال التالي يعلمك طريقة طباعة النص المدخل في HTMLEditor أو حفظه بصيغة pdf بالإعتماد على الـ WebView.


مثال

Main.java
import javafx.application.Application;
import javafx.print.PrinterJob;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.web.HTMLEditor;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {

        // htmlEditor يمثل النص الذي نريد وضعه للكائن HTML هنا قمنا بتعريف متغير وضعنا فيه نص جاهز عبارة عن كود بلغة
        String initialText = 
            "<html dir=\"ltr\"><head></head><body contenteditable=\"true\"><p>"
            + "<font face=\"Segoe UI\">Hello my name is "
            + "<b>Mhamad Harmush</b>. </font></p><p>"
            + "<font face=\"Segoe UI\">I am <font color=\"#cc3333\">"
            + "<b>24</b></font> years old. </font>"
            + "<span style=\"font-family: 'Segoe UI';\">I started programming"
            + " at </span><b style=\"font-family: 'Segoe UI';\">"
            + "<font color=\"#cc3333\">18</font></b><span style=\"font-family:"
            + "'Segoe UI';\">.</span></p><p><span style=\"font-family:"
            + "'Segoe UI';\"><b>I code using the following languages in"
            + "my work:</b></span></p><p></p><ul><li><font face=\"Segoe UI\">"
            + "C# for Backend and desktop apps.</font></li><li><font face=\""
            + "Segoe UI\">HTML, CSS, JS, JQuery, Bootstrap, TypeScript for"
            + " Frontend.</font></li></ul><p><font face=\"Segoe UI\"><b>Also,"
            + " I use the following frameworks:</b></font></p><p></p><p><p>"
            + "</p><p></p><p></p></p><ul><li><font face=\"Segoe UI\">Angular</font>"
            + "</li><li><font face=\"Segoe UI\">Ionic</font></li></ul></body></html>";

        // هنا قمنا بإنشاء جميع الأشياء التي سنضيفها في النافذة
        HTMLEditor htmlEditor = new HTMLEditor();
        Button button = new Button("Print Now");
        
        // لصفحة ويب من أجل طباعته htmlEditor لأننا سنستخدمها لاحقاً عند محاولة تحويل نص الكائن webEngine و webView هنا قمنا بإنشاء الكائنين
        WebView webView = new WebView();
        WebEngine webEngine = webView.getEngine();

        // و الذي بدوره سيحوله لصفحة ويب htmlEditor كنص للكائن initialText هنا قمنا بوضع نص المتغير
        htmlEditor.setHtmlText(initialText);

        // هنا قمنا بتحديد مكان ظهور الأشياء التي سنضيفها في النافذة
        htmlEditor.setTranslateX(20);
        htmlEditor.setTranslateY(20);
        button.setTranslateX(245);
        button.setTranslateY(340);

        // هنا قمنا بتحديد حجم جميع الأشياء التي سنضيفها في النافذة
        htmlEditor.setPrefSize(600, 300);
        button.setPrefSize(150, 30);

        // في النافذة Root Node لأننا ننوي جعله الـ Group هنا قمنا بإنشاء كائن من الكلاس
        Group root = new Group();

        // root هنا قمنا بإضافة جميع الأشياء في الكائن
        root.getChildren().add(htmlEditor);
        root.getChildren().add(button);

        // فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
        Scene scene = new Scene(root, 640, 390);

        // هنا وضعنا عنوان للنافذة
        stage.setTitle("JavaFX HTML Editor");

        // أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ
        stage.setScene(scene);

        // هنا قمنا بإظهار النافذة
        stage.show();

        // toggleGroup هنا قمنا بتحديد ماذا سيحدث عند النقر على أي زر تابع للمجموعة
        button.setOnAction((ActionEvent) -> {

            // webView و الذي بدوره سيرسمه كصفحة ويب عادية في الكائن htmlEditor يرسم نفس المحتوى الموجود في الكائن webEngine هنا قمنا بجعل الكائن
            webEngine.loadContent(htmlEditor.getHtmlText());
            
            // PrinterJob من الكلاس createPrinterJob() هنا قمنا بإستدعاء الدالة الثابتة
            // في حال كان هناك طابعة متوفرة أو نظام التشغيل يتيح لك حفظ الصفحة بصيغة معينة من أجل طباعتها PrinterJob هذه الدالة ترجع كائن من الكلاس
            // job في الكائن null إذا لم يكن هناك طابعة متوفرة أو لم يتيح لك نظام التشغيل حفظ الصفحة بصيغة معينة سيتم تخزين القيمة
            PrinterJob job = PrinterJob.createPrinterJob();
            
            // job في الكائن null إذا لم يتم تخزين القيمة
            if (job != null) {
                // سيتم محاولة طباعة صفحة الويب أو إظهار نافذة منبثقة تتيح للمستخدم حفظها عل ى جهازه
                boolean success = job.printPage(webView);
                if (success) {
                    job.endJob();
                }
            }
            
        });

    }
    
    // هنا قمنا بتشغيل التطبيق
    public static void main(String[] args) {
        launch(args);
    }

}

ستظهر لك النافذة التالية عند التشغيل.

أظهر لنا خيار حفظ الملف بصيغة PDF لأننا لم نصل طابعة ( Printer ) في الحاسوب أثناء تجربة البرنامج و لأننا قمنا بتجربة الكود على حاسوب عليه نظام التشغيل Windows 10. إذاً نظام التشغيل هو من إقترح على التطبيق خيار حفظ الملف بصيغة PDF لذلك في حال كنت تستخدم نظام آخر قد لا تحصل على نفس النتيجة.

طريقة طباعة النص المدخل في HTMLEditor في javafx