اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

لطباعة الجداول أو JTextArea يمكنك استخدام واجهة برمجة تطبيقات الطباعة java.awt.print و التي توفرها Java. 

و لطباعة محتوى JTextArea يمكنك استخدام Printable لإنشاء صفحة قابلة للطباعة.

import javax.swing.*;
import java.awt.*;
import java.awt.print.*;

public class PrintTextAreaExample {
    public static void main(String[] args) {
        JTextArea textArea = new JTextArea(20, 40);
        textArea.setText("Text To print");

        JButton printButton = new JButton("Print");
        printButton.addActionListener(e -> {
            try {
                textArea.print();
            } catch (PrinterException ex) {
                ex.printStackTrace();
            }
        });

        JFrame frame = new JFrame("طباعة JTextArea");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JScrollPane(textArea), BorderLayout.CENTER);
        frame.add(printButton, BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }
}

و لطباعة محتوى JTable يمكنك استخدام JTable.PrintMode لطباعة الجدول :

import javax.swing.*;
import java.awt.*;
import java.awt.print.*;

public class PrintJTableExample {
    public static void main(String[] args) {
        String[] columnNames = {"col 1", "col 2", "col 3"};
        Object[][] data = {
            {"1", "value 1", "value 1"},
            {"2", "value 2", "value 2"},
            {"3", "value 3", "value 3"}
        };

        JTable table = new JTable(data, columnNames);
        JButton printButton = new JButton("Print Table");
        printButton.addActionListener(e -> {
            try {
                table.print(JTable.PrintMode.FIT_WIDTH);
            } catch (PrinterException ex) {
                ex.printStackTrace();
            }
        });

        JFrame frame = new JFrame(" Print Table");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JScrollPane(table), BorderLayout.CENTER);
        frame.add(printButton, BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }
}

والآن عند استدعائك لدالة print() على JTextArea أو JTable ستظهر لك نافذة الطباعة الافتراضية .

  • 0
نشر

لطباعة الجداول في Java باستخدام Swing، يمكنك استخدام print المتوفر في هذه المكونات، و يمكنك عرض نافذة الطباعة لاختيار الطابعة وإعداداتها قبل الطباعة، يكون الكود بهذا الشكل:

try {
    boolean complete = myTextArea.print();
    if (complete) {
        System.out.println("تمت الطباعة بنجاح!");
    } else {
        System.out.println("تم إلغاء الطباعة.");
    }
} catch (Exception e) {
    e.printStackTrace();
}

try {
    boolean complete = myTable.print(); // استدعاء دالة الطباعة مباشرة
    if (complete) {
        System.out.println("تمت الطباعة بنجاح!");
    } else {
        System.out.println("تم إلغاء الطباعة.");
    }
} catch (Exception e) {
    e.printStackTrace();
}

 

  • 0
نشر

 

الطريقة المدمجة في Swing هي الأسهل لكنها محدودة في التخصيص كالهوامش والتنسيق المتقدم.

وذلك من خلال الدالة print() الموجودة مباشرةً في مكونات Swing مثل JTable أو JTextArea، كالتالي:

try {
    boolean printed = table.print(); 
    if (printed) {
        System.out.println("تمت الطباعة بنجاح!");
    }
} catch (PrinterException e) {
    e.printStackTrace();
}

 

ولتخصيص نافذة الطباعة فالمتاح هو إضافة عنوان أو تذييل للصفحة، وتحديد وضع الطباعة مثل ملاءمة الجدول مع عرض الصفحة والتحكم في الهوامش بشكل جزئي.

try {
    boolean printed = table.print(
        JTable.PrintMode.FIT_WIDTH,
        " العنوان هنا",           
        "الصفحة: {0}", 
        true,                      
        null,                    
        true                       
    );
} catch (PrinterException e) {
    e.printStackTrace();
}

العنوان والتذييل بإمكانك إضافة نص ثابت مثل التقرير الشهري أو صفحة {0}، ووضع الطباعة كتبت FIT_WIDTH لملاءمة الجدول مع عرض الصفحة.

باقي الخيارات true الأولى هي لعرض نافذة الطباعة وnull لتحديد إعدادات الطابعة الافتراضية  وtrue الثانية هي للطباعة تفاعليًا أي انتظار المستخدم.

ولو أردت طباعة JTextArea مع خط أكبر أو هوامش مُعدة مسبقًا، ستحتاج إلى استخدام Java Print Service API، لأن الطريقة المدمجة لا تدعم ذلك، ولكن تستطيع استخدام الحل التالي كبديل:

PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable((graphics, pageFormat, pageIndex) -> {
    if (pageIndex > 0) return Printable.NO_SUCH_PAGE;
    
    graphics.setFont(new Font("Arial", Font.BOLD, 14));
    graphics.drawString(textArea.getText(), 50, 50); // هوامش: 50 نقطة
    
    return Printable.PAGE_EXISTS;
});

if (job.printDialog()) { 
    try {
        job.print();
    } catch (PrinterException e) {
        e.printStackTrace();
    }
}

 

  • 0
نشر
بتاريخ 1 ساعة قال Mustafa Suleiman:

 

الطريقة المدمجة في Swing هي الأسهل لكنها محدودة في التخصيص كالهوامش والتنسيق المتقدم.

وذلك من خلال الدالة print() الموجودة مباشرةً في مكونات Swing مثل JTable أو JTextArea، كالتالي:

try {
    boolean printed = table.print(); 
    if (printed) {
        System.out.println("تمت الطباعة بنجاح!");
    }
} catch (PrinterException e) {
    e.printStackTrace();
}

 

ولتخصيص نافذة الطباعة فالمتاح هو إضافة عنوان أو تذييل للصفحة، وتحديد وضع الطباعة مثل ملاءمة الجدول مع عرض الصفحة والتحكم في الهوامش بشكل جزئي.

try {
    boolean printed = table.print(
        JTable.PrintMode.FIT_WIDTH,
        " العنوان هنا",           
        "الصفحة: {0}", 
        true,                      
        null,                    
        true                       
    );
} catch (PrinterException e) {
    e.printStackTrace();
}

العنوان والتذييل بإمكانك إضافة نص ثابت مثل التقرير الشهري أو صفحة {0}، ووضع الطباعة كتبت FIT_WIDTH لملاءمة الجدول مع عرض الصفحة.

باقي الخيارات true الأولى هي لعرض نافذة الطباعة وnull لتحديد إعدادات الطابعة الافتراضية  وtrue الثانية هي للطباعة تفاعليًا أي انتظار المستخدم.

ولو أردت طباعة JTextArea مع خط أكبر أو هوامش مُعدة مسبقًا، ستحتاج إلى استخدام Java Print Service API، لأن الطريقة المدمجة لا تدعم ذلك، ولكن تستطيع استخدام الحل التالي كبديل:

PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable((graphics, pageFormat, pageIndex) -> {
    if (pageIndex > 0) return Printable.NO_SUCH_PAGE;
    
    graphics.setFont(new Font("Arial", Font.BOLD, 14));
    graphics.drawString(textArea.getText(), 50, 50); // هوامش: 50 نقطة
    
    return Printable.PAGE_EXISTS;
});

if (job.printDialog()) { 
    try {
        job.print();
    } catch (PrinterException e) {
        e.printStackTrace();
    }
}

 

اسخدمة الطريق الاولى print لكن تتم الطباعه بشكل افقي_.thumb.jpg.8f0d12314abb4a715b6abb6874f7b656.jpg

  • 0
نشر
بتاريخ 4 ساعة قال Waseem Alshamiri:

اسخدمة الطريق الاولى print لكن تتم الطباعه بشكل افقي

 

حاول استخدام PageFormat بكتابة التالي PageFormat pageFormat = job.defaultPage() وتعيين الاتجاه العمودي من خلال pageFormat.setOrientation(PageFormat.PORTRAIT) وتمرير pageFormat كمعامل ثاني في setPrintable

try {
    PrinterJob job = PrinterJob.getPrinterJob();
    PageFormat pageFormat = job.defaultPage();
    
    // هنا
    pageFormat.setOrientation(PageFormat.PORTRAIT);
    
    job.setPrintable((graphics, pf, pageIndex) -> {
        if (pageIndex > 0) return Printable.NO_SUCH_PAGE;
        
        graphics.setFont(new Font("Arial", Font.BOLD, 14));
        graphics.drawString(textArea.getText(), 50, 50);
        
        return Printable.PAGE_EXISTS;
    }, pageFormat);

    if (job.printDialog()) {
        job.print();
    }
} catch (PrinterException e) {
    e.printStackTrace();
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...