类1:
package com.yu.gogo; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; import javax.imageio.ImageIO; import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintException; import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.print.SimpleDoc; import javax.print.attribute.DocAttributeSet; import javax.print.attribute.HashDocAttributeSet; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.Copies; import javax.print.attribute.standard.MediaPrintableArea; import javax.print.attribute.standard.OrientationRequested; import javax.print.attribute.standard.PrintQuality; import javax.swing.ImageIcon; import org.krysalis.barcode4j.impl.code128.Code128Bean; import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider; import org.krysalis.barcode4j.tools.UnitConv; public class MainCls { /** * 生成文件 * * @param msg * @param path * @return */ public static File generateFile(String msg, String path) { File file = new File(path); try { generate(msg, new FileOutputStream(file)); } catch (FileNotFoundException e) { throw new RuntimeException(e); } return file; } /** * 生成字节 * * @param msg * @return */ public static byte[] generate(String msg) { ByteArrayOutputStream ous = new ByteArrayOutputStream(); generate(msg, ous); return ous.toByteArray(); } public static void generate(String msg, OutputStream ous) { Code128Bean bean = new Code128Bean(); // 精细度 final int dpi = 150; // module宽度 final double moduleWidth = UnitConv.in2mm(1.0f / dpi); // 配置对象 bean.setModuleWidth(moduleWidth); bean.setModuleWidth(0.35d); //设置条间距 bean.setQuietZone(2); //水平空白 bean.setVerticalQuietZone(1); //垂直空白 bean.setFontSize(3); bean.doQuietZone(false); String format = "image/png"; try { // 输出到流 BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0); // 生成条形码 bean.generateBarcode(canvas, msg); // 结束绘制 canvas.finish(); } catch (IOException e) { throw new RuntimeException(e); } } public static void setPrint (){ PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); DocFlavor flavor = DocFlavor.BYTE_ARRAY.PNG; PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras); for(int i=0;i<printService.length;i++){ String printName = printService[i].getName(); System.out.println(printName); } PrintService PS = PrintServiceLookup.lookupDefaultPrintService(); String printName = PS.getName(); System.out.println("当前默认打印机为:"+printName); System.out.println("如果不争取请在控制面板设置默认打印机"); } // color #2395439 public static Color getColor(String color) { if (color.charAt(0) == '#') { color = color.substring(1); } if (color.length() != 6) { return null; } try { int r = Integer.parseInt(color.substring(0, 2), 16); int g = Integer.parseInt(color.substring(2, 4), 16); int b = Integer.parseInt(color.substring(4), 16); return new Color(r, g, b); } catch (NumberFormatException nfe) { return null; } } public static byte[] drawTextInImg(byte[] baseByte, FontText text) { byte[] retByte = null; ImageIcon imgIcon = new ImageIcon(baseByte); Image img = imgIcon.getImage(); int width = img.getWidth(null); int height = img.getHeight(null); BufferedImage bimage = new BufferedImage(width+width/3, height+height/3,BufferedImage.TYPE_INT_RGB); Graphics2D g = bimage.createGraphics(); g.setColor(getColor(text.getWm_text_color())); g.setBackground(Color.WHITE); g.clearRect(0, 0, width+width/3, height+height/3); g.drawImage(img, 30, 30, null); Font font = null; if (text.getWm_text_font() != null && text.getWm_text_size() != null) { font = new Font(text.getWm_text_font(), Font.BOLD, text.getWm_text_size()); } else { font = new Font(null, Font.BOLD, 15); } g.setFont(font); FontMetrics metrics = new FontMetrics(font){private static final long serialVersionUID = 1L;}; Rectangle2D bounds = metrics.getStringBounds(text.getText(), null); //int textWidth = (int) bounds.getWidth(); int textHeight = (int) bounds.getHeight(); int left = 0; int top = textHeight; g.drawString(text.getText(), left, top); g.dispose(); try { ByteArrayOutputStream out = new ByteArrayOutputStream(); ImageIO.write(bimage, "PNG", out); retByte = out.toByteArray(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return retByte; } public static void printPng (byte[] pbgByte){ try { DocFlavor dof = DocFlavor.INPUT_STREAM.PNG; PrintService ps = PrintServiceLookup.lookupDefaultPrintService(); PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); pras.add(OrientationRequested.PORTRAIT); pras.add(new Copies(1)); pras.add(PrintQuality.HIGH); DocAttributeSet das = new HashDocAttributeSet(); // 设置打印纸张的大小(以毫米为单位) das.add(new MediaPrintableArea(0, 0, 210, 296, MediaPrintableArea.MM)); ByteArrayInputStream bin = new ByteArrayInputStream(pbgByte); Doc doc = new SimpleDoc(bin, dof, das); DocPrintJob job = ps.createPrintJob(); job.print(doc, pras); bin.close(); } catch (IOException ie) { ie.printStackTrace(); } catch (PrintException pe) { pe.printStackTrace(); } } public static void main(String[] args) throws IOException { String msg = ""; System.out.println("输入0查看默认打印机"+",输入1-9打印"); Properties pps = new Properties(); pps.load(new FileInputStream("C:/base.properties")); while (true){ int r = System.in.read(); char s = (char)r; if (s == '0'){ setPrint (); } if (s == '1' || s == '2' || s == '3' || s == '4' || s == '5' || s == '6' || s == '7' || s == '8' || s == '9'){ msg = pps.getProperty("code"+s); String msgx = " "; if ("true".equals(pps.getProperty("showDate"))){ msgx += new SimpleDateFormat("yyyy/MM/dd").format(new Date()); } if ("true".equals(pps.getProperty("showNum"))){ int xNum = Integer.valueOf(pps.getProperty("num")); msgx += " NO."+xNum; OutputStream out = new FileOutputStream("C:/base.properties"); pps.setProperty("num", String.valueOf(xNum+1)); pps.store(out, "Update num name"); } byte[] pngByte = generate(msg); byte[] npngByte = drawTextInImg(pngByte, new FontText(msgx, 1, "#000000", 20, "宋体")); printPng(npngByte); } } } }
类2:
package com.yu.gogo; public class FontText { private String text; private int wm_text_pos; private String wm_text_color; private Integer wm_text_size; private String wm_text_font;//字体 “黑体,Arial” public String getText() { return text; } public void setText(String text) { this.text = text; } public int getWm_text_pos() { return wm_text_pos; } public void setWm_text_pos(int wm_text_pos) { this.wm_text_pos = wm_text_pos; } public String getWm_text_color() { return wm_text_color; } public void setWm_text_color(String wm_text_color) { this.wm_text_color = wm_text_color; } public Integer getWm_text_size() { return wm_text_size; } public void setWm_text_size(Integer wm_text_size) { this.wm_text_size = wm_text_size; } public String getWm_text_font() { return wm_text_font; } public void setWm_text_font(String wm_text_font) { this.wm_text_font = wm_text_font; } public FontText(String text, int wm_text_pos, String wm_text_color, Integer wm_text_size, String wm_text_font) { super(); this.text = text; this.wm_text_pos = wm_text_pos; this.wm_text_color = wm_text_color; this.wm_text_size = wm_text_size; this.wm_text_font = wm_text_font; } public FontText(){} }
相关推荐
**barcode4j添加文字** `barcode4j` 是一个开源的Java库,它允许开发者生成条形码和二维码。这个库基于Apache 2.0许可证,由Krysalis项目开发,现在由The Apache Software Foundation维护。在描述中提到的案例,...
1. 引入库:在项目中添加所需的BarCode生成库,如果是NuGet包,可以通过右键点击项目,选择“管理NuGet程序包”,搜索并安装对应库。 2. 创建BarCode控件:在Aspx页面上创建一个WebControl,如Image控件,用于显示...
2. **控件集成**:在Windows Forms中, Barcode Control 9.0作为一个控件添加到工具箱中,可以通过拖放方式直接放到窗体上。然后,可以通过属性设置调整条形码的样式、尺寸、颜色以及包含的数据。 3. **数据绑定**...
同时,考虑到用户界面的友好性,你可能还需要提供预览和设置功能,如调整条形码尺寸、添加文字标签等。 最后,关于文件名`vb.net条码生成器BarCode39`,这可能是源代码文件或示例项目的名称。如果你已经有一个名为`...
6. **自定义样式**:为了满足设计需求,开发者可能希望自定义条形码的样式,比如添加文字标签、调整字体或设置边框等。 7. **性能优化**:对于大量条形码的生成,类库可能包含优化措施,如缓存预生成的条形码图像,...
QRCoder则是一个专门用于生成二维码的C#库,提供了更多自定义选项,比如设置颜色、添加logo、在二维码底部显示文字等。 要实现描述中的功能,我们可以按照以下步骤操作: 1. **安装库**:使用NuGet包管理器或者...
- **高度可配置**:可以调整条形码的宽度、高度、颜色、字体样式,以及添加前缀和后缀文字。 - **高质量渲染**:生成的条形码清晰度高,扫描识别率优秀,支持打印和屏幕显示。 - **兼容性广**:不仅支持多种条形码...
1. 添加`barcode4j`库依赖到项目中,这通常通过Maven或Gradle实现。 2. 创建`BarcodeGenerator`实例,并指定条形码类型为`Code128`. 3. 设置条形码的值,可以通过`setMessage()`方法传递要编码的数据。 4. 配置条形...
"barcode加字"则意味着在条形码的基础上添加额外的文字信息,例如日期、序列号或者其他的标识符。这可以是条形码下方的文本,或者是嵌入到条形码图像中的微小字符。这样做可以提供额外的视觉确认,尤其是在条形码...
而二维码是二维的,能存储更多的数据,包括文字、网址、联系信息等。 二、 BarcodeScanner 源码解析 "BarcodeScanner"是一个基于Android平台的二维码扫描应用,其核心是ZXing(Zebra Crossing)库。ZXing是一个开源...
调整字体大小和行高,确保条形码清晰且不受文字或图像干扰。 - 校验码:某些条形码标准包含校验码以确保数据的准确性。在生成条形码时,确保字体能自动计算并添加校验码。 - 测试:在实际使用前,务必用条形码扫描器...
如果要在条形码下方输入代码文本,则可以稍后将其添加到此程序包的输出中。安装通过安装: composer require picqer/php-barcode-generator如果要生成PNG或JPG图像,则还需要在系统上安装GD库或Imagick。用法为
这可以通过在生成的图像上添加文字或者使用图像处理库(如JavaFX或Apache Batik)来实现。例如,可以先创建一个带有文字标签的背景图像,然后将条形码或二维码作为前景合并到该图像上。 总的来说,Java结合ZXing库...
1. 引入barcode4j.jar:将此jar文件添加到项目的类路径中,确保项目可以访问到barcode4j的相关类和方法。 2. 创建生成器实例:通过`org.krysalis.barcode4j.impl`包下的具体实现类创建条码或二维码生成器对象,例如...
ZPL是一种文本格式的编程语言,由一系列命令组成,这些命令能够指示Zebra打印机进行图形绘制、文字输出和条形码生成等操作。例如,`^BC`命令用于定义条形码类型,`^FT`和`^FS`分别用于设置条形码的起始位置和结束...
- 二维码(Quick Response Code)是一种二维条形码,能够存储比传统条形码更多的数据,包括文字、网址、联系信息等。 - 它由日本Denso Wave公司于1994年发明,通过黑白色像素矩阵编码信息,能够被各种设备快速读取...
覆盖功能是西铁城打印机的一个重要特性,它允许用户在基础标签上添加额外的文字或图像信息,从而增强标签的功能性和信息量。 **3.2 内存类型** 为了支持覆盖功能,打印机需要具备一定容量的内存来存储这些额外的...