gpt4 book ai didi

java - 条形码 png 打印在尺寸为 40 毫米 x 15 毫米的标签上的图像在打印且未扫描时会缩小至 20 毫米 x 10 毫米

转载 作者:行者123 更新时间:2023-12-01 16:55:40 25 4
gpt4 key购买 nike

我遇到这个问题,我正在使用 code128 生成条形码并将其保存在 PNG 文件中。当将相同的 PNG 文件提供给具有所需文档属性的打印机作业以在所需尺寸的标签上打印时,尺寸会缩小并且不会被扫描。

提供的实际打印尺寸 - 40 毫米 x 15 毫米。标签上打印的尺寸 - 20mm x 10mm

我将此属性添加到 PrintRequestAttributeSet -pras.add(MediaSize.findMedia(40, 15, Size2DSyntax.MM));

但是效果并不准确,我尝试在那里调整x和y参数值,打印的尺寸仍然在25mm x 10mm以内。

任何打印所需尺寸条形码的输入都将受到高度赞赏。我在下面给出了完整的代码详细信息。

(PS:我正在使用“Honeywell PC42t Plus”热敏打印机进行打印,目前我的标签尺寸为700mm x 280mm,我正在等待收到40mm x 15mm尺寸的实际标签。所以这是为了测试,一旦收到实际标签,我可以利用整个标签空间打印实际的 40mm x 15mm 条形码)

public class One_TestMyBarcode {

private static final String MIME_TYPE = "image/x-png";
private static final String DELIMTER = "-";
static String image_name = "NewBarcode_One.png";

public static void main(String[] args) {

FileInputStream textStream = null;
int lastSeqNo = 001;
String roCode= "ERO";

AtomicInteger seqNo = new AtomicInteger(lastSeqNo);
Code128Bean code128 = new Code128Bean();
code128.setHeight(15f);
//code128.setBarHeight(40f);
//code128.setModuleWidth(0.3);
code128.setModuleWidth(0.2);
code128.setQuietZone(10);
code128.doQuietZone(true);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
BitmapCanvasProvider canvas = new BitmapCanvasProvider(baos, MIME_TYPE, 300, BufferedImage.TYPE_BYTE_BINARY,
false, 0);

StringBuffer codeData = new StringBuffer();
codeData.append(roCode);
codeData.append(DELIMTER);

int currentSeqNo = seqNo.getAndIncrement();
String seq = String.format("%07d", currentSeqNo);
codeData.append(seq);
codeData.append(DELIMTER);
Calendar current = Calendar.getInstance();
String year = Integer.toString(current.get(Calendar.YEAR)).substring(2);
codeData.append(year);

//logger.debug("barcode dimension is ");
code128.calcDimensions(codeData.toString());
code128.generateBarcode(canvas, codeData.toString());

try {
canvas.finish();
} catch (IOException e) {
throw new RuntimeException(e);

}

FileOutputStream fos = null;
try {
//fos = new FileOutputStream("C:\\Users\\Vinayak\\Desktop\\barcode\\" +image_name);
fos = new FileOutputStream(image_name);
fos.write(baos.toByteArray());
fos.flush();
fos.close();
//textStream = new FileInputStream("C:\\Users\\Vinayak\\Desktop\\barcode\\" +image_name);
textStream = new FileInputStream(image_name);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}

DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;

// Position the default print service
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();

// Create a print job
DocPrintJob job = printService.createPrintJob();

// Set the print properties
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();

//printed a very small size (20mm x 10mm) and does not scan
pras.add(MediaSize.findMedia(40, 15, Size2DSyntax.MM));


//DOESN'T Scan Either
//pras.add(OrientationRequested.LANDSCAPE);
//pras.add(OrientationRequested.PORTRAIT);
//pras.add(MediaSizeName.ISO_A10);

//Doesn't print at all
//pras.add(new MediaPrintableArea(0, 0, 40, 15, MediaPrintableArea.MM));


pras.add(new Copies(1));
DocAttributeSet das = new HashDocAttributeSet();

// Specify print content
Doc doc = new SimpleDoc(textStream, flavor, das);

// Do not display the print dialog, print directly
try {
System.err.println("Loop - print");
job.print(doc, pras); // Make specific print operations for each page

} catch (PrintException pe) {
pe.printStackTrace();
}

}

}

最佳答案

通过使用打印机语言而不是像使用通用打印机一样使用条形码打印机,您可以使程序更短、更快,并确保它始终打印清晰条形码。

import javax.print.*;

public class PrintUsingZPL {
public static void main(String[] args) {
StringBuilder codeData = new StringBuilder();
codeData.append("Stackoverflow"); // example

String printCommand = "^XA^LH0,0^FO50,50^BCN,100,Y,N,N^FD"+
codeData.toString()+
"^FS^XZ";
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
try {
DocPrintJob job = printService.createPrintJob();
Doc doc = new SimpleDoc(printCommand.getBytes(), DocFlavor.BYTE_ARRAY.AUTOSENSE, null);
job.print(doc, null);
}
catch(PrintException e) { /* error handling goes here */ }
}
}

关于java - 条形码 png 打印在尺寸为 40 毫米 x 15 毫米的标签上的图像在打印且未扫描时会缩小至 20 毫米 x 10 毫米,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61596185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com