如何使用带有barcode4j库的pdfbox(1.8.12)将Code128条形码图像添加到现有的pdf中?

时间:2016-07-05 15:08:56

标签: pdfbox barcode4j

我正在尝试从barcode4j库(code128bean,其他条形码bean)生成条形码并尝试添加到现有的pdf。使用以下代码在本地创建条形码图像。

//Create the barcode bean
Code128Bean code128Bean = new Code128Bean();
final int dpi = 150;
code128Bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi)); //makes the narrow bar 
//width exactly one pixel
//bean.setCodeset(2);
code128Bean.doQuietZone(false);

//Open output file
File outputFile = new File("D:/barcode4jcod128.png"); //I dont want to create it
OutputStream code128Stream = new FileOutputStream(outputFile);
try {
    //Set up the canvas provider for monochrome PNG output 
    BitmapCanvasProvider canvas1 = new BitmapCanvasProvider(
            code128Stream, "image/x-png", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);

    //Generate the barcode
    code128Bean.generateBarcode(canvas1, "123456");

    //Signal end of generation
    canvas1.finish();
} finally {
    code128Stream.close();
}
  1. 我的问题是我不想创建图像并将其保存在文件系统中,然后将其作为图像添加到pdf中。我只是想动态创建我的意思是只是动态创建条形码图像并将其添加到pdf中。
  2. 如何将页面大小(如PDPage.PAGE_SIZE_A4)设置为我从catalog.getAllPages()方法检索到的现有PDPage,如(List<PDPage> pages = catalog.getAllPages();
  3. 有人可以为此提供帮助吗?

    非常感谢你帮助蒂尔曼。这就是我做的事情

    public static BufferedImage geBufferedImageForCode128Bean(String barcodeString) {
        Code128Bean code128Bean = new Code128Bean();
        final int dpi = 150;
        code128Bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi)); //makes the narrow bar 
        code128Bean.doQuietZone(false);
        BitmapCanvasProvider canvas1 = new BitmapCanvasProvider(
            dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0
        );
        //Generate the barcode
        code128Bean.generateBarcode(canvas1, barcodeString);
        return canvas1.getBufferedImage();
    }
    
    // main code
    PDDocument finalDoc = new PDDocument();
    BufferedImage bufferedImage = geBufferedImageForCode128Bean("12345");
    PDXObjectImage pdImage = new PDPixelMap(doc, bufferedImage);
    PDPageContentStream contentStream = new PDPageContentStream(
        finalDoc, pdPage, true, true, true
    );
    contentStream.drawXObject(pdImage, 100, 600, 50, 20);
    contentStream.close();
    finalDoc.addPage(pdPage);
    finalDoc.save(new File("D:/Test75.pdf"));
    

    条形码正在创建,但它是以垂直方式创建的。我希望以横向的方式看待。再次感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

1)在保留内容的同时将图像添加到现有页面:

BitmapCanvasProvider canvas1 = new BitmapCanvasProvider(
    dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0
);
code128Bean.generateBarcode(canvas1, "123456");
canvas1.finish();
BufferedImage bim = canvas1.getBufferedImage();

PDXObjectImage img = new PDPixelMap(doc, bim);
PDPageContentStream contents = new PDPageContentStream(doc, page, true, true, true);
contents.drawXObject(img, 100, 600, bim.getWidth(), bim.getHeight());
contents.close();

2)在现有页面上将媒体框设置为A4:

page.setMediaBox(PDPage.PAGE_SIZE_A4);