如何在打印机中打印带有图像作为徽标的帐单,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?
我想做的是在左上角打印一个带有标志的账单
我可以这样打印图像:
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?