# Barcode generierung mit ZXing



## olgunk (9. Februar 2013)

Hallo zusammen,

Ich möchte ein GS1 Databar Expanded BarCode generieren .
Habe bei google gesucht konnte aber nicht nützliches finden können.
Bei XZing gibt es die möglichkeit mehrere Barcode Formate zu generieren, lediglich konnte ich kein Databar Expanded Barcode finden/generieren.
1) gibt es die möglichkeit überhaupt dies zu generieren?
2) wie könnte ich dies machen?
3) Bzw. kann man dieses Problem in einer anderen Programiersprache realisieren.

Hier mein Code:


```
package de.olgun.barcodee128;
import java.io.File;
import java.io.FileOutputStream;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.oned.Code128Writer;
import com.google.zxing.oned.Code39Writer;
import com.google.zxing.oned.OneDimensionalCodeWriter;
import com.google.zxing.oned.rss.expanded.decoders.AbstractExpandedDecoder;

public class barcode128 {
	public static void main(String[] args) {
       
           int width = 440; 
           int height = 48;
            
              
           BitMatrix bitMatrix;
        try {
            bitMatrix = new Code128Writer().encode("10400550006232515201231",BarcodeFormat.RSS_EXPANDED,width,height,null);
        	MatrixToImageWriter.writeToStream(bitMatrix, "png", new FileOutputStream(new File("C:\\Users\\fecub\\Desktop\\zxing_barcode.png")));
        } catch (WriterException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

    }

}
```

Freue mich für jede Hilfe.Danke im voraus.

Gruß


----------



## saftmeister (9. Februar 2013)

Hi,

du könntest die die Font kaufen und damit ein PDF oder auch Image generieren:

http://www.idautomation.com/barcode-fonts/databar/

Ansonsten gibts noch die Möglichkeit, sowas direkt mit Postscript zu machen: http://code.google.com/p/postscriptbarcode/wiki/DataBarExpanded


----------



## olgunk (9. Februar 2013)

Soll das für mein Praktikumsbetrieb machen und die wollen dafûr nichts zahlen. 
Mit PostScript möchte die Firma nicht weil das eine ausführbare Java Datei sein


----------



## saftmeister (9. Februar 2013)

Welche Version von ZXing setzt du ein? Laut einem Commit (http://code.google.com/p/zxing/source/detail?r=1350) sollte der Typ eigentlich unterstützt werden. Anscheinend liegt es daran, wie man die Barcode-Daten an den Renderer übergibt. Versuch mal deinen String so aufzubauen:

(11)100224(17)110224(3102)000100

Bzw. was kommt bei dir eigentlich raus, das du meinst, es funktioniert nicht?


----------



## olgunk (9. Februar 2013)

Ich benutze die aktuelle Version. 
Es gibt keine Data Bar Expended. 
Hast du vielleicht ein Exempel Code. Weil ich alles schon ausprobiert habe.


----------



## saftmeister (9. Februar 2013)

Wenn du den Sourcecode von ZXing runter lädst, bekommst du in core/test/src/com/google/zxing/oned/rss/expanded Test-Fälle. In denen sollten einige Beispiele drin sein.


----------



## olgunk (9. Februar 2013)

Also unterstützt es Databar expanded?


----------



## saftmeister (10. Februar 2013)

Ja, aber es heißt dort RSS14 Expanded. Du kannst es hier nachlesen: http://www.morelab.deusto.es/index....ar-expanded-code-contributed-to-zxing-project

Und im Commit r1350 (http://code.google.com/p/zxing/source/detail?r=1350) kannst du sehen, was an Code hinzugefügt wurde, um es zu unterstützen.


----------



## olgunk (10. Februar 2013)

Es gibt für z.B. für Ean128 eine Klasse Code128Writer oder Ean39 eine klasse Code39Writer um barcodes zu generieren. Aber ich finde keine writer klasse für rss expanded. Habe mir auch die Beispiele angesehen in denen existieren eigentlich nur klassen die relevant für das Lesen von barcodes sind.

Das sind die files die als Tests zur verfügung stehen:

BitArrayBuilder.java
ExpandedPair.java
RSSExpandedReader.java


----------



## saftmeister (10. Februar 2013)

Sorry, wenn ich da falsche Hoffnungen geweckt habe, war ein Recherche-Irrtum meinerseits. Da du die gleiche Frage - wie ich schon bei der Suche nach einer Lösung entdeckt habe - in anderen Foren ohne Lösung gestellt hast, bin ich mittlerweile der Auffassung, das es einfach noch keine Lösung gibt. Die einzige Möglichkeit wäre, sich selbst ran zu setzen und einen Encoder zu schreiben.

Meine Experimente mit MultiFormatWriter brachten keine funktionierende Applikation zustande:


```
import java.io.File;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;


public class Rss14 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int width = 200;
		int height = 90;
		
		MultiFormatWriter writer = new MultiFormatWriter();
		try {
			//BitMatrix matrix = writer.encode("123456789", BarcodeFormat.RSS_14, width, height);
			BitMatrix matrix = writer.encode("123456789", BarcodeFormat.RSS_EXPANDED, width, height);
			MatrixToImageWriter.writeToFile(matrix, "PNG", new File("test.png"));
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}
```


```
java.lang.IllegalArgumentException: No encoder available for format RSS_EXPANDED
	at com.google.zxing.MultiFormatWriter.encode(MultiFormatWriter.java:84)
	at com.google.zxing.MultiFormatWriter.encode(MultiFormatWriter.java:45)
	at Rss14.main(Rss14.java:20)
```

Tut mir leid. Leider verstehe ich davon nicht genug, das ich weiterhelfen könnte einen Encoder zu schreiben. Dafür muss man sich wohl tief in die Sources von ZXing einarbeiten.


----------



## olgunk (10. Februar 2013)

Danke dir trotzdem Saftmeister.

ich bin ziemlich am ende mit meinem Nerven. Muss dass für meine Praktikumsstelle Programieren.

Gibt es keinen der mir noch tips geben könnte?


----------



## saftmeister (10. Februar 2013)

Naja, du kannst ja argumentieren: Entweder "sie" (die Chefs/Vorgesetzten) nehmen etwas Geld in die Hand und bezahlen eine Lizenz für den ersten Vorschlag - eine entsprechende Java-Library kaufen, die das kann. Oder sie geben dir mehr Zeit/Geld um das selbst zu implementieren. Dann müssen sie aber damit rechnen, das es noch ne Weile dauern kann.

Es gibt allerdings noch die Möglichkeit, das Post-Script-Feature in Java einzubauen (wenn es denn unbedingt Java sein muss).

Ansonsten habe ich nur noch mit hoher wahrscheinlichkeit halb-legale oder illegale Vorschläge. Keine Ahnung - und ich rate davon ab - ob es legal ist, einen Grabber in Java zu bauen, der http://www.bcgen.com/databar-barcode-creator.html benutzt.


----------



## melmager (11. Februar 2013)

Warum nicht mit einer barcode Schriftart arbeiten ?
z.B code_128.ttf

Setzt natürlich vorraus das der Anwender die Schriftart auf dem PC hat


----------



## olgunk (11. Februar 2013)

Wie geht das? Hast du Beispiele dafür?


----------



## melmager (11. Februar 2013)

Also Java Code habe ich leider nicht aber hier wird beschrieben wie man vorgeht:

http://www.hi-tier.de/Entwicklung/technik/barcode_Code128.html

Kurz: Stringlänge muss grade sein; Prüfziffer berechnen und anhängen
dann Startcode und Endcode einfügen = ergebnis was als strichcode angezeigt werden muss
sprich font auswählen und ausgeben

doch Java Code gefunden :

http://grandzebu.net/informatique/codbar/code128_java2.asc


----------



## olgunk (11. Februar 2013)

Danke dir. Weiß du auch ob es kostenlos für RSS14 expanded bzw. GS1 Databar expanded gibt?


----------



## melmager (11. Februar 2013)

Meiner kenntnis nach Nein - sorry


----------



## olgunk (12. Februar 2013)

:-( schade. Heißt das, das mir nichts anderes bleibt als das ich um dieses Projekt abzuschließen unbedingt meinem Arbeitgeber fragen muss, ob die entweder die lib's oder die fronts kaufen?


----------



## saftmeister (12. Februar 2013)

Entweder das, oder einen Encoder für zxing schreiben.


----------



## olgunk (13. Februar 2013)

saftmeister hat gesagt.:


> Entweder das, oder einen Encoder für zxing schreiben.



Wie soll ich denn ein Encoder schreiben? Kein Ahnung wie das gehen soll


----------



## olgunk (13. Februar 2013)

die Idee mit dem Postscript habe  ich noch einmal besprochen.

1) ist dies legal
2) wie geht das?


----------



## saftmeister (13. Februar 2013)

olgunk hat gesagt.:


> die Idee mit dem Postscript habe  ich noch einmal besprochen.
> 
> 1) ist dies legal



Wenn du die Verwendung meinst, ja, siehe Lizenz: http://postscriptbarcode.googlecode.com/svn/trunk/LICENSE



olgunk hat gesagt.:


> 2) wie geht das?



Ich bin da kein Profi, aber wenn ich mir den Quickstart anschaue (http://code.google.com/p/postscriptbarcode/wiki/QuickGuide) sieht  es nicht sehr aufwendig aus. Du kannst damit anfangen, das ZIP-File (http://code.google.com/p/postscriptbarcode/downloads/list) herunter zu laden und mit dem barcode_with_sample.ps zu experimentieren. Du brauchst dann noch einen Postscript-Compiler wie Ghostscript (http://sourceforge.net/projects/ghostscript/) - der ebenfalls frei ist, um das PS in ein anderes Format zu übertragen. Hier ein Beispiel:


```
gs -sDEVICE=jpeg -sOutputFile=bild.jpg - < postscript.ps
```


----------

