Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么jlabel中的阿拉伯文文本(jlabel在jpanel中)不显示在带有jpanel.print(Graphics2D)的pdf中?_Java_Itext_Jpanel_Jlabel_Arabic - Fatal编程技术网

Java 为什么jlabel中的阿拉伯文文本(jlabel在jpanel中)不显示在带有jpanel.print(Graphics2D)的pdf中?

Java 为什么jlabel中的阿拉伯文文本(jlabel在jpanel中)不显示在带有jpanel.print(Graphics2D)的pdf中?,java,itext,jpanel,jlabel,arabic,Java,Itext,Jpanel,Jlabel,Arabic,为什么jlabel中的阿拉伯文文本(jlabel在jpanel中)不显示在带有jpanel.print(Graphics2D)的pdf中?法语文本显示得很好!有关更多信息,请参见图片,谢谢: public class PaneltopdfView extends FrameView { private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing

为什么jlabel中的阿拉伯文文本(jlabel在jpanel中)不显示在带有jpanel.print(Graphics2D)的pdf中?法语文本显示得很好!有关更多信息,请参见图片,谢谢:

public class PaneltopdfView extends FrameView {

    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField jTextField1;

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Desktop desktop = Desktop.getDesktop();
        jTextField1.setBackground( jPanel1.getBackground());
        // print the panel to pdf
        Document document = new Document();
        try {
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));
            document.open();
            PdfContentByte contentByte = writer.getDirectContent();
            PdfTemplate template = contentByte.createTemplate(500, 500);
            Graphics2D g2 = template.createGraphics(500, 500);
            jPanel1.print(g2);
            g2.dispose();
            contentByte.addTemplate(template, 30, 300);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (document.isOpen()) {
                document.close();
            } // TODO add your handling code here:
        }
        File file = new File("test.pdf");
        if (file.exists()) {
            try {
                desktop.open(file);
            } catch (IOException ex) {
                // Logger.getLogger(CalculerAbsIndiv.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

问题可能是字体/编码问题

  • 首先,并非每种字体都有可能的字符。如果您选择一种字体(如Helvetica)并要求其生成阿拉伯语文本,则该字体将不起作用

    显示的字符(实际像素信息)称为字形。与字符关联的代码(ASCII、unicode)是 称为代码点

    每当iText遇到一个代码点 所选字体中没有可用的字形信息,它将 只需跳过该字符。如果您使用了错误的字体,您将 从未见过任何字符

  • 第二,如果你使用阿拉伯语,考虑使用ITXEX7和PDFrAgScript。阿拉伯语(以及其他几种语言)具有所谓的opentype功能。或者,简单地说,他们需要的不仅仅是简单的“查找glyph,将glyph放在这里”。例如,阿拉伯语有复杂的规则来控制字形顺序和连字

    pdfCalligraph知道各种脚本的所有这些规则,并且无需您的任何努力即可应用它们


问题可能是字体/编码问题

  • 首先,并非每种字体都有可能的字符。如果您选择一种字体(如Helvetica)并要求其生成阿拉伯语文本,则该字体将不起作用

    显示的字符(实际像素信息)称为字形。与字符关联的代码(ASCII、unicode)是 称为代码点

    每当iText遇到一个代码点 所选字体中没有可用的字形信息,它将 只需跳过该字符。如果您使用了错误的字体,您将 从未见过任何字符

  • 第二,如果你使用阿拉伯语,考虑使用ITXEX7和PDFrAgScript。阿拉伯语(以及其他几种语言)具有所谓的opentype功能。或者,简单地说,他们需要的不仅仅是简单的“查找glyph,将glyph放在这里”。例如,阿拉伯语有复杂的规则来控制字形顺序和连字

    pdfCalligraph知道各种脚本的所有这些规则,并且无需您的任何努力即可应用它们


      谢谢大家,我可以通过将我的jpanel转换为图像来解决这个问题:

              BufferedImage image = new BufferedImage(jPanel1.getWidth(),jPanel1.getHeight(), BufferedImage.TYPE_INT_RGB);
          Graphics2D g2 = image.createGraphics();
          jPanel1.paint(g2);
          try{
              ImageIO.write(image, "jpg", new File("test.jpg"));
          } catch (Exception e) {
              e.printStackTrace();
      

      }谢谢大家,我可以通过将我的jpanel转换为图像来解决这个问题:

              BufferedImage image = new BufferedImage(jPanel1.getWidth(),jPanel1.getHeight(), BufferedImage.TYPE_INT_RGB);
          Graphics2D g2 = image.createGraphics();
          jPanel1.paint(g2);
          try{
              ImageIO.write(image, "jpg", new File("test.jpg"));
          } catch (Exception e) {
              e.printStackTrace();
      

      }

      字体是否为unicode?如果使用
      绘制
      而不是
      打印
      ,会发生什么情况?它不起作用:结果相同!:jLabel1.setFont(新字体(“SimSun”,Font.PLAIN,12));油漆:它不起作用:同样的结果!字体是否为unicode?如果使用
      paint
      而不是
      print
      ,会发生什么情况?它不起作用:结果相同!:jLabel1.setFont(新字体(“SimSun”,Font.PLAIN,12));油漆:它不起作用:同样的结果!请注意,
      PdfGraphics2D
      在iText 7中不再可用。请举例说明iText 7(面板到pdf)?请注意,
      PdfGraphics2D
      在iText 7中不再可用。请举例说明iText 7(面板到pdf)?