[java] labels printen met java resulteert in te korte labels

Pagina: 1
Acties:

Anoniem: 64539

Topicstarter
Hallo mensen,

Ik ben momenteel bezig met een apllicatie die een serie nummer uit een lezertje moet halen en dit dan in een plaatje moet verwerken.
Het plaatje zal daarna worden geprint met een DYMO labelmanager.
Ik gebruik linten van 12 mm breed.

Ik heb een klasse geschreven die Printable implementeerd en kan er ook succesvol mee printen
alleen is de label die geprint wordt te kort... ik moet 11 cm printen en de label DYMO stopt met printen op 9 cm

Ik heb allerlei dingen geprobeert om de paper size aan te passen maar zonder enig resultaat.
Ik weet dat de printer het aan kan want ik heb via een ander programma (glabels) hetzelfde plaatje geprint op de DYMO en dan komt er wel netje 11 cm lint uit.

Ik heb Glabels en mijn applicatie ook naar een pdf printer gestuurd en dan is te zien dat de uitkomt ook zeer anders is.
(mijn applicatie lijkt de PDF in "letter" formaat te printen.

Hier beide PDF-jes om het verschil te zien:
de door Glabels geproduceerde PDF
de door mijn applicatie geproduceerde PDF


Hieronder staat de code.
Gebruik ik misschien de verkeerde klasse om dit probleem op te lossen?
of is het misschien helemaal niet mogelijk met java?

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package ttyTest;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

import javax.print.PrintService;

public class KpPrintSticker implements Printable  {
    private Image kpSticker=null;
    private static final String printerName="PDF";//"DYMO";
    
    private final double widthPaper =  1.2*(72/2.54);//72pixels per inch 
    private final double heightPaper =  11*(72/2.54);

    public KpPrintSticker(Image sticker){
        kpSticker=sticker;
    }
    
    public void printSticker(boolean usePrintMenu){
        boolean printerSelected=false;
        PrinterJob job = PrinterJob.getPrinterJob();
        
        if(usePrintMenu){
            if (job.printDialog()) {
                printerSelected=true;
            }
        }else{
            PrintService[] printService = PrinterJob.lookupPrintServices();
            for (int i = 0; i < printService.length; i++) {
              //System.out.println(printService[i].getName());

              if (printService[i].getName().startsWith(printerName)) {  //.startsWith("DYMO")
                  try {
                    job.setPrintService(printService[i]);
                } catch (PrinterException e) {
                    e.printStackTrace();
                }
                  printerSelected=true;
                  break ;
              }
            }       
            
        }
        if(!printerSelected)return;
        
        PageFormat pageFormat = job.defaultPage();
        Paper paper = new Paper();
        paper.setSize(widthPaper, heightPaper);
        paper.setImageableArea(0, 0, widthPaper, heightPaper);
        pageFormat.setPaper(paper);
        pageFormat.setOrientation(PageFormat.LANDSCAPE);

        try {
            //job.pageDialog(pageFormat);
            job.setJobName("Sirius sticker");
            job.setPrintable(this,pageFormat);
            job.print();
        } catch (PrinterException ex) {
            ex.printStackTrace();
        }
    }

    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {     
        System.out.println("imageable x "+pf.getImageableX()+" y "+pf.getImageableY()+ " width "+pf.getImageableWidth()+" height "+pf.getImageableHeight());

        if(page >0)return NO_SUCH_PAGE;
        g.setClip(0, 0,kpSticker.getWidth(null), kpSticker.getHeight(null));

        // Now we perform our rendering 
        g.drawImage(kpSticker,0,0,null);

        // tell the caller that this page is part of the printed document 
        return PAGE_EXISTS;
    }
}

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Ik was hier nog niet uit, maar misschien heb je er wat aan: [java] afdrukken op afwijkend (tov ISO) formaat (labels)

De dichtstbijzijnde standaard papiergrootte wordt opgezocht, je kunt proberen om deze in te stellen op een formaat waarbij je hele label iig naar de printer wordt gestuurd. (A5 formaat ofzo). (Is niet de netste oplossing, maar ik heb nog geen betere, op dit moment gebruik ik zelf C# om de labels af te drukken, maar dat is ook niet de oplossing die mijn voorkeur heeft).

Anoniem: 64539

Topicstarter
Ik heb die tutorial van die duitser gevolgt, en dit lijkt te werken.

Ik ga zo de label printer weer even ophalen (deze was alweer van mn bureau gejat :D) en dan test ik het even
Maar de gegenereerde PDF is al zeer veelbelovend.

Zie de pdf

Edit:
Jup alles wordt nu netjes geprint op de DYMO! 8) :) :)

Ter lering ende vermaek hierbij de code, opdat google deze mag indexeren

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package ttyTest;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.print.PrintService;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.MediaSize;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.OrientationRequested;

public class KpPrintSticker implements Printable  {
    private Image kpSticker=null;
    private static final String printerName="DYMO";//"PDF";

    private static class CustomLabel extends MediaSizeName { 
        private static final long serialVersionUID = 1L;
        static CustomLabel KPLABEL =new CustomLabel(100);
        public CustomLabel(int id) { 
            super(id); 
        } 
    }
    
    public KpPrintSticker(Image sticker){
        kpSticker=sticker;
    }
    
    public void printSticker(boolean usePrintMenu){
        boolean printerSelected=false;
        PrinterJob job = PrinterJob.getPrinterJob();

        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        aset.add(OrientationRequested.LANDSCAPE);
        
        if(usePrintMenu){
            if (job.printDialog(aset)) {
                printerSelected=true;
            }
        }else{
            PrintService[] printService = PrinterJob.lookupPrintServices();
            for (int i = 0; i < printService.length; i++) {
              //System.out.println(printService[i].getName());

              if (printService[i].getName().startsWith(printerName)) {
                  try {
                    job.setPrintService(printService[i]);
                } catch (PrinterException e) {
                    e.printStackTrace();
                }
                  printerSelected=true;
                  break ;
              }
            }       
            
        }
        if(!printerSelected)return;
        
        MediaSize ms = new MediaSize(12, 96, MediaSize.MM, CustomLabel.KPLABEL);
        aset.add(CustomLabel.KPLABEL);
        aset.add(new MediaPrintableArea(2,2,12,96,MediaPrintableArea.MM));
        
        try {
            job.setJobName("Sirius sticker");
            job.setPrintable(this);
            job.print(aset);
        } catch (PrinterException ex) {
            ex.printStackTrace();
        }
    }

    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {     
        System.out.println("imageable x "+pf.getImageableX()+" y "+pf.getImageableY()+ " width "+pf.getImageableWidth()+" height "+pf.getImageableHeight());

        if(page >0)return NO_SUCH_PAGE;
        g.setClip(4, 4,kpSticker.getWidth(null), kpSticker.getHeight(null));

        // Now we perform our rendering 
        g.drawImage(kpSticker,0,0,null);

        // tell the caller that this page is part of the printed document 
        return PAGE_EXISTS;
    }
}

[ Voor 83% gewijzigd door Anoniem: 64539 op 26-08-2010 15:42 ]