Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [Java] ridimensionamento Barcode EAN13

    Caio ragazzi,

    devo stampare dei codici a barre EAN13 su un etichetta da 30mm x 25mm.

    Ho provato sia la libreria "barbecue" che quella "barcodelib", ma nel rimpicciolire il barcode anche con BufferImage mi esce tutto sgranato e non viene letto dal lettore .

    ecco il codice che ho usato

    codice:
    //BarcodeLib
     Linear barcode = new Linear();
                barcode.setType(Linear.EAN13);
                // barcode data to encode
                // should be 12 digits
                barcode.setData(ean.substring(0, 12));
    
    
                // unit of measure for X, Y, LeftMargin, RightMargin, TopMargin, BottomMargin
                barcode.setUOM(Linear.UOM_PIXEL);
                // barcode module width in pixel
                barcode.setX(0f);
                // barcode module height in pixel
                barcode.setY(50f);
    
    
                barcode.setLeftMargin(0f);
                barcode.setRightMargin(0f);
                barcode.setTopMargin(0f); 
                barcode.setBottomMargin(0f);
                // barcode image resolution in dpi
                barcode.setResolution(300);
    
    
                // disply human readable text under the barcode
                barcode.setShowText(true);
                // human reable text font style
                barcode.setTextFont(new Font("Arial", 0, 10));
                //  ANGLE_0, ANGLE_90, ANGLE_180, ANGLE_270
                barcode.setRotate(Linear.ANGLE_0);
    
    
                //barcode.renderBarcode("c://ean131.gif");
                try {
                    BufferedImage img = barcode.renderBarcode();
                    //  g.drawImage(img, 15, 30, 75,60, null);
                      g.drawImage(img,15,30,null);
                } catch (Exception e) {e.printStackTrace();}
    codice:
    //BARBECUE
        try {    
      barcode.setBarHeight(51);
            barcode.setBarWidth(1);
            barcode.setFont(new Font("Arial", Font.BOLD, 5));
            //barcode.setFont(new Font("Arial", Font.BOLD, 10));
            barcode.draw(g, 10, 35);    
            } catch (OutputException  e) {e.printStackTrace();} 
            catch (Exception e) {e.printStackTrace();}
             
            
            
        /*    problema testo e non legge il barcode
            barcode.setBarHeight(50);
            barcode.setBarWidth(1);
            barcode.setFont(new Font("Arial", Font.PLAIN, 5));
            
            try {
            //    System.out.println("barcode w "+barcode.getWidth()+" h "+barcode.getHeight());    
                g.drawImage(BarcodeImageHandler.getImage(barcode),15,30,barcode.getWidth()-40,barcode.getHeight(),Color.WHITE,null);
                //   226/3     180/3
            } catch (OutputException e) {e.printStackTrace();}
    Ultima modifica di fcorsa; 24-07-2018 a 10:46

  2. #2
    con i parametri :
    codice:
    barcode.setBarHeight(50);
    barcode.setBarWidth(1);
    il minimo ragiunto è 45mm , a me servirebbero 30mm

    potete aiutarmi
    grazie mille

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fcorsa Visualizza il messaggio
    Ho provato sia la libreria "barbecue" che quella "barcodelib", ma nel rimpicciolire il barcode anche con BufferImage mi esce tutto sgranato e non viene letto dal lettore .
    Non conosco nulla di quelle librerie, purtroppo. Ma la questione è: cosa (di chi è) quel g (sicuramente un Graphics/Graphics2D)?

    Se è il Graphics fornito dalla Printing API di Java, per default il mapping è: 1 unità equivale a 1/72 di pollice.

    E tu che densità di pixel vuoi avere?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Non conosco nulla di quelle librerie, purtroppo. Ma la questione è: cosa (di chi è) quel g (sicuramente un Graphics/Graphics2D)?

    Se è il Graphics fornito dalla Printing API di Java, per default il mapping è: 1 unità equivale a 1/72 di pollice.

    E tu che densità di pixel vuoi avere?

    Ciao andbin,

    si g è un Graphics2D

    codice:
    public int print(Graphics grap, PageFormat pageFormat, int pageIndex) {
    Graphics2D g = (Graphics2D) grap;
    se utilizzo la libreria barcodelib con 1/72 il barcode mi arriva a 40mm/45mm.
    con i seguenti parametri (unico che legge il lettore):

    codice:
    // barcode module width in pixel
    	        barcode.setX(1f);
    	        // barcode module height in pixel
    	        barcode.setY(50f);
                    try {
    				BufferedImage img = barcode.renderBarcode();
    				//  g.drawImage(img, 15, 30, 75,60, null);  mi rovina il barcode
    				  g.drawImage(img,15,30,null);
    		} catch (Exception e) {e.printStackTrace();}
    per arrivare a 30mm dovrei usare più o meno 1/85 giusto?

  5. #5
    andbit che libreria usi per i barcode?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fcorsa Visualizza il messaggio
    andbit che libreria usi per i barcode?
    Non ho mai gestito barcode da Java.

    Comunque la questione è sempre la "solita" quando si vogliono rapportare pixel a dimensioni fisiche. Se hai un'area fisica es. 30x25 millimetri, quanti pixel vuoi spalmarci? Se ci spalmi 30x25 pixel hai una densità bassissima che è una schifezza, perché 1 pixel è grande 1 millimetro. Se ce ne spalmi 300x250 pixel hai una densita maggiore (con pochi calcoli si tratta qui di 254 dpi che è abbastanza buona).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Non ho mai gestito barcode da Java.

    Comunque la questione è sempre la "solita" quando si vogliono rapportare pixel a dimensioni fisiche. Se hai un'area fisica es. 30x25 millimetri, quanti pixel vuoi spalmarci? Se ci spalmi 30x25 pixel hai una densità bassissima che è una schifezza, perché 1 pixel è grande 1 millimetro. Se ce ne spalmi 300x250 pixel hai una densita maggiore (con pochi calcoli si tratta qui di 254 dpi che è abbastanza buona).

    Grazie andbin per la spiegazione.
    il problema è che non so come settare i dpi nella mia area di stampa.

    se utilizzo barcode.setResolution(600); della libreria non mi cambia nulla.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fcorsa Visualizza il messaggio
    Grazie andbin per la spiegazione.
    il problema è che non so come settare i dpi nella mia area di stampa.
    Come ho detto prima, nel Graphics con la Printing API di Java per default 1 unità = 1/72 pollice.
    Si può cambiare con uno scalamento esplicito della matrice di trasformazione del Graphics oppure usando il drawImage che riceve width/height.

    Fai così, supponiamo di voler avere 200 dpi (che è buona come densità). Per occupare 30x25mm la immagine dovrà essere quindi di 236x197 pixel. Poi la stampi con il drawImage indicando la dimensione di 85x71 che (attenzione!) sono le unità in 1/72 pollice.

    g.drawImage(img, x, y, 85, 71, null); // x/y che vuoi
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Come ho detto prima, nel Graphics con la Printing API di Java per default 1 unità = 1/72 pollice.
    Si può cambiare con uno scalamento esplicito della matrice di trasformazione del Graphics oppure usando il drawImage che riceve width/height.

    Fai così, supponiamo di voler avere 200 dpi (che è buona come densità). Per occupare 30x25mm la immagine dovrà essere quindi di 236x197 pixel. Poi la stampi con il drawImage indicando la dimensione di 85x71 che (attenzione!) sono le unità in 1/72 pollice.

    g.drawImage(img, x, y, 85, 71, null); // x/y che vuoi

    Antbin ,ho usato :

    barcode.renderBarcode("c://ean13.gif");
    l'immagine creata è 115x62

    barcode.setResolution(200);
    g.drawImage(img, 15, 30, 85, 71, null);
    ho stampato perfettamente il barcode.

    come usavo io il drawImage distorcevo troppo l'immagine senza mantenere le proporzioni.perchè ora funziona perfettamente.

    Grazie mille come sempre.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.