Java iText数据矩阵生成问题

Java iText数据矩阵生成问题,java,itext,barcode,Java,Itext,Barcode,我试图从itext中生成datamatrix条形码。这适用于我的大多数代码,但不适用于某些代码。一个例子是: HEnSh0701003-2V1 出于某种原因,这会产生非方形条形码。当我使用其他公司的编码器(如iAutomation)时,我会得到一个有效的方形条形码 有人知道为什么会这样吗?我正在寻找一个解决方案,这样我就可以使用嵌入式iTest DataMatrix类,而不必使用第三方类 我正在使用的代码示例: BarcodeDatamatrix bar = new BarcodeDatamat

我试图从itext中生成datamatrix条形码。这适用于我的大多数代码,但不适用于某些代码。一个例子是:

HEnSh0701003-2V1

出于某种原因,这会产生非方形条形码。当我使用其他公司的编码器(如iAutomation)时,我会得到一个有效的方形条形码

有人知道为什么会这样吗?我正在寻找一个解决方案,这样我就可以使用嵌入式iTest DataMatrix类,而不必使用第三方类

我正在使用的代码示例:

BarcodeDatamatrix bar = new BarcodeDatamatrix();
 bar.setOptions(BarcodeDatamatrix.DM_AUTO);
bar.generate("HEnSh0701003-2V1");
bcd.addCell(bar.createImage());

其中bcd是一个有两列的PdfTable。

我遇到了这个问题。最后,我深入研究了iText源代码来找出这一点。iText正在调整条形码的大小以适合您提供的文本

iText支持以下大小的datamatrix条形码: 10x10、12x12、8x18、14x14、8x32、16x16、12x26、18x18、20x20、12x36、22x22、16x36、24x24、26x26、16x48、32x32、36x36、40x40、44x44、48x48、52x52、64x64、72x72、80x80、88x88、96x96、104x104、120x120、132x132、144x144

正如你所看到的,里面有很多非正方形的尺寸。我所做的是创建一个正方形条形码大小的列表,然后在检查generate()调用的返回值时尝试每个大小

//支持的方形条码尺寸
int[]条码尺寸={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条码=新的BarcodeDatamatrix();
条形码.setOptions(BarcodeDatamatrix.DM_AUTO);
//尝试生成条形码,根据需要调整大小。
对于(int-generateCount=0;generateCount
谢谢你,乔恩先生

对于那些需要它的人,这里是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
你必须改变

barcode.setOptions(BarcodeDatamatrix.DM_AUTO);

对于C#中需要它的人:

//支持的方形条码尺寸
int[]条码尺寸={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条码=新的BarcodeDatamatrix();
选项=(BarcodeDatamatrix.DM_AUTO);
//尝试生成条形码,根据需要调整大小。
对于(int-generateCount=0;generateCount

顺便问一下,有人知道如何用这个制作矩形条形码吗?每当我选择矩形格式时,它都会给我一个错误代码3(DM_Error_Invalid_Square)。

用Java实现,使用itext将条形码添加到现有的pdf文件中

使用的Jar文件:itext,commons-codec-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();

    }
InputStream InputStream=newbytearrayinputstream(FileUtils.readFileToByteArray(新文件(“c:/tmp/your_existing.pdf”));
FileOutputStream outStream=新的FileOutputStream(“c:/tmp/pdf_copy_1.pdf”);
PdfContentByte contentByte=null;
int totalPages=0;
PdfReader PdfReader=null;
PdfStamper PdfStamper=null;
试一试{
pdfReader=新的pdfReader(inputStream);
totalPages=pdfReader.getNumberOfPages();
pdfStamper=新pdfStamper(pdfReader,扩流);
String text=“样本条码测试”;
字符串barcodeData=DigestUtils.md5Hex(文本);--编码条形码文本。。。
//将条形码添加到pdf中的每个页面

对于(int i=1;i
DM_B256
给了我一个漂亮的14像素x 14像素位图/png。我可以在android上用条形码扫描仪扫描它。你想要类似的东西吗
barcode.setOptions(BarcodeDatamatrix.DM_B256);
// 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);
            }
        }
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();

    }