2014-12-18 5 views
0

Я создаю PDF-документ с изображениями и текстом в Android с помощью iText. Каждая страница имеет изображение сверху, а затем текст. На первой странице изображение правильно выровнено с верхним краем страницы, но на последующих страницах между верхним краем и верхней частью изображения имеется промежуток в 10 точек.iText выравнивание изображения на второй странице

Вот мой код:

// Create PDF document object 
float pageMargin = 72; 
document = new com.itextpdf.text.Document(PageSize.A4, pageMargin, pageMargin, pageMargin, pageMargin); 
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(myFile.getAbsoluteFile())); 
document.open(); 
PdfContentByte cb = pdfWriter.getDirectContent(); 

for (PicturePage picPage : picPageList) 
{ 
    // Draw a border on the page 
    cb.moveTo(pageMargin, pageMargin); 
    cb.lineTo(pageMargin, (pageHeight - pageMargin)); 
    cb.lineTo((pageWidth - pageMargin), (pageHeight - pageMargin)); 
    cb.lineTo((pageWidth - pageMargin), pageMargin); 
    cb.lineTo(pageMargin, pageMargin); 
    cb.stroke(); 

    // Get an image from the file system and scale to required size 
    String imgFileName = picPage.getImagePath(); 
    image = Image.getInstance(imgFileName); 
    float fitWidth = 400; 
    float fitHeight = 300; 
    image.scaleToFit(fitWidth, fitHeight); 

    image.setAlignment(Image.ALIGN_CENTER | Image.ALIGN_TOP); 
    document.add(image); 

    // Add the text to the page. 
    String theText = picPage.getText(); 
    String[] arrParagraphs = theText.split("\n"); 

    for (int i=0; i<arrParagraphs.length; i++) 
    { 
     String paragraphText = arrParagraphs[i]; 
     Paragraph p = new Paragraph(paragraphText); 
     document.add(p); 
    } 

    // Start a new page 
    document.newPage(); 
} 

Я пробовал различные комбинации Image.ALIGN ... и Image.TEXTWRAP, но ни один из них не удалить разрыв. Я попытался изменить порядок размещения изображения и границы, но никаких изменений. Я также попытался удалить текст и границу, но размещение изображения остается тем же.

Любые идеи, как исправить это?

Спасибо, Деклан

ответ

0

Я надеюсь, вы не будете возражать, если я разделяю свое мнение, но мне не нравится ваш код. Есть намного лучшие способы визуализации изображений, за которыми следует надпись, чем то, как вы это делаете.

Теперь позвольте мне объяснить, что вызывает появление небольшого промежутка.

Когда вы впервые создаете свой документ, значение , ведущего, равно нулю. (ведущий - это расстояние между базовыми линиями двух последовательных линий). Это значение изменяется, как только вы добавляете первый объект, который определяет ведущий. В вашем случае этот объект является Paragraph.

Хотя вы не определяете лидирующую позицию явно, ваш абзац использует шрифт по умолчанию (Helvetica) и размер шрифта по умолчанию (12). По умолчанию по умолчанию размер шрифта в 1,5 раза (18).

Теперь, когда вы переходите на следующую страницу, используется это ведущее, представляя небольшой промежуток, предшествующий изображению. Вы могли бы решить эту проблему путем добавления пустой Paragraph с ведущими 0 перед запуском новой страницы: (. Добавить это до document.newPage();)

document.add(new Paragraph(0)); 

Однако: если бы я тебя, я бы выбросить свой код , и я добавлю свое изображение и свою подпись, используя PdfPTable с фиксированной шириной и фиксированными высотами для ячеек. Вы можете добавить эту таблицу либо с помощью document.add(), либо с помощью метода writeSelectedRows(). В качестве альтернативы я мог бы добавить изображение в абсолютном положении и добавить подпись с помощью объекта ColumnText. Существует много разных способов достижения желаемого. То, как вы это делаете, может работать, но это не оптимально.

+0

Благодарим вас за ответ Бруно. Я использую iText только пару дней, поэтому я все еще разбираюсь во всех концепциях. Я также попробую ваши предложения по альтернативам. Еще раз спасибо. – Declan

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