3

PNG画像を吐き出すために、ラベルプリンター(具体的にはEPSON TM-T88V)を使用しようとしています。

画像のサイズ(72dpiで220x175)を印刷している場合を除いて、印刷することができますが、印刷された画像の上に空白の塊があり、これは紙の無駄だと思います。

紙の無駄を最小限に抑える方法について何かアイデアはありますか? 余白を最小限に抑えて画像だけを印刷してから、紙をカットしたいのです。

これが私のコードです

    AttributeSet aset = new HashAttributeSet();
    aset.add(new PrinterName(printerName, null));
    /* locate a print service that can handle the request */
    PrintService[] services = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.PNG, aset);

    if (services.length >= 1) {
        /* create a print job for the chosen service */
        DocPrintJob pj = services[0].createPrintJob();

        DocAttributeSet das = new HashDocAttributeSet();
        das.add(PrintQuality.HIGH);
        das.add(MediaSizeName.ISO_A7); // I know the problem is here somewhere. This Media size seems to work best currently

        try {
            /* 
            * Create a Doc object to hold the print data.
            */
            Doc doc = new SimpleDoc(imageByteIs, DocFlavor.INPUT_STREAM.PNG, das);

            /* print the doc as specified */
            pj.print(doc, null);

        } catch (PrintException e) { 
            System.err.println(e);
        }
    }
4

3 に答える 3

4

利用可能な用紙サイズは、次の方法で確認できます。

PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
Media[] res = (Media[]) printService.getSupportedAttributeValues(Media.class, null, null);
for (Media media : res) {
    if (media instanceof MediaSizeName) {
        MediaSizeName msn = (MediaSizeName) media;
        MediaSize ms = MediaSize.getMediaSizeForName(msn);
        float width = ms.getX(MediaSize.INCH);
        float height = ms.getY(MediaSize.INCH);
        System.out.println(media + ": width = " + width + "; height = " + height);
    }
}

用紙サイズに最も近い利用可能な MediaSizeName を見つけたら、それを MediaSizeName.ISO_A7 の代わりに追加します。

于 2013-04-22T20:56:34.777 に答える
0

MediaPrintableAreaを追加します:

das.add(new MediaPrintableArea(0.05, 0.05, 0.05, 0.05, MediaPrintableArea.INCH));
于 2012-06-08T22:06:12.383 に答える
0

これは、A4用紙に余白10mmで印刷するために使用する設定です。

int width = Math.round(MediaSize.ISO.A4.getX(MediaSize.MM));
int height = Math.round(MediaSize.ISO.A4.getY(MediaSize.MM));
das.add(new MediaPrintableArea(10, 10, width-20, height-20, MediaPrintableArea.MM));
于 2013-07-29T09:36:04.830 に答える