如何在打印机中打印带有图像作为徽标的帐单,java

How to Print a bill in the printer with an image as logo, java

我想做的是在左上角打印一个带有标志的账单

我可以这样打印图像:

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"

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

所以请帮忙:)

仅供参考, 我在 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 组件上发送内容 到使用其图形的打印机 method.see 这个 How can I print a single JPanel's contents?