Java调用打印机,超出A4宽度的部分打印不出来?
发布网友
发布时间:2022-05-12 16:46
我来回答
共4个回答
热心网友
时间:2023-08-15 07:02
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
// 纵向打印
new MediaSize(80, 3276, Size2DSyntax.MM,MyMediaSizeName.MY_TICKET);
pras.add(OrientationRequested.PORTRAIT);
pras.add(MyMediaSizeName.MY_TICKET);
PrintService[] pss = PrintServiceLookup.lookupPrintServices(flavor,null);
if(pss.length==0)
{
throw new SimpleException("Printer Not Found");
}else{
for (PrintService pppp:pss
) {
if(pppp.getName().equals(printName)){
DocAttributeSet das = new HashDocAttributeSet();
// 设置打印纸张的大小(以毫米为单位)
das.add(new MediaPrintableArea(0, 0, 80, 3276, MediaPrintableArea.MM));
// 获取打印服务对象
DocPrintJob job = pppp.createPrintJob();
PrintableAllOrder printableAllOrder=new PrintableAllOrder(orderInfo);
Doc doc = new SimpleDoc(printableAllOrder,flavor,das);
//添加指定的打印机
try {
job.print(doc,pras);
} catch (PrintException e) {
e.printStackTrace();
}
return;
继承一下MediaSizeName
public class MyMediaSizeName extends MediaSizeName {
/**
* Constructs a new media attribute specified by name.
*
* @param value a value
*/
protected MyMediaSizeName(int value) {
super(value);
}
/**
* MY_TICKET size.
*/
public static final MyMediaSizeName MY_TICKET = new MyMediaSizeName(73);
private static final String[] myStringTable = {
"my_ticket"
};
private static final MyMediaSizeName[] myEnumValueTable = {
MY_TICKET
};
/**
* Returns the string table for class MediaSizeName.
*/
protected String[] getStringTable()
{
return (String[])myStringTable.clone();
}
/**
* Returns the enumeration value table for class MediaSizeName.
*/
protected EnumSyntax[] getEnumValueTable() {
return (EnumSyntax[])myEnumValueTable.clone();
}
}
这样就自定义了纸张。用系统内置的只能是符合的才好用
我找了好久,最后自己看了源码,发现它会先找打印机默认的纸张,
不想用打印机默认的就要有设置MediaSizeName,还要有对应的MediaSize,但直接设置MediaSize会报错。
热心网友
时间:2023-08-15 07:03
就不要用Java打印,实在要打印转成pdf,或者word文档之类的东西再调用它们的打印。java默认的打印只是玩玩的,不能识别打印的分辨率和纸张大小,除非自己native写驱动。否则不建议用java的自带大英。
热心网友
时间:2023-08-15 07:03
这种问题最好用打印控件实现,我用过一个叫“楚琳Web打印控件”的免费控件挺不错的,你可以上网搜索下载。
热心网友
时间:2023-08-15 07:04
打印机默认的是打印A4的纸张吧。
你有改动打钱参数吗?追问纸张的规格试过好几种,打印机是蓝天PR2E,驱动OKi5530SC,使用“美国标准Fanfold“的纸张还是打不出超过A4宽的部分,JDK1.4之前的PrinterJob和之后的PrintService也都试过还是不行
追答我对Java的打印了解,还没有你深入呢。
上网看了一下,也没找到解决办法。帮不了你了。
------------------------------------------------------------------------------------------------
总算找到这个贴了。
我在sun的官方下了一下打印的文档,它那里可以设置打印的纸张,我试过了,我改成A3的,确实可以多打出来一些内容。
你留个邮件。
或者你搜一下
Java™ Print Service API User Guide
JPS_PDF.pdf
这样的内容。我记不清下载地址了。