2016-07-05 40 views
0

私はbarcode4jライブラリ(code128bean、他のバーコード豆)からバーコードを生成しようとしており、既存のpdfに追加しようとしています。バーコードイメージは、以下のコードを使用してローカルに作成されています。pdfbox(1.8.12)とbarcode4jライブラリを使ってCode128バーコードイメージを既存の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. 私は( List<PDPage> pages = catalog.getAllPages();)のように、私は catalog.getAllPages()メソッドから取得した既存のPDPagesに( PDPage.PAGE_SIZE_A4のような)ページサイズを設定するにはどうすればよい

誰かがこれを助けることができますか?

ご協力ありがとうございます。ティルマン。ここで私はバーコードが作成されつつあるが、それは垂直に作成され

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がNO-ありますいいえ、質問を編集して新しい質問を追加します。それに、私はそのコメントにとにかく答えました。 –

答えて

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

ありがとうございました。コードの1行目のように、canvas1オブジェクトは出力ストリームを使用していますが、outputstreamによってoutputstreamが作成されています。 – venkata

+0

@venkata申し訳ありません!私は逃しました。私は私の答えを調整しました、別のコンストラクタがあります。 –

+0

私は別のコンストラクタを見つけました。水平モードでバーコードを作る方法はありますか? – venkata

関連する問題