2016-07-05 48 views
0

我想從barcode4j庫(code128bean,其他條碼豆)生成條碼,並嘗試添加到現有的PDF。條形碼圖像使用下面的代碼在本地創建。如何使用pdfbox(1.8.12)將barcode4j庫添加到現有的pdf中Code128 Barcode圖像?

//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()方法檢索,像(List<PDPage> pages = catalog.getAllPages();

有人可以在此幫助現有PDPages?

非常感謝你的幫助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")); 

條碼正在創建,但它是以垂直方式創建的。我想以水平方式看到。再次感謝你的幫助。

+0

這是kindof無糖否,編輯問題以添加新問題。此外,無論如何,我在評論中回答了這個問題。 –

回答

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

非常感謝你的幫助。根據代碼中的line1,canvas1對象仍使用輸出流,輸出流intern由outputfile創建。 – venkata

+0

@venkata對不起!我錯過了。我調整了我的答案,還有另一個構造函數。 –

+0

我找到了另一個構造函數。有什麼辦法可以在水平模式下製作條形碼嗎? – venkata

相關問題