6

私は iText を初めて使用し、外部画像を段落に追加するという非常に興味深いケースに直面しました。これが事です:

Document document = new Document();  
PdfWriter.getInstance(document, new FileOutputStream("out2.pdf"));  
document.open();  
Paragraph p = new Paragraph();  
Image img = Image.getInstance("blablabla.jpg");  
img.setAlignment(Image.LEFT| Image.TEXTWRAP);  
// Notice the image added to the Paragraph through a Chunk
p.add(new Chunk(img2, 0, 0, true));  
document.add(p);  
Paragraph p2 = new Paragraph("Hello Worlddd!");  
document.add(p2);

私に写真と「Hello Worlddd!」をくれます。下の文字列。でも、

Document document = new Document();  
PdfWriter.getInstance(document, new FileOutputStream("out2.pdf"));  
document.open();  
Paragraph p = new Paragraph();  
Image img = Image.getInstance("blablabla.jpg");  
img.setAlignment(Image.LEFT| Image.TEXTWRAP);  
// Notice the image added directly to the Paragraph
p.add(img);
document.add(p);  
Paragraph p2 = new Paragraph("Hello Worlddd!");  
document.add(p2);

「Hello worlddd!」という画像と文字列が表示されます。写真の右側とその 1 行上にあります。

その違いの背後にあるロジックは何ですか?

4

2 に答える 2

9

あなたが説明した動作は、2 番目のコード スニペットでは Paragraphがその先頭を調整せず、幅を調整するためです。2番目のスニペットに次の行を追加する場合

p.add("Hello world 1")

直前

p.add(img)

文字列 "Hello world 1" が左側に表示され、文字列 "Hello Worlddd!" の少し上に表示されます。p (System.out.println(p.getLeading())) の先頭を出力すると、画像の高さではなく、低い数値 (通常は 16) であることがわかります。

最初の例では、4 つの引数を持つチャンク コンストラクターを使用します。

new Chunk(img, 0, 0, true)

最後の (true) は行送りを調整するように言っているので、期待どおりに印刷されます。

于 2012-06-21T06:29:58.630 に答える
0

画像を直接追加すると、その配置プロパティ (setAlignment() で設定) が考慮されます。したがって、画像は左側にあり (Image.LEFT)、テキストは折り返されます (Image.TEXTWRAP)。

イメージをチャンクでラップすると、テキストのチャンクであるかのように処理されます。したがって、画像に固有の配置プロパティは失われます。これにより、テキストが画像の下に表示されます。

Image.RIGHT を試すと、これがより明確になります。最初の例では何も変わりません: 画像はまだ左側にあります。2 番目の例では、イメージは右に配置され、テキストは左に折り返されます。

于 2012-07-17T06:41:20.733 に答える