仅供参考,
在 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?