質問
私はiTextの内からDataMatrixのバーコードを生成しようとしています。これは私のコードのほとんどのためではなく、いくつかのコードのために正常に動作します。一つの例は次のとおりです。
HEnSh0701003-2V1
これは、いくつかの理由で非正方形のバーコードを生成します。私は(例えばIDAutomationのような)他の企業からのエンコーダを使用する場合、私は、有効な正方形のバーコードを入手できますか。
誰もがなぜこれが起こっているのアイデアを持っていますか?私は、私はサードパーティ製のものを使用する必要が埋め込まITEST DataMatrixのクラスを使用することができず、解決策を探しています。
私が使用していたコードのサンプルます:
BarcodeDatamatrix bar = new BarcodeDatamatrix();
bar.setOptions(BarcodeDatamatrix.DM_AUTO);
bar.generate("HEnSh0701003-2V1");
bcd.addCell(bar.createImage());
BCDは、2列のPdfTableである。
解決
私はこの正確な問題に遭遇しました。私はこの1つを把握するためにiTextのソースコードに掘り終わりました。 iTextのは、あなたが提供するテキストに合わせてバーコードをリサイズされます。
iTextのは、データマトリクスのバーコードについては、以下のサイズをサポートしています。 10×、12×12、8x18、14x14、8x32、16×16、12x26、18×18、20×20、12x36、22×22、16x36、24×24、26x26、16x48、32×32、36x36、40×40、44x44、48×48、52x52、64×64、72x72、80×80、88x88、 96x96、104x104、120x120、132x132、144x144
あなたが見ることができるように、そこでは非正方形サイズの数があります。私がやったことは、正方形のバーコードサイズのリストを作成し、生成()呼び出しの戻り値を確認しながら、各サイズを試してみました。
// supported square barcode dimensions
int[] barcodeDimensions = {10, 12, 14, 16, 18, 20, 22, 24, 26, 32, 36, 40, 44, 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144};
BarcodeDatamatrix barcode = new BarcodeDatamatrix();
barcode.setOptions(BarcodeDatamatrix.DM_AUTO);
// try to generate the barcode, resizing as needed.
for (int generateCount = 0; generateCount < barcodeDimensions.length; generateCount++) {
barcode.setWidth(barcodeDimensions[generateCount]);
barcode.setHeight(barcodeDimensions[generateCount]);
int returnResult = barcode.generate(text);
if (returnResult == BarcodeDatamatrix.DM_NO_ERROR) {
return barcode.createImage();
}
}
throw new Exception("Error generating barcode.");
他のヒント
おかげJonMR
がそれを必要とする人のために、ここではVB.netで同じコードがある
Private Function GetDataMatrixBarcode(ByVal message As String) As iTextSharp.text.Image
Dim barcode As BarcodeDatamatrix = New BarcodeDatamatrix()
Dim barcodeDimensions() As Integer = New Integer() {10, 12, 14, 16, 18, 20, 22, 24, 26, 32, 36, 40, 44, 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144}
Dim returnResult As Integer
barcode.Options = BarcodeDatamatrix.DM_AUTO
For generateCount As Integer = 0 To barcodeDimensions.Length - 1
barcode.Width = barcodeDimensions(generateCount)
barcode.Height = barcodeDimensions(generateCount)
returnResult = barcode.Generate(message)
If returnResult = BarcodeDatamatrix.DM_NO_ERROR Then
Return barcode.CreateImage
End If
Next
Throw New Exception("Error generating datamatrix barcode for text '" & message & "'")
End Function
C#で、それを必要とする人のために:
// supported square barcode dimensions
int[] barcodeDimensions = { 10, 12, 14, 16, 18, 20, 22, 24, 26, 32, 36, 40, 44, 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144 };
BarcodeDatamatrix barcode = new BarcodeDatamatrix();
barcode.Options = (BarcodeDatamatrix.DM_AUTO);
// try to generate the barcode, resizing as needed.
for (int generateCount = 0; generateCount < barcodeDimensions.Length; generateCount++)
{
barcode.Width = (barcodeDimensions[generateCount]);
barcode.Height = (barcodeDimensions[generateCount]);
int returnResult = barcode.Generate("1234567");
if (returnResult == BarcodeDatamatrix.DM_NO_ERROR)
{
Image barcodeImg = barcode.CreateImage();
table.AddCell(barcodeImg);
table.AddCell(string.Empty);
}
}
ところで、誰もがこれを長方形のバーコードを作成する方法を知っていますか?私は長方形のフォーマットを選択するたびに、それは私の3(DM_Error_Invalid_Square)のエラーコードを示します。
あなたは変更する必要があります。
barcode.setOptions(BarcodeDatamatrix.DM_AUTO);
タグに
barcode.setOptions(BarcodeDatamatrix.DM_B256);
Javaで実装は、iTextのを使用してPDFファイルを既存のバーコードを追加します。
使用jarファイル:iTextの、コモンズ・コーデック-1.6.jar
InputStream inputStream = new ByteArrayInputStream(FileUtils.readFileToByteArray(new File("c:/tmp/your_existing.pdf")));
FileOutputStream outStream = new FileOutputStream("c:/tmp/pdf_copy_1.pdf");
PdfContentByte contentByte = null;
int totalPages = 0;
PdfReader pdfReader = null;
PdfStamper pdfStamper = null;
try {
pdfReader = new PdfReader(inputStream);
totalPages = pdfReader.getNumberOfPages();
pdfStamper = new PdfStamper(pdfReader, outStream);
String text = "SAMPLE BARCODE TEST";
String barcodeData = DigestUtils.md5Hex(text); --encoding barcode text...
//Adding barcode to each page in pdf
for (int i = 1; i <= totalPages; i++) {
contentByte = pdfStamper.getOverContent(i);
if(barcodeData != null){
Image img = null;
BarcodeDatamatrix datamatrix = new BarcodeDatamatrix();
datamatrix.setWidth(10); -- BARCODE WIDTH
datamatrix.setHeight(10); -- BARCODE HEIGHT
datamatrix.generate(barcodeData);
img = datamatrix.createImage();
img.setAbsolutePosition(175, 750); --barcode position x,y
contentByte.addImage(img);
}
}
}
catch (Exception e) {
e.printStackTrace();
}