문제

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입니다.

도움이 되었습니까?

해결책

나는이 정확한 문제에 부딪쳤다. 나는 이것을 파악하기 위해 itext 소스 코드를 파고 들었다. ITEXT는 제공 한 텍스트에 맞게 바코드를 크기로 조정하고 있습니다.

ITEXT는 Datamatrix Barcodes의 다음 크기를 지원합니다 : 10x10, 12x12, 8x18, 14x14, 8x32, 16x16, 12x26, 18x18, 20x20, 12x36, 22x22, 16x36, 24x24, 26x26, 16x48, 32x32, 36x36, 40x40, 44x4, 44x4, 44x4, 44x4, 44x4, 44x36. , 64x64, 72x72, 80x80, 88x88, 96x96, 104x104, 120x120, 132x132, 144x144

보시다시피, 거기에는 여러 가지 비평가 크기가 있습니다. 내가 한 일은 제곱 바코드 크기의 목록을 작성한 다음 generate () 호출의 반환 값을 확인하면서 각 크기를 시도하는 것입니다.

// 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);
            }
        }

BTW, 누구든지 이것으로 직사각형 바코드를 만드는 방법을 아는 사람이 있습니까? 직사각형 형식을 선택할 때마다 3 (dm_error_invalid_square)의 오류 코드가 제공됩니다.

당신은 변경해야합니다

barcode.setOptions(BarcodeDatamatrix.DM_AUTO);

에게

barcode.setOptions(BarcodeDatamatrix.DM_B256);

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();

    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top