2015-05-29 125 views
1

嗨我正面臨一個問題的一代條形碼在Java中。我使用code128生成條形碼。生成條形碼長度的數據是20位數字(123456789),我可以生成條形碼,條形碼的寬度爲寬度165,高度爲58。但是我需要108個寬度和29個高度作爲相同的20位數輸入。Java條碼生成

我已經使用下面的代碼生成條形碼,請幫助,如果任何人有解決問題的想法。

package com.tcs.tpos.business.dayactivities; 

import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.RenderingHints; 
import java.awt.image.BufferedImage; 
import java.io.File; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

import com.onbarcode.barcode.Code128; 



public class barTest { 


    public static void main(String[] args) throws Exception 
    { 



     String barip="1234567890"; 

     File poFile = new File("c:/tmp/work/barcode"+barip+ ".png"); 

     Code128 barcode=new Code128(); 

     barcode.setData(barip); 


     System.out.println("The Barocde height is been refered here " +barcode.getX()); 

     System.out.println("The Barcode width is been refered here " +barcode.getY()); 

     System.out.println("The Barcode width is been refered here " +barcode.getBarcodeHeight()); 


     barcode.setX(0.5f); 

     barcode.setY(15f); 

     barcode.setLeftMargin(0.1f); 

     barcode.setRightMargin(0.1f); 




     System.out.println("The Barcode width is been refered here " +barcode.getBarcodeHeight()); 


     System.out.println("The Barcode width is been refered here " +barcode.getBarcodeWidth()); 

     System.out.println("The Barcode width is been refered here " +barcode.getTopMargin()); 

     System.out.println("The Barcode width is been refered here " +barcode.getBottomMargin()); 

     System.out.println("The Barcode width is been refered here " +barcode.getLeftMargin()); 

     System.out.println("The Barcode width is been refered here " +barcode.getRightMargin()); 





     barcode.drawBarcode("c:/tmp/work/barcode"+barip+ ".png"); 

     ImageIcon oimage=new ImageIcon("c:/tmp/work/barcode"+barip+ ".png"); 


     BufferedImage inputImage=ImageIO.read(poFile); 

     BufferedImage genom=generateomImage(inputImage,113,25);    


     ImageIO.write(genom, "png", new File("c:/tmp/work/barcode"+barip+ ".png")); 



    } 

    public static BufferedImage generateomImage(BufferedImage ret,int width,int height) 
    { 

     int w = ret.getWidth(null); 
     int h = ret.getHeight(null); 
     Image scaledImage = ret.getScaledInstance((int)width, (int)height, Image.SCALE_SMOOTH); 
     BufferedImage result = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
     Graphics2D g = result.createGraphics(); 
     g.drawImage(scaledImage, 0, 0, null); 
     g.dispose(); 

     return result; 

    } 

} 
+0

高度所以,如果你這樣做發生了什麼? –

回答

1

圖像生成後,您不應該縮放Graphics2D中的條形碼。這是因爲重新縮放會使圖像變形,從而導致圖像無法掃描。

你應該從他們的網站查看他們的API,他們有設置barcodeWidth和Height的方法。

http://www.onbarcode.com/products/java_barcode/code_128_size_setting.html

集X,barcodeWidth,LEFTMARGIN和RightMargin設爲與Java

barcode.setX(2f); 

    barcode.setbarcodeWidth(200); 

    barcode.setLeftMargin(1f); 

    barcode.setRightMargin(1f); 

設置代碼128的寬度在與上述屬性設置的128碼寬,你需要注意的是設置固定條寬(X)後,將在Java應用程序中設置自動條形碼寬度 - 最小條形碼寬度。但是,如果set barcodeWidth值小於最小條碼寬度,則Java中創建的Code 128圖像寬度將爲最小值。如果set barcodeWith大於最小值,則額外寬度將被添加到Java的右邊和左邊。 組Y,barcodeHeight,TOPMARGIN和bottomMargin設置代碼128的使用Java

barcode.setY(75f); 

    barcode.setbarcodeHeight(100f); 

    barcode.setTopMargin(2f); 

    barcode.setBottomMargin(2f); 
+0

我試着將默認值設置爲寬度和高度,對於這些默認值作爲輸入,生成的條形碼(寬度爲165,高度爲20,輸入數據爲49)。 –

+0

有沒有什麼辦法可以在java中爲尺寸109生成條形碼,寬度爲29,高度爲20位數爲輸入。我試着用代碼128生成條形碼,寬度爲165。除了代碼128之外,還有其他方式嗎? –

+0

問題是關於「重新縮放」。考慮一個3像素長的圖像,例如黑白色的白色,如果我將其從寬度3重新縮放到寬度2,結果會是什麼?它變成50%黑色和50%白色?條形碼是否仍具有與之前相同的上下文?類似於從165重新調整到108.但是,如果你說216到108,這可能值得一試。 –