有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

xp演示如何将映像返回到java的<xp:image>url而不保存到磁盘

java方面的工作很少,有必要向xpages添加验证码。 java中有一个代码:

public static void getImage() {
                    String text = "Hello";
                    BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
                    Graphics2D g2d = img.createGraphics();
                    Font font = new Font("Arial", Font.PLAIN, 48);
                    g2d.setFont(font);
                    FontMetrics fm = g2d.getFontMetrics();
                    int width = fm.stringWidth(text);
                    int height = fm.getHeight();
                    g2d.dispose();

                    img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
                    g2d = img.createGraphics();
                    g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
                    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                    g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
                    g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
                    g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
                    g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                    g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
                    g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
                    g2d.setFont(font);
                    fm = g2d.getFontMetrics();
                    g2d.setColor(Color.BLACK);
                    g2d.drawString(text, 0, fm.getAscent());
                    g2d.dispose();
                    try {
                        ImageIO.write(img, "png", new File("c:\\Text.png"));
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }

应该对插入到<xp:image>中的图像执行什么操作


共 (1) 个答案

  1. # 1 楼答案

    您可以创建一个XAgent,它调用getImage()方法将URL返回到xp:image

    下面是一个XAgent的示例:

    <?xml version="1.0" encoding="UTF-8"?>
    <xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom" rendered="false" viewState="nostate">
    
        <xp:this.beforeRenderResponse><![CDATA[#{javascript:
            com.company.getImage();
        }]]></xp:this.beforeRenderResponse>
    
    </xp:view>
    

    您需要修改getImage()方法以流式返回图像。下面是一个示例(未测试):

    public static void getImage() {
        try {
            HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
            ServletOutputStream responseStream = response.getOutputStream();
    
            // Add your existing code to create your image here
    
            // Write the image to the responseStream
            ImageIO.write(img, "png", responseStream);
    
            FacesContext.getCurrentInstance().responseComplete();
            responseStream.close();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
    

    然后在xp:image中使用XAgent,如下所示(假设它被称为image.xsp):

    <xp:image>
        <xp:this.url><![CDATA[#{javascript:"/image.xsp"}]]></xp:this.url>
    </xp:image>