2011-07-08 5 views
3

私の要件は、任意のテキストとバーコードの両方を含むpdfドキュメントを生成することです。私はpdf生成部分に対処することに関連するquestionを持っていますが、ここでは、Javaのpdfにバーコードを組み込む方法について知りたいと思います。動的に生成されるバーコード(Java)を組み込むpdfドキュメントを生成するために使用するものは何ですか?

これまでのところ、私はbarcode4jは、Apache FOPでそれを行う方法についての明確な説明発見しました:Instructions for the Apache FOP extension

をしかし、それは私がPDFフォーム(で行くことを好むようXSL-FOは私の要件のための主要な選択肢ではないことになりますiTextやPDFBoxなどを使用して)。再び、これはまだ最終的なものではありません。

pdfのバーコードに画像やフォントを使用していますか? pdf API以外の依存関係(フォント、ライブラリ)はどうすればいいですか?

答えて

1

私はバーコードイメージジェネレータを使用し、それをHTML文書に埋め込み、PDFに変換しました。

XHTMLをPDFとしてレンダリングする場合はthis libraryをご覧ください。最初に計画したように、バーコードを画像としてレンダリングするには、barcode4jを使用します。

+0

しかし、これは無料ではありません:それは中に商用ライセンスを必要とすることiTextのが必要です私の場合。 – topchef

+0

GPL3です。免責を必要としない限り、商用ライセンスは必要ありません。 –

1

あなたは、Java以外のツールを使用して、あなたのPDF生成要件を緩和するために用意されている場合は、あなたが見つけるかもしれない以下の便利:

  1. レイアウトバーコードのプレースホルダをHTML/CSS/JSを使用して、ページテンプレート

  2. Barcode4J〜output SVGを使用して、それをテンプレートに入れます。
  3. wkhtmltopdfコマンドラインツールを使用してページをレンダリングします。 wkhtmltopdfはWebKitを使用してHTML/CSSを使用してPDFレイアウトを適切に制御します。
2

pdfのバーコードを生成するにはiTextを強くお勧めします。あなたはMavenを使用する場合は、これらの依存関係を追加することができますし、起動することができます。

<dependency> 
     <groupId>com.lowagie</groupId> 
     <artifactId>itext</artifactId> 
     <version>2.0.7</version> 
    </dependency> 
    <dependency> 
     <groupId>bouncycastle</groupId> 
     <artifactId>bcmail-jdk14</artifactId> 
     <version>136</version> 
    </dependency> 
    <dependency> 
     <groupId>bouncycastle</groupId> 
     <artifactId>bcprov-jdk14</artifactId> 
     <version>136</version> 
    </dependency> 

をわずか数行のコードが必要とされているバーコードを生成するには:

Barcode128 code128 = new Barcode128(); 
    code128.setCodeType(Barcode128.CODE128); 
    code128.setCode(new Long(1234559690234234); 
    Chunk chunk = new Chunk(code128.createImageWithBarcode(cb, null, null), 
      200, -30); 
    Paragraph p = new Paragraph(chunk); 

は、文書と出来上がりに段落を追加します。そこに行く。良いチュートリアルでは、ここで見つけることができます:

IText Example

+0

ありがとう、間違いなくそれを試してみましょう。 – topchef

5

私はPDFBoxやバーベキューを使用してPDFファイルにバーコードを追加することに成功しました。バーベキューでは、バーコードを自分で描画するための出力インターフェイスを提供しています。私はこのインタフェースをdrawBar()がPDPageContentStream.fillRect()の呼び出しに変換するような方法で実装しました。 PDFへのバーコードを追加する

は今ダウンに来る:

Barcode barcode = BarcodeFactory.createCode128(text); 
barcode.output(new PDFBoxOutput(pageContentStream, startX, startY, height)); 

PDFBoxOutputクラスは次のようになります。

import java.awt.Color; 
import java.io.IOException; 

import net.sourceforge.barbecue.output.LabelLayout; 
import net.sourceforge.barbecue.output.Output; 
import net.sourceforge.barbecue.output.OutputException; 

import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; 

public class PDFBoxOutput implements Output { 

    /** The widths and heights from Barbecue are multipplied with this scalar to get the widths and heights for PDFBox. */ 
    public final static float SCALAR = 0.5f; 

    private final PDPageContentStream stream; 
    private final float startX; 
    private final float startY; 
    private final float height; 
    private boolean toggleDrawingColor; 

    PDFBoxOutput(PDPageContentStream stream, float startX, float startY, float height) { 
     this.stream = stream; 
     this.startX = startX; 
     this.startY = startY; 
     this.height = height; 
    } 

    @Override 
    public void beginDraw() throws OutputException {} 

    @Override 
    public int drawBar(int x, int y, int width, int height, boolean paintWithForegroundColor) throws OutputException { 
     if (paintWithForegroundColor == !toggleDrawingColor) { 
      try { 
       stream.setLineWidth(0.0f); 
       stream.setStrokingColor(Color.BLACK); 
       stream.fillRect(startX + SCALAR * x, startY - SCALAR * y, SCALAR * width, this.height); 
       stream.stroke(); 
      } catch (IOException e) { 
       throw new OutputException(e); 
      } 
     } 
     return width; 
    } 

    @Override 
    public int drawText(String text, LabelLayout layout) throws OutputException { 
     return 0; 
    } 

    @Override 
    public void endDraw(int width, int height) throws OutputException {} 

    @Override 
    public void paintBackground(int x, int y, int width, int height) {} 

    @Override 
    public void toggleDrawingColor() { 
     toggleDrawingColor = !toggleDrawingColor; 
    } 

} 
+0

それは動作します。最初は、バーコードが生成されましたが、スキャンされませんでした。 1)SCALARを1に変更しますが、バーコードは巨大で醜いです。または2)Adobe設定(または同等のもの)でDPIを変更します。編集 - >環境設定 - >ページ表示 - >解像度 - カスタム解像度は300ピクセル/インチ)。私が96にいた。 –

+0

これはコメントの目的ではないが、これは本当にありがとう、これは私のために完全に働いた。 – UpAllNight

関連する問題