JFrame:打印不使用malayalam文本

 可爱的丿白1985 发布于 2023-02-12 16:40

我写了一个打印JFrame内容的Java程序.它在框架中的标签中与英语完美配合,但当我在其中使用Malayalam unicode字符串时出错.

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame; 
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.JLabel;

public class MalayalamPrintingSSCCE {

private static Frame frame;

public static void main(String[] args) {

    frame = new Frame();
    frame.setLayout(new FlowLayout());
    frame.add(new JLabel("Vishnu1"));
    frame.add(new JLabel("\u0D35\u0D3F\u0D37\u0D4D\u0D23\u0D41"));//??????
    frame.add(new JLabel("\u0D35\u0D3F\u0D37\u0D4D\u0D23\u0D41"));//??????
    frame.add(new JLabel("\u0D35\u0D3F\u0D37\u0D4D\u0D23\u0D41"));//??????
    frame.add(new JLabel("Vishnu4"));
    frame.setVisible(true);
    frame.pack();

    PrinterJob pj = PrinterJob.getPrinterJob();
    pj.setJobName(" Print Component ");

    pj.setPrintable(new Printable() {
        public int print(Graphics pg, PageFormat pf, int pageNum) {
            if (pageNum > 0) {
                return Printable.NO_SUCH_PAGE;
            }
            Dimension dim = frame.getSize();
            double cHeight = dim.getHeight();
            double cWidth = dim.getWidth();

            // get the bounds of the printable area
            double pHeight = pf.getImageableHeight();
            double pWidth = pf.getImageableWidth();

            double pXStart = pf.getImageableX();
            double pYStart = pf.getImageableY();

            double xRatio = pWidth / cWidth;
            double yRatio = pHeight / cHeight;

            Graphics2D g2 = (Graphics2D) pg;
            g2.translate(pXStart, pYStart);
            g2.scale(xRatio, xRatio);
            frame.paint(g2);
            return Printable.PAGE_EXISTS;
            }
        });

        try {
            if (pj.printDialog()) {
                    pj.print();
                }
            } catch (PrinterException ex) {
            // handle exception
            }
        }
    }

打印机输出英文: 用英文打印输出 使用马拉雅拉姆语输出打印机 用马拉雅拉姆打印输出 但是,框架渲染正确如下: 在此输入图像描述 我怎样才能解决这个问题?有没有更好的方法呢?

1 个回答
  • 您可以添加fontlabel并可以打印马拉雅拉姆语Frame

    以下显示了一个在malayalam中打印我的名字的简单代码:

    import java.awt.Font;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
        /**
         * @author Rakesh KR
         */
    
    public class SimpleGUI1 {
    
    
    
        public static void main(String[] args) {
            SimpleGUI1 gUI = new SimpleGUI1();
            gUI.action();
        }
    
        void action(){
            JFrame  frame  = new JFrame();
            JLabel label = new JLabel("??????");
            // Can also use unicode 
            //JLabel label= new JLabel("\u0d30\u0d3e\u0d15\u0d47\u0d37\u0d4d");
            Font font = new Font("Arial Unicode MS", Font.PLAIN, 12);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            label.setFont(font);
            frame.add(label);
            frame.setSize(100,100);
            frame.setVisible(true);
    
        }
    
    
    }
    

    产量

    在此输入图像描述

    编辑

    通过使用上面frame(添加的字体)我们也可以打印马拉雅拉姆语.

        import java.awt.Font;
        import javax.swing.JFrame;
        import javax.swing.JLabel;
    
            /**
             * @author Rakesh KR
             */
    
        public class SimpleGUI1 {
    
    
    
            public static void main(String[] args) {
                SimpleGUI1 gUI = new SimpleGUI1();
                gUI.action();
            }
    
            void action(){
                JFrame  frame  = new JFrame();
                JLabel label = new JLabel("??????");
                // Can also use unicode 
                //JLabel label= new JLabel("\u0d30\u0d3e\u0d15\u0d47\u0d37\u0d4d");
                Font font = new Font("Arial Unicode MS", Font.PLAIN, 12);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                label.setFont(font);
                frame.add(label);
                frame.setSize(100,100);
                frame.setVisible(true);
                PrinterJob pj = PrinterJob.getPrinterJob();
                pj.setJobName(" Print Component ");
    
                pj.setPrintable(new Printable() {
                    public int print(Graphics pg, PageFormat pf, int pageNum) {
                        if (pageNum > 0) {
                            return Printable.NO_SUCH_PAGE;
                        }
                        Dimension dim = frame.getSize();
                        double cHeight = dim.getHeight();
                        double cWidth = dim.getWidth();
    
                        // get the bounds of the printable area
                        double pHeight = pf.getImageableHeight();
                        double pWidth = pf.getImageableWidth();
    
                        double pXStart = pf.getImageableX();
                        double pYStart = pf.getImageableY();
    
                        double xRatio = pWidth / cWidth;
                        double yRatio = pHeight / cHeight;
    
                        Graphics2D g2 = (Graphics2D) pg;
                        g2.translate(pXStart, pYStart);
                        g2.scale(xRatio, xRatio);
                        frame.paint(g2);
                        return Printable.PAGE_EXISTS;
                        }
                    });
    
                    try {
                        if (pj.printDialog()) {
                                pj.print();
                            }
                        } catch (PrinterException ex) {
    
                        }
                    }
            }
    }
    

    输出: Pdf保存打印页面的格式 Pdf保存打印页面的格式

    单个标签上的编辑结果还可以.但两种语言的多个标贴,错误发生

    对于您需要添加一个JPanelJFrame和到JPanel 像添加所需的组件JLabel.

            final JFrame  frame  = new JFrame();
            JPanel panel  = new JPanel();
            JLabel label = new JLabel("??????");
            JLabel label1 = new JLabel("Rakesh");
            JLabel label2 = new JLabel("\u0d30\u0d3e\u0d15\u0d47\u0d37\u0d4d");
            JLabel label3 = new JLabel("Rakesh");
            Font font = new Font("Arial Unicode MS", Font.PLAIN, 12);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            label.setFont(font);
            label1.setFont(font);
            label2.setFont(font);
            label3.setFont(font);
            panel.add(label);
            panel.add(label1);
            panel.add(label2);
            panel.add(label3);
            frame.add(panel);
            frame.setSize(300,300);
            frame.setVisible(true);
            frame.pack();
    

    输出:

    在此输入图像描述

    在此输入图像描述

    2023-02-12 16:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有