Java调用打印机,超出A4宽度的部分打印不出来?

 我来答
误区年华
2019-02-20
知道答主
回答量:16
采纳率:0%
帮助的人:2.4万
展开全部
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会报错。

daay1986
2011-12-27 · TA获得超过6018个赞
知道大有可为答主
回答量:2208
采纳率:0%
帮助的人:1476万
展开全部
就不要用Java打印,实在要打印转成pdf,或者word文档之类的东西再调用它们的打印。java默认的打印只是玩玩的,不能识别打印的分辨率和纸张大小,除非自己native写驱动。否则不建议用java的自带大英。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dong0738
2011-12-24 · 超过34用户采纳过TA的回答
知道答主
回答量:116
采纳率:0%
帮助的人:49.7万
展开全部
这种问题最好用打印控件实现,我用过一个叫“楚琳Web打印控件”的免费控件挺不错的,你可以上网搜索下载。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友845f74e61
2011-12-22 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1632万
展开全部
打印机默认的是打印A4的纸张吧。
你有改动打钱参数吗?
追问
纸张的规格试过好几种,打印机是蓝天PR2E,驱动OKi5530SC,使用“美国标准Fanfold“的纸张还是打不出超过A4宽的部分,JDK1.4之前的PrinterJob和之后的PrintService也都试过还是不行
追答
我对Java的打印了解,还没有你深入呢。
上网看了一下,也没找到解决办法。帮不了你了。

------------------------------------------------------------------------------------------------
总算找到这个贴了。
我在sun的官方下了一下打印的文档,它那里可以设置打印的纸张,我试过了,我改成A3的,确实可以多打出来一些内容。
你留个邮件。

或者你搜一下
Java™ Print Service API User Guide
JPS_PDF.pdf

这样的内容。我记不清下载地址了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式