/*
* Copyright 2015 Robin Stuart
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package uk.org.okapibarcode;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import uk.org.okapibarcode.backend.AustraliaPost;
import uk.org.okapibarcode.backend.AztecCode;
import uk.org.okapibarcode.backend.AztecRune;
import uk.org.okapibarcode.backend.ChannelCode;
import uk.org.okapibarcode.backend.Codabar;
import uk.org.okapibarcode.backend.CodablockF;
import uk.org.okapibarcode.backend.Code11;
import uk.org.okapibarcode.backend.Code128;
import uk.org.okapibarcode.backend.Code16k;
import uk.org.okapibarcode.backend.Code2Of5;
import uk.org.okapibarcode.backend.Code32;
import uk.org.okapibarcode.backend.Code3Of9;
import uk.org.okapibarcode.backend.Code3Of9Extended;
import uk.org.okapibarcode.backend.Code49;
import uk.org.okapibarcode.backend.Code93;
import uk.org.okapibarcode.backend.CodeOne;
import uk.org.okapibarcode.backend.Composite;
import uk.org.okapibarcode.backend.DataBar14;
import uk.org.okapibarcode.backend.DataBarExpanded;
import uk.org.okapibarcode.backend.DataBarLimited;
import uk.org.okapibarcode.backend.DataMatrix;
import uk.org.okapibarcode.backend.Ean;
import uk.org.okapibarcode.backend.GridMatrix;
import uk.org.okapibarcode.backend.HumanReadableLocation;
import uk.org.okapibarcode.backend.JapanPost;
import uk.org.okapibarcode.backend.KixCode;
import uk.org.okapibarcode.backend.KoreaPost;
import uk.org.okapibarcode.backend.Logmars;
import uk.org.okapibarcode.backend.MaxiCode;
import uk.org.okapibarcode.backend.MicroQrCode;
import uk.org.okapibarcode.backend.MsiPlessey;
import uk.org.okapibarcode.backend.Nve18;
import uk.org.okapibarcode.backend.OkapiException;
import uk.org.okapibarcode.backend.Pdf417;
import uk.org.okapibarcode.backend.Pharmacode;
import uk.org.okapibarcode.backend.Pharmacode2Track;
import uk.org.okapibarcode.backend.Pharmazentralnummer;
import uk.org.okapibarcode.backend.Postnet;
import uk.org.okapibarcode.backend.QrCode;
import uk.org.okapibarcode.backend.RoyalMail4State;
import uk.org.okapibarcode.backend.Symbol;
import uk.org.okapibarcode.backend.Telepen;
import uk.org.okapibarcode.backend.Upc;
import uk.org.okapibarcode.backend.UspsOneCode;
import uk.org.okapibarcode.backend.UspsPackage;
import uk.org.okapibarcode.output.Java2DRenderer;
import uk.org.okapibarcode.output.PostScriptRenderer;
import uk.org.okapibarcode.output.SvgRenderer;
/**
*
* @author <a href="mailto:rstuart114@gmail.com">Robin Stuart</a>
*/
public class MakeBarcode {
public void process(Settings settings, String dataInput, String outputFileName) {
int type = settings.getSymbolType();
Symbol symbol;
String extension = "";
HumanReadableLocation hrtLocation = settings.getHrtPosition();
Color ink = settings.getForegroundColour();
Color paper = settings.getBackgroundColour();
if (settings.isReverseColour()) {
ink = Color.WHITE;
paper = Color.BLACK;
}
try {
/* values marked "Legacy" are for compatability purposes
and should not be documented.
*/
switch(type) {
case 1:
// Code 11
Code11 code11 = new Code11();
code11.setHumanReadableLocation(hrtLocation);
code11.setContent(dataInput);
symbol = code11;
break;
case 2:
// Code 2 of 5
Code2Of5 c25matrix = new Code2Of5();
c25matrix.setMatrixMode();
c25matrix.setHumanReadableLocation(hrtLocation);
c25matrix.setContent(dataInput);
symbol = c25matrix;
break;
case 3:
//Interleaved 2 of 5
Code2Of5 c25inter = new Code2Of5();
c25inter.setInterleavedMode();
c25inter.setHumanReadableLocation(hrtLocation);
c25inter.setContent(dataInput);
symbol = c25inter;
break;
case 4:
// IATA 2 of 5
Code2Of5 c25iata = new Code2Of5();
c25iata.setIATAMode();
c25iata.setHumanReadableLocation(hrtLocation);
c25iata.setContent(dataInput);
symbol = c25iata;
break;
case 6:
// Data Logic
Code2Of5 c25logic = new Code2Of5();
c25logic.setDataLogicMode();
c25logic.setHumanReadableLocation(hrtLocation);
c25logic.setContent(dataInput);
symbol = c25logic;
break;
case 7:
// Industrial 2 of 5
Code2Of5 c25ind = new Code2Of5();
c25ind.setIndustrialMode();
c25ind.setHumanReadableLocation(hrtLocation);
c25ind.setContent(dataInput);
symbol = c25ind;
break;
case 8:
case 99:
case 101: // Legacy
// Code 39
Code3Of9 code3of9 = new Code3Of9();
if ((type == 99) || (type == 101)) {
code3of9.setDataType(Symbol.DataType.HIBC);
}
code3of9.setHumanReadableLocation(hrtLocation);
code3of9.setContent(dataInput);
symbol = code3of9;
break;
case 9:
// Extended Code 39
Code3Of9Extended code3of9ext = new Code3Of9Extended();
code3of9ext.setHumanReadableLocation(hrtLocation);
code3of9ext.setContent(dataInput);
symbol = code3of9ext;
break;
case 13:
case 14: // Legacy
case 15: // Legacy
case 10: // Legacy
case 11: // Legacy
case 12: // Legacy
// EAN
Ean ean = new Ean();
if (eanCalculateVersion(dataInput) == 8) {
ean.setMode(Ean.Mode.EAN8);
} else {
ean.setMode(Ean.Mode.EAN13);
}
ean.setContent(dataInput);
symbol = ean;
break;
case 18:
// Codabar
Codabar codabar = new Codabar();
codabar.setHumanReadableLocation(hrtLocation);
codabar.setContent(dataInput);
symbol = codabar;
break;
case 20:
case 60:
case 98:
case 16: // Legacy
case 59: // Legacy
case 61: // Legacy
case 100: // Legacy
// Code 128
Code128 code128 = new Code128();
code128.unsetCc();
if (settings.isDataGs1Mode() || (type == 16)) {
code128.setDataType(Symbol.DataType.GS1);
}
if ((type == 98) || (type == 100)) {
code128.setDataType(Symbol.DataType.HIBC);
}
if (type == 60) {
code128.stopModeC();
}
if (settings.isReaderInit()) {
code128.setReaderInit();
}
code128.setHumanReadableLocation(hrtLocation);
code128.setContent(dataInput);
symbol = code128;
break;
case 21:
// Leitcode
Code2Of5 dpLeit = new Code2Of5();
dpLeit.setDPLeitMode();
dpLeit.setHumanReadableLocation(hrtLocation);
dpLeit.setContent(dataInput);
symbol = dpLeit;
break;
case 22:
// Identcode
Code2Of5 dpIdent = new Code2Of5();
dpIdent.setDPIdentMode();
dpIdent.setHumanReadableLocation(hrtLocation);
dpIdent.setContent(dataInput);
symbol = dpIdent;
break;
case 23:
// Code 16k
Code16k code16k = new Code16k();
if (settings.isDataGs1Mode()) {
code16k.setDataType(Symbol.DataType.GS1);
}
if (settings.isReaderInit()) {
code16k.setReaderInit();
}
code16k.setContent(dataInput);
symbol = code16k;
break;
case 24:
// Code 49
Code49 code49 = new Code49();
code49.setHumanReadableLocation(hrtLocation);
code49.setContent(dataInput);
symbol = code49;
break;
case 25:
// Code 93
Code93 code93 = new Code93();
code93.setHumanReadableLocation(hrtLocation);
code93.setContent(dataInput);
symbol = code93;
break;
case 29:
// Databar-14
DataBar14 dataBar14 = new DataBar14();
dataBar14.setLinearMode();
dataBar14.setHumanReadableLocation(hrtLocation);
dataBar14.setContent(dataInput);
symbol = dataBar14;
break;
case 30:
// Databar Limited
DataBarLimited dataBarLimited = new DataBarLimited();
dataBarLimited.setHumanReadableLocation(hrtLocation);
dataBarLimited.setContent(dataInput);
symbol = dataBarLimited;
break;
case 31:
// Databar Expanded
DataBarExpanded dataBarE = new DataBarExpanded();
dataBarE.setNotStacked();
dataBarE.setHumanReadableLocation(hrtLocation);
dataBarE.setContent(dataInput);
symbol = dataBarE;
break;
case 32:
// Telepen Alpha
Telepen telepen = new Telepen();
telepen.setNormalMode();
telepen.setHumanReadableLocation(hrtLocation);
telepen.setContent(dataInput);
symbol = telepen;
break;
case 34:
case 35: // Legacy
case 36: // Legacy
// UPC-A
Upc upca = new Upc();
upca.setMode(Upc.Mode.UPCA);
upca.unsetLinkageFlag();
upca.setContent(dataInput);
symbol = upca;
break;
case 37:
case 38: // Legacy
case 39: // Legacy
// UPC-E
Upc upce = new Upc();
upce.setMode(Upc.Mode.UPCE);
upce.unsetLinkageFlag();
upce.setContent(dataInput);
symbol = upce;
break;
case 40:
case 41: // Legacy
case 42: // Legacy
case 43: // Legacy
case 44: // Legacy
case 45: // Legacy
case 54:
// Postnet and Brizillian CepNet
Postnet postnet = new Postnet();
postnet.setMode(Postnet.Mode.POSTNET);
postnet.setContent(dataInput);
symbol = postnet;
break;
case 47:
// MSI Plessey
MsiPlessey msiPlessey = new MsiPlessey();
msiPlessey.setHumanReadableLocation(hrtLocation);
msiPlessey.setContent(dataInput);
symbol = msiPlessey;
break;
case 50:
// LOGMARS
Logmars logmars = new Logmars();
logmars.setHumanReadableLocation(hrtLocation);
logmars.setContent(dataInput);
symbol = logmars;
break;
case 51:
// Pharmacode One-Track
Pharmacode pharmacode = new Pharmacode();
pharmacode.setContent(dataInput);
symbol = pharmacode;
break;
case 53:
// Pharmacode Two-Track
Pharmacode2Track pharmacode2t = new Pharmacode2Track();
pharmacode2t.setContent(dataInput);
symbol = pharmacode2t;
break;
case 55:
case 56:
case 106:
case 107: // Legacy
// PDF417
Pdf417 pdf417 = new Pdf417();
if (settings.isDataGs1Mode()) {
pdf417.setDataType(Symbol.DataType.GS1);
}
if ((type == 106) || (type == 107)) {
pdf417.setDataType(Symbol.DataType.HIBC);
} else if (type == 56) {
pdf417.setMode(Pdf417.Mode.TRUNCATED);
}
pdf417.setPreferredEccLevel(settings.getSymbolECC() - 1);
pdf417.setDataColumns(settings.getSymbolColumns());
if (settings.isReaderInit()) {
pdf417.setReaderInit();
}
pdf417.setContent(dataInput);
symbol = pdf417;
break;
case 57:
// Maxicode
MaxiCode maxiCode = new MaxiCode();
maxiCode.setPrimary(settings.getPrimaryData());
maxiCode.setMode(settings.getEncodeMode());
maxiCode.setContent(dataInput);
symbol = maxiCode;
break;
case 58:
case 104:
case 105: // Legacy
// QR Code
QrCode qrCode = new QrCode();
if (settings.isDataGs1Mode()) {
qrCode.setDataType(Symbol.DataType.GS1);
}
if ((type == 104) || (type == 105)) {
qrCode.setDataType(Symbol.DataType.HIBC);
}
switch(settings.getSymbolECC()) {
case 0:
qrCode.setEccMode(QrCode.EccMode.L);
break;
case 1:
qrCode.setEccMode(QrCode.EccMode.M);
break;
case 2:
qrCode.setEccMode(QrCode.EccMode.Q);
break;
case 3:
qrCode.setEccMode(QrCode.EccMode.H);
break;
}
qrCode.setPreferredVersion(settings.getSymbolVersion());
if (settings.isReaderInit()) {
qrCode.setReaderInit();
}
qrCode.setContent(dataInput);
symbol = qrCode;
break;
case 63:
case 64: // Legacy
case 65: // Legacy
// Australia Post Standard Customer
AustraliaPost auPost = new AustraliaPost();
auPost.setPostMode();
auPost.setContent(dataInput);
symbol = auPost;
break;
case 66:
// Australia Post Reply Paid
AustraliaPost auReply = new AustraliaPost();
auReply.setReplyMode();
auReply.setContent(dataInput);
symbol = auReply;
break;
case 67:
// Australia Post Re-Routing
AustraliaPost auRoute = new AustraliaPost();
auRoute.setRouteMode();
auRoute.setContent(dataInput);
symbol = auRoute;
break;
case 68:
// Australia Post Redirection
AustraliaPost auRedirect = new AustraliaPost();
auRedirect.setRedirectMode();
auRedirect.setContent(dataInput);
symbol = auRedirect;
break;
case 70:
// RM4SCC
RoyalMail4State royalMail = new RoyalMail4State();
royalMail.setContent(dataInput);
symbol = royalMail;
break;
case 71:
case 102:
case 103: // Legacy
// Data Matrix
DataMatrix dataMatrix = new DataMatrix();
if (settings.isDataGs1Mode()) {
dataMatrix.setDataType(Symbol.DataType.GS1);
}
if ((type == 102) || (type == 103)) {
dataMatrix.setDataType(Symbol.DataType.HIBC);
}
if (settings.isReaderInit()) {
dataMatrix.setReaderInit();
}
dataMatrix.setPreferredSize(settings.getSymbolVersion());
dataMatrix.forceSquare(settings.isMakeSquare());
dataMatrix.setContent(dataInput);
symbol = dataMatrix;
break;
case 74:
case 110:
case 111: // Legacy
// Codablock-F
CodablockF codablockF = new CodablockF();
if (settings.isDataGs1Mode()) {
codablockF.setDataType(Symbol.DataType.GS1);
}
if ((type == 110) || (type == 111)) {
codablockF.setDataType(Symbol.DataType.HIBC);
}
codablockF.setContent(dataInput);
symbol = codablockF;
break;
case 75:
// NVE-18
Nve18 nve18 = new Nve18();
nve18.setHumanReadableLocation(hrtLocation);
nve18.setContent(dataInput);
symbol = nve18;
break;
case 76:
// Japanese Post
JapanPost japanPost = new JapanPost();
japanPost.setContent(dataInput);
symbol = japanPost;
break;
case 77:
// Korea Post
KoreaPost koreaPost = new KoreaPost();
koreaPost.setHumanReadableLocation(hrtLocation);
koreaPost.setContent(dataInput);
symbol = koreaPost;
break;
case 79:
// Databar-14 Stacked
DataBar14 dataBar14s = new DataBar14();
dataBar14s.setStackedMode();
dataBar14s.setContent(dataInput);
symbol = dataBar14s;
break;
case 80:
// Databar-14 Stacked Omnidirectional
DataBar14 dataBar14so = new DataBar14();
dataBar14so.setOmnidirectionalMode();
dataBar14so.setContent(dataInput);
symbol = dataBar14so;
break;
case 81:
// Databar Expanded Stacked
DataBarExpanded dataBarES = new DataBarExpanded();
dataBarES.setNoOfColumns(settings.getSymbolColumns());
dataBarES.setStacked();
dataBarES.setContent(dataInput);
symbol = dataBarES;
break;
case 82:
case 83: // Legacy
// Planet
Postnet planet = new Postnet();
planet.setMode(Postnet.Mode.PLANET);
planet.setContent(dataInput);
symbol = planet;
break;
case 84:
case 108:
case 109: // Legacy
// MicroPDF
Pdf417 microPdf417 = new Pdf417();
microPdf417.setMode(Pdf417.Mode.MICRO);
if (settings.isDataGs1Mode()) {
microPdf417.setDataType(Symbol.DataType.GS1);
}
if ((type == 108) || (type == 109)) {
microPdf417.setDataType(Symbol.DataType.HIBC);
}
if (settings.isReaderInit()) {
microPdf417.setReaderInit();
}
microPdf417.setDataColumns(settings.getSymbolColumns());
microPdf417.setContent(dataInput);
symbol = microPdf417;
break;
case 85:
// USPS Intelligent Mail
UspsOneCode uspsIMail = new UspsOneCode();
uspsIMail.setContent(dataInput);
symbol = uspsIMail;
break;
case 87:
// Telepen Numeric
Telepen telepenNum = new Telepen();
telepenNum.setNumericMode();
telepenNum.setHumanReadableLocation(hrtLocation);
telepenNum.setContent(dataInput);
symbol = telepenNum;
break;
case 89:
// ITF-14
Code2Of5 itf14 = new Code2Of5();
itf14.setITF14Mode();
itf14.setHumanReadableLocation(hrtLocation);
itf14.setContent(dataInput);
symbol = itf14;
break;
case 90:
// Dutch Post KIX Code
KixCode kixCode = new KixCode();
kixCode.setContent(dataInput);
symbol = kixCode;
break;
case 92:
case 112:
// Aztec Code
AztecCode aztecCode = new AztecCode();
if (settings.isDataGs1Mode()) {
aztecCode.setDataType(Symbol.DataType.GS1);
}
if (type == 112) {
aztecCode.setDataType(Symbol.DataType.HIBC);
}
if (settings.isReaderInit()) {
aztecCode.setReaderInit();
}
aztecCode.setPreferredEccLevel(settings.getSymbolECC());
aztecCode.setPreferredSize(settings.getSymbolVersion());
aztecCode.setContent(dataInput);
symbol = aztecCode;
break;
case 93:
// Code 32
Code32 code32 = new Code32();
code32.setHumanReadableLocation(hrtLocation);
code32.setContent(dataInput);
symbol = code32;
break;
case 97:
// Micro QR Code
MicroQrCode microQrCode = new MicroQrCode();
switch(settings.getSymbolECC()) {
case 0:
microQrCode.setEccMode(MicroQrCode.EccMode.L);
break;
case 1:
microQrCode.setEccMode(MicroQrCode.EccMode.M);
break;
case 2:
microQrCode.setEccMode(MicroQrCode.EccMode.Q);
break;
case 3:
microQrCode.setEccMode(MicroQrCode.EccMode.H);
break;
}
microQrCode.setPreferredVersion(settings.getSymbolVersion());
microQrCode.setContent(dataInput);
symbol = microQrCode;
break;
case 113:
case 52: // Legacy
// PZN-8
Pharmazentralnummer pzn = new Pharmazentralnummer();
pzn.setContent(dataInput);
symbol = pzn;
break;
case 117:
// USPS Intelligent Mail Package
UspsPackage uspsPackage = new UspsPackage();
uspsPackage.setContent(dataInput);
symbol = uspsPackage;
break;
case 128:
// Aztec Runes
AztecRune aztecRune = new AztecRune();
aztecRune.setContent(dataInput);
symbol = aztecRune;
break;
case 130:
// Composite symbol with EAN linear
Composite compositeEan = new Composite();
compositeEan.setSymbology(Composite.LinearEncoding.EAN);
compositeEan.setLinear(settings.getPrimaryData());
compositeEan.setContent(dataInput);
symbol = compositeEan;
break;
case 131:
// Composite with Code 128 linear
Composite compositeC128 = new Composite();
compositeC128.setSymbology(Composite.LinearEncoding.CODE_128);
compositeC128.setLinear(settings.getPrimaryData());
compositeC128.setContent(dataInput);
symbol = compositeC128;
break;
case 132:
// Composite with Databar-14
Composite compositeDb14 = new Composite();
compositeDb14.setSymbology(Composite.LinearEncoding.DATABAR_14);
compositeDb14.setLinear(settings.getPrimaryData());
compositeDb14.setContent(dataInput);
symbol = compositeDb14;
break;
case 133:
// Composite with Databar Limited
Composite compositeDbLtd = new Composite();
compositeDbLtd.setSymbology(Composite.LinearEncoding.DATABAR_LIMITED);
compositeDbLtd.setLinear(settings.getPrimaryData());
compositeDbLtd.setContent(dataInput);
symbol = compositeDbLtd;
break;
case 134:
// Composite with Databar Extended
Composite compositeDbExt = new Composite();
compositeDbExt.setSymbology(Composite.LinearEncoding.DATABAR_EXPANDED);
compositeDbExt.setLinear(settings.getPrimaryData());
compositeDbExt.setContent(dataInput);
symbol = compositeDbExt;
break;
case 135:
// Composite with UPC-A
Composite compositeUpcA = new Composite();
compositeUpcA.setSymbology(Composite.LinearEncoding.UPCA);
compositeUpcA.setLinear(settings.getPrimaryData());
compositeUpcA.setContent(dataInput);
symbol = compositeUpcA;
break;
case 136:
// Composite with UPC-E
Composite compositeUpcE = new Composite();
compositeUpcE.setSymbology(Composite.LinearEncoding.UPCE);
compositeUpcE.setLinear(settings.getPrimaryData());
compositeUpcE.setContent(dataInput);
symbol = compositeUpcE;
break;
case 137:
// Composite with Databar-14 Stacked
Composite compositeDb14Stack = new Composite();
compositeDb14Stack.setSymbology(Composite.LinearEncoding.DATABAR_14_STACK);
compositeDb14Stack.setLinear(settings.getPrimaryData());
compositeDb14Stack.setContent(dataInput);
symbol = compositeDb14Stack;
break;
case 138:
// Composite with Databar-14 Stacked Omnidirectional
Composite compositeDb14SO = new Composite();
compositeDb14SO.setSymbology(Composite.LinearEncoding.DATABAR_14_STACK_OMNI);
compositeDb14SO.setLinear(settings.getPrimaryData());
compositeDb14SO.setContent(dataInput);
symbol = compositeDb14SO;
break;
case 139:
// Composite with Databar-14 Expanded Stacked
Composite compositeDb14ES = new Composite();
compositeDb14ES.setSymbology(Composite.LinearEncoding.DATABAR_EXPANDED_STACK);
compositeDb14ES.setLinear(settings.getPrimaryData());
compositeDb14ES.setContent(dataInput);
symbol = compositeDb14ES;
break;
case 140:
// Channel Code
ChannelCode channelCode = new ChannelCode();
channelCode.setNumberOfChannels(settings.getSymbolColumns());
channelCode.setHumanReadableLocation(hrtLocation);
channelCode.setContent(dataInput);
symbol = channelCode;
break;
case 141:
// Code One
CodeOne codeOne = new CodeOne();
if (settings.isDataGs1Mode()) {
codeOne.setDataType(Symbol.DataType.GS1);
}
if (settings.isReaderInit()) {
codeOne.setReaderInit();
}
switch(settings.getSymbolVersion()) {
case 0:
codeOne.setPreferredVersion(CodeOne.Version.NONE);
break;
case 1:
codeOne.setPreferredVersion(CodeOne.Version.A);
break;
case 2:
codeOne.setPreferredVersion(CodeOne.Version.B);
break;
case 3:
codeOne.setPreferredVersion(CodeOne.Version.C);
break;
case 4:
codeOne.setPreferredVersion(CodeOne.Version.D);
break;
case 5:
codeOne.setPreferredVersion(CodeOne.Version.E);
break;
case 6:
codeOne.setPreferredVersion(CodeOne.Version.F);
break;
case 7:
codeOne.setPreferredVersion(CodeOne.Version.G);
break;
case 8:
codeOne.setPreferredVersion(CodeOne.Version.H);
break;
case 9:
codeOne.setPreferredVersion(CodeOne.Version.S);
break;
case 10:
codeOne.setPreferredVersion(CodeOne.Version.T);
break;
}
codeOne.setContent(dataInput);
symbol = codeOne;
break;
case 142:
// Grid Matrix
GridMatrix gridMatrix = new GridMatrix();
if (settings.isDataGs1Mode()) {
gridMatrix.setDataType(Symbol.DataType.GS1);
}
if (settings.isReaderInit()) {
gridMatrix.setReaderInit();
}
gridMatrix.setPreferredEccLevel(settings.getSymbolECC());
gridMatrix.setPreferredVersion(settings.getSymbolVersion());
gridMatrix.setContent(dataInput);
symbol = gridMatrix;
break;
default:
// Invalid
System.out.println("Invaid barcode type");
return;
}
} catch (OkapiException e) {
System.out.printf("Encoding error: %s\n", e.getMessage());
return;
}
File file = new File(outputFileName);
try {
int i = file.getName().lastIndexOf('.');
if (i > 0) {
extension = file.getName().substring(i + 1);
}
switch (extension) {
case "png":
case "gif":
case "jpg":
case "bmp":
BufferedImage image = new BufferedImage(symbol.getWidth(),
symbol.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
//g2d.setBackground(paper);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Java2DRenderer renderer = new Java2DRenderer(g2d, 1, paper, ink);
System.out.printf("MakeBarcode\n");
renderer.render(symbol);
try {
ImageIO.write(image, extension, file);
} catch (IOException e) {
System.out.printf("Error outputting to file\n");
}
break;
case "svg":
SvgRenderer svg = new SvgRenderer(new FileOutputStream(file), 1, paper, ink);
svg.render(symbol);
break;
case "eps":
PostScriptRenderer eps = new PostScriptRenderer(new FileOutputStream(file), 1, paper, ink);
eps.render(symbol);
break;
default:
System.out.println("Unsupported output format");
break;
}
} catch (FileNotFoundException e){
System.out.printf("File Not Found\n");
} catch (IOException e) {
System.out.printf("Write Error\n");
}
}
private int eanCalculateVersion(String dataInput) {
/* Determine if EAN-8 or EAN-13 is being used */
int length = 0;
int i;
boolean latch;
latch = true;
for (i = 0; i < dataInput.length(); i++) {
if ((dataInput.charAt(i) >= '0') && (dataInput.charAt(i) <= '9')) {
if (latch) {
length++;
}
} else {
latch = false;
}
}
if (length <= 7) {
// EAN-8
return 8;
} else {
// EAN-13
return 13;
}
}
}