【问题标题】:How to Print a bill in the printer with an image as logo, java如何在打印机中打印带有图像作为徽标的账单,java
【发布时间】:2015-04-02 01:47:36
【问题描述】:

我要做的是打印一张左上角带有徽标的账单

我可以这样打印图像:

public class PrintLogo {

    public static void main(String args[]) throws Exception {

        PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
        pras.add(new Copies(0));


        PrintService pss = PrintServiceLookup.lookupDefaultPrintService();

        System.out.println("Printing to " + pss);

        DocPrintJob job = pss.createPrintJob();

        FileInputStream fin = new FileInputStream("D:\\logo.gif");
        Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.GIF, null);

        job.print(doc, pras);

        fin.close();
    }
}


为了打印我正在使用“PrinterJob”的账单

我找不到打印带有徽标的账单的方法

所以请帮忙:)

【问题讨论】:

  • 对于exampleexample,您需要缩放图像以适应页面大小,

标签: java printing


【解决方案1】:

仅供参考, 在 java 中打印时我也遇到了类似的问题。

我发现了以下方法

1) 你可以创建一个 html 文件,并在打印机上渲染它 因为它使用

在浏览器上呈现
DocFlavor flavor = DocFlavor.STRING.TEXT_HTML; 

看到这个Printing in java

2) 您可以创建包含 LOGO 和计费信息的图像文件 作为一个单一的图像,并将其发送到打印机。我正在使用这个 方法。

方法如下

public static void createImageFromText(String text, String filename) {

        BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
        int width = 0;
        int height = 0;
        String[] lines = StringUtils.split(text, System.getProperty("line.separator"));
        Graphics2D g2d = img.createGraphics();
        Font font = new Font("Arial", Font.PLAIN, 48);
        g2d.setFont(font);
        FontMetrics fm = g2d.getFontMetrics();
        for (String line : lines) {
            width = Math.max(fm.stringWidth(line), width);
            height += fm.getHeight();
        }
        g2d.dispose();
        width += 100;
        height += 100;

        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);
        int y = 100;
        for (String line : lines) {
            g2d.drawString(line, 0, y += fm.getAscent());
        }
        g2d.dispose();
        try {
            ImageIO.write(img, "png", new File(filename));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

3) 搜索您的打印机制造商提供的任何 API 以直接与之通信 java中的打印机。如果是 Star Printer,他们会发布 Java、C、C++ API

4) 这可能很奇怪。您还可以在任何 Swing 组件上发送内容 到打印机使用它的图形方法。看这个 How can I print a single JPanel's contents?

【讨论】:

  • 我想我会按照你的方法,如果可以的话,请告诉我生成带有徽标作为图像的账单信息的代码:)
  • 好的。将分享我的代码。只需将其包含在您的课程中并将其计费信息(多行)作为单个字符串参数传递即可。仅供参考,我也在使用 codehause MVEL 模板引擎,从对象生成实际文本。如果你愿意,你可以使用或忽略它没问题。通过改进作为新答案来共享代码。请参考。
  • 仅供参考,您可以将收据格式保持为文本模板,并通过使用 codehaus MVEL 传递 java 对象将其转换为实际的计费信息,然后最后将结果字符串传递给我共享的方法。将创建 PNG 收据。
  • 您的代码,将文本创建为图像,但是,我想将图像作为徽标添加到文本中,并制作所有新图像(图像+文本)以使用打印机打印: )
  • 假设您有一个徽标图像和计费模板作为字符串。步骤,您将包含多行的字符串模板作为参数传递给上述函数。在使用 drawString 打印/添加所有线条之前,为什么不尝试自己添加徽标图像?使用 drawImage(Image, x,y) 在左上角或您想要的任何位置打印徽标。请参阅此参考:docs.oracle.com/javase/tutorial/2d/images/drawimage.html
猜你喜欢
  • 1970-01-01
  • 2011-02-23
  • 2014-03-25
  • 2013-02-25
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多