簡體   English   中英

如何使用帶有barcode4j庫的pdfbox(1.8.12)將Code128條形碼圖像添加到現有pdf?

[英]How to add Code128 Barcode image to existing pdf using pdfbox(1.8.12) with barcode4j library?

我正在嘗試從條形碼4j庫(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();

有人可以幫忙嗎?

非常感謝您對Tilman的幫助。 這是我所做的

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)在保留內容的同時將圖像添加到現有頁面:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM