2012-06-20 3 views
2

Я новичок в iText и столкнулся с настоящим интересным случаем о добавлении внешних изображений в абзац. Вот что:iText - Добавление внешнего изображения с помощью Chunk

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

даёт мне картинку и строку «Привет, мир! расположенного с правой стороны изображения и одной линии над ним.

Какова логика этой разницы?

+0

Это может быть только опечатка, но в вашем первом фрагменте вы включаете 'img2' вместо' img'. –

ответ

4

Поведение, о котором вы описали, связано с тем, что во втором фрагменте кода абзац не корректирует его ведущий, но регулирует его ширину. Если во втором фрагменте вы добавляете строку

p.add("Hello world 1") 

непосредственно перед

p.add(img) 

вы увидите строку «Привет мир 1» на левой и немного выше строки «Hello Worlddd! ». Если вы выводите начало p (System.out.println (p.getLeading()), вы можете видеть, что это небольшое число (обычно 16), а не высота изображения.

В первом примере вы используете кусок конструктор с 4-мя аргументы

new Chunk(img, 0, 0, true) 

с последним (правда) говорит настроить ведущий, так что печать, как вы ожидали.

0

Если добавить изображение непосредственно, его свойство выравнивания (набор с setAlignment()), поэтому изображение находится слева (Image.LEFT), и текст обернут вокруг (Image.TEXTWRAP).

Если вы обертываете изображение в Chunk, оно обрабатывается, как если бы это был фрагмент . Таким образом, свойства выравнивания, характерные для изображений, теряются. Это приводит к тому, что текст находится под изображением.

Если вы попробуете Image.RIGHT, это станет более очевидным. В первом примере ничего не меняется: изображение все еще слева. Во втором примере изображение выравнивается вправо, а текст завершается слева от него.

Смежные вопросы