gpt4 book ai didi

java - 在Brother QL标签打印机上使用自定义java.awt.print.Paper

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

我的Brother QL-720NW标签打印机和Java出现问题。正如我通过this comment弄清楚的那样,使用java.awt.print.Paper不起作用。提供的解决方法不完整,我对java打印还是比较陌生。

代码变通办法中缺少一部分。


可打印p = ...; //创建可打印对象


现在,我尝试创建一个可打印的对象,我的代码如下所示:

    public static void main(String[] args) throws FileNotFoundException{

// Lookup printer by name
PrintService[] foundPrinters = PrintServiceLookup.lookupPrintServices(null, new HashAttributeSet(new PrinterName("Brother QL-720NW", null)));
PrintService printer = foundPrinters[0];

// Lookup custom paper by name
MediaSizeName paper = null;
for (Media m : (Media[])printer.getSupportedAttributeValues(Media.class, null, null))
{
if (m instanceof MediaSizeName)
{
MediaSizeName media = ((MediaSizeName)m);
if ("Barcode".equals(media.toString())) paper = media;
}
}

// Create a new printable object
InputStream input = new FileInputStream("C:/Temp/Barcodes/test.png");
Doc doc = new SimpleDoc(input, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);

// Set custom paper as request attribute
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
attrs.add(paper);

// Create a new print job and print it
DocPrintJob job = printer.createPrintJob();
try
{
job.print(doc, attrs);
}
catch (PrintException ex)
{
ex.printStackTrace();
}

}


当我尝试运行代码时,出现错误:


线程“主”中的异常java.lang.IllegalArgumentException:数据不是声明的类型


这似乎与此行有关:

Doc doc = new SimpleDoc(input, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);

搜索stackoverflow使我进入 this comment。尝试用 DocFlavor.SERVICE_FORMATTED.PRINTABLE更改 DocFlavor.INPUT_STREAM.AUTOSENSE后,出现以下错误:


线程“主”中的异常java.lang.NullPointerException


似乎与 attrs.add(paper);有关。

我已经没有足够的想法下一步该怎么做,并且我对此事的知识有限。

你能帮我吗? :)

编辑

我根据Arvind Kumar Avinash的建议更新了代码,但仍然收到NullPointerException错误。
我的代码现在看起来像这样:

    public static void main(String[] args) throws FileNotFoundException{

// Lookup printer by name
PrintService[] foundPrinters = PrintServiceLookup.lookupPrintServices(null, new HashAttributeSet(new PrinterName("Brother QL-720NW", null)));
PrintService printer = foundPrinters[0];

// Lookup custom paper by namezusammenhang
MediaSizeName paper = null;
if(printer != null) {
for (Media m : (Media[])printer.getSupportedAttributeValues(Media.class, null, null)) {
if (m instanceof MediaSizeName) {
MediaSizeName media = ((MediaSizeName)m);
if ( media!=null && "Barcode".equals(media.toString()))
paper = media;
}
}
}

// Create a new printable object
InputStream input = new FileInputStream("C:/Temp/Barcodes/test.png");
Doc doc = new SimpleDoc(input, DocFlavor.INPUT_STREAM.PNG, null);

// Set custom paper as request attribute
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
attrs.add(paper);

// Create a new print job and print it
DocPrintJob job = null;

if (printer != null){
job = printer.createPrintJob();
try{
if(job != null){
job.print(doc, attrs);
}

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

}


错误/控制台输出如下所示:

线程“主”中的异常java.lang.NullPointerException
在java.desktop / javax.print.attribute.HashAttributeSet.add(HashAttributeSet.java:275)
在easypackaging.TEST.main(TEST.java:45)

最佳答案

以下代码中可能存在NullPointerException

DocPrintJob job = printer.createPrintJob();
try {
job.print(doc, attrs);
}


因为如果 printer.createPrintJob()NullPointerExceptionprinter可能会抛出 null。同样,如果 jobnull,则将得到 NullPointerException。因此,您应将其编写如下:

DocPrintJob job = null;

if (printer != null) {
job = printer.createPrintJob();
try {
if (job != null) {
job.print(doc, attrs);
}
}
}


以下代码是存在这种可能性的另一个地方:

for (Media m : (Media[])printer.getSupportedAttributeValues(Media.class, null, null)) {
if (m instanceof MediaSizeName) {
MediaSizeName media = ((MediaSizeName)m);
if ("Barcode".equals(media.toString())) paper = media;
}
}


您应该按如下方式重写它:

if(printer != null) {
for (Media m : (Media[])printer.getSupportedAttributeValues(Media.class, null, null)) {
if (m instanceof MediaSizeName) {
MediaSizeName media = ((MediaSizeName)m);
if ( media!=null && "Barcode".equals(media.toString()))
paper = media;
}
}
}


如果仍然出现错误,请共享完整的堆栈跟踪。

建议您通过 https://docs.oracle.com/javase/9/docs/api/javax/print/PrintService.html再次检查程序。



更新:以下更新基于更新的问题



我可以使用以下代码复制该问题:

import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;

public class StringSearch {
public static void main(String[] args) {
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
attrs.add(null);
}
}


执行它时,它将显示以下错误:

Exception in thread "main" java.lang.NullPointerException
at java.desktop/javax.print.attribute.HashAttributeSet.add(HashAttributeSet.java:275)
at StringSearch.main(StringSearch.java:7)


因此,获得 NullPointerException的原因是因为语句 papernullattrs.add(paper);

希望对您有所帮助。

只是为了确认它,例如以下代码不会显示任何错误:

import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Sides;

public class StringSearch {
public static void main(String[] args) {
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
attrs.add(Sides.TWO_SIDED_SHORT_EDGE);
}
}

关于java - 在Brother QL标签打印机上使用自定义java.awt.print.Paper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59413326/

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