Itext 5.0 怎么生成显示条形码

 官方的demo中有条形码的工具,但是生成出来的样式不好调整,这里还是放出官方的demo地址,大家可以test试试:https://itextpdf.com/en/resources/examples/itext-5-legacy/generating-and-displaying-bar-codes

怎么使用我们自己生成的条形码呢?

安装依赖

<properties>
        <zxing.version>3.3.3</zxing.version>
    </properties>

<!-- google zxing 多格式1D / 2D条码图像处理库-->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>${zxing.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>${zxing.version}</version>
        </dependency>

封装工具:

public class BarCodeUtil {
    /**
     * 获取base64格式条形码
     * @param contents
     * @return
     * @throws WriterException
     * @throws IOException
     */
    public static String getBase64Encode(String contents) throws WriterException, IOException {
        return new String("data:image/jpeg;base64,"+Base64.encode(getBytes(contents)));
    }

    /**
     * 获取字节码
     * @param contents
     * @return
     * @throws WriterException
     * @throws IOException
     */
    public static byte[] getBytes(String contents) throws WriterException, IOException {
        BufferedImage bufferedImage = encode(contents);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ImageIO.write(bufferedImage,"jpeg",outputStream);
        outputStream.close();
        return outputStream.toByteArray();
    }

    /**
     * 生成条形码
     * @param contents 内容
     * @return
     */
    public static BufferedImage encode(String contents) throws WriterException {
        //配置参数
        Map<EncodeHintType,Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        // 容错级别 这里选择最高H级别
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        //设置条码边距 默认为10
        hints.put(EncodeHintType.MARGIN, 0);
        //宽度为条码自动生成规则的宽度
        int width = new Code128Writer().encode(contents).length;
        //高度可由前端控制 不影响编码识别
        int height = 70;
        //条码放大倍数
        int codeMultiples = 1;
        //条码内容宽度
        int codeWidth = width * codeMultiples;
        // 参数分别为 编码内容,编码类型,内容宽度,内容高度,设置参数
        BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,
                BarcodeFormat.CODE_128, codeWidth, height, hints);
        return  MatrixToImageWriter.toBufferedImage(bitMatrix);
    }

    /**
     * 解析条形码
     * @param inputStream
     * @return
     */
    public static String decode(InputStream inputStream) {
        BufferedImage image = null;
        Result result = null;
        try {
            image = ImageIO.read(inputStream);
            if (image == null) {
                throw new RuntimeException("the decode image may be not exists.");
            }
            LuminanceSource source = new BufferedImageLuminanceSource(image);
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
            result = new MultiFormatReader().decode(bitmap, null);
            return result.getText();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

 在Itext5中根据数据生成对应条形码,这样生成条形码的时候,调整起来方便很多

// 条形码
Image barCodeImg = Image.getInstance(BarCodeUtil.getBytes(no));
barCodeImg.scaleAbsolute(120, 40);
cell = new PdfPCell(barCodeImg, false);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用iText库可以很方便地生成PDF文件,并在其中添加条形码。下面是一个使用iText生成PDF文件并添加条形码的示例代码: ```java import com.itextpdf.io.font.FontConstants; import com.itextpdf.kernel.colors.Color; import com.itextpdf.kernel.colors.DeviceRgb; import com.itextpdf.kernel.geom.Rectangle; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.kernel.pdf.canvas.PdfCanvas; import com.itextpdf.kernel.pdf.xobject.PdfFormXObject; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Paragraph; import com.itextpdf.layout.property.TextAlignment; import com.itextpdf.text.pdf.Barcode128; import java.io.FileNotFoundException; public class BarcodeGenerator { public static void main(String[] args) { String outputFilePath = "path/to/output.pdf"; String barcodeText = "1234567890"; try { // 创建PDF文档 PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outputFilePath)); Document doc = new Document(pdfDoc); // 创建条形码对象 Barcode128 barcode = new Barcode128(pdfDoc); barcode.setCode(barcodeText); // 设置条形码的颜色 Color barcodeColor = new DeviceRgb(0, 0, 0); // 黑色 barcode.setColor(barcodeColor, null); // 将条形码绘制到PDF页面上 PdfFormXObject barcodeXObject = barcode.createFormXObject(pdfDoc); PdfCanvas canvas = new PdfCanvas(pdfDoc.addNewPage()); canvas.addXObject(barcodeXObject, 36, 36); // 添加条形码文本 Paragraph text = new Paragraph(barcodeText) .setFontFamily(FontConstants.COURIER) .setFontSize(12) .setTextAlignment(TextAlignment.CENTER); doc.add(text); // 关闭文档 doc.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } } ``` 这段代码使用了iText库的`Barcode128`类来生成条形码,并使用`PdfCanvas`将条形码绘制到PDF页面上。同时,还添加了条形码文本内容。你可以根据需要修改条形码的颜色、位置和文本样式等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值