Отчет об ошибке таблицы: когда ширина содержимого выходит за пределы столбца, добавляется разрыв страницы.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Отчет об ошибке таблицы: когда ширина содержимого выходит за пределы столбца, добавляется разрыв страницы.

Сообщение Anonymous »

Шаги по воспроизведению
Описание: я разрабатываю приложение Java, которое использует itext и html2pdf для отображения PDF-файлов. В одном из наших PDF-файлов есть ошибка, и мы обнаружили, что проблема может быть воспроизведена с использованием только компонентов itext, что заставляет нас полагать, что это ошибка в itext.
версия itext: 9.1.0 – мы обнаружили эту проблему в версии itext 7.1.16 и можем воспроизвести ее до версии 9.1.0, пример кода был разработан с использованием версии 9.1.0.
html2pdf версия: 6.1.0
Пример кода

Код: Выделить всё

package org.example;

import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;
import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.colors.Color;
import com.itextpdf.kernel.colors.DeviceRgb;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.borders.Border;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.font.FontProvider;
import com.itextpdf.layout.properties.UnitValue;
import java.io.File;

public class Main {
public static final String DEST = "./target/sandbox/tables/simple_table9.pdf";

public static void main(String[] args) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();

new Main().manipulatePdf(DEST);
}

protected void manipulatePdf(String dest) throws Exception {
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
pdfDoc.setDefaultPageSize(PageSize.A4.rotate());
Document doc = new Document(pdfDoc);

doc.add(new Paragraph("With 3 columns:"));

UnitValue[] unitValues = new UnitValue[]{
new UnitValue(UnitValue.POINT, 80),
new UnitValue(UnitValue.POINT, -1),
new UnitValue(UnitValue.POINT, 70),
new UnitValue(UnitValue.POINT, 40),
new UnitValue(UnitValue.POINT, 50),
new UnitValue(UnitValue.POINT, 55),
new UnitValue(UnitValue.POINT, 50),
new UnitValue(UnitValue.POINT, 55)
};
ConverterProperties converterProperties = new ConverterProperties();
final FontProvider fontProvider = new DefaultFontProvider(false, false, false);
fontProvider.addFont(StandardFonts.HELVETICA_OBLIQUE);
fontProvider.addFont(StandardFonts.HELVETICA);
converterProperties.setFontProvider(fontProvider);
doc.setFontProvider(fontProvider);
PdfFont font = PdfFontFactory.createFont(StandardFonts.HELVETICA);
doc.setFont(font);
doc.setFontColor(Color.convertRgbToCmyk(new DeviceRgb(255, 0, 0)));
Table table = new Table(unitValues);
doc.setMargins(20, 0, 20,  0);

table.setFontSize(9F);
table.setFixedLayout();
table.useAllAvailableWidth();
table.setKeepTogether(true);
table.setMarginTop(5);
table.setMarginLeft(-25);
table.setPadding(0);

// ROW 1
table.addCell(createCell("1"));
table.addCell(createCell("Eerste lijn beschrijving"));
table.addCell(createCell(""));
table.addCell(createCell("m²"));
table.addCell(createCell("1.050,0000"));
table.addCell(createCell("42.000,00"));
table.addCell(createCell("20.0%"));
table.addCell(createCell("52.500,00"));
// ROW 2
table.addCell(createCell(""));
table.addCell(createCell("Administratie").simulateItalic());
table.addCell(createCell("27.Structuurelementen staal").simulateItalic());
table.addCell(createCell("pallet").simulateItalic());
table.addCell(createCell("1.050,0000").simulateItalic());
table.addCell(createCell("42.000,00").simulateItalic());
table.addCell(createCell("20.0%").simulateItalic());
table.addCell(createCell("52.500,00").simulateItalic());
// ROW 2
//        table.addCell(createCell(""));
//        table.addCell(createCell("Administratie"));
//        table.addCell(createCell("27.Structuurelementen staal"));
//        table.addCell(createCell("pallet"));
//        table.addCell(createCell("1.050,0000"));
//        table.addCell(createCell("42.000,00"));
//        table.addCell(createCell("20.0%"));
//        table.addCell(createCell("52.500,00"));

// ROW 3
table.addCell(createCell("27.22"));
table.addCell(createCell("staalconstructie - thermisch verzinkt profielstaal - buitenconstructie kantoor"));
table.addCell(createCell(""));
table.addCell(createCell("kg"));
table.addCell(createCell("1,0000"));
table.addCell(createCell("3.751,44"));
table.addCell(createCell("11.5%"));
table.addCell(createCell("4.239,13"));
// ROW 4
table.addCell(createCell(""));
table.addCell(new Cell().add(new Paragraph("aankoop basismateriaal")).setPaddingLeft(15F).setBorder(Border.NO_BORDER));
table.addCell(createCell("27.Structuurelementen staal"));
table.addCell(createCell("kg"));
table.addCell(createCell("1,0500"));
table.addCell(createCell("0,91"));
table.addCell(createCell("11.5%"));
table.addCell(createCell("1,03"));

doc.add(table);
doc.close();
}

private Cell createCell(String text) {

var cell = new Cell(1, 1).setKeepTogether(true).setBorder(Border.NO_BORDER);
cell.add(new Paragraph(text));
return cell;
}

}
Ожидаемое поведение
Всего в этой таблице 4 строки, я ожидаю, что они будут размещены на одной странице, сразу друг за другом, без каких-либо разрывов страниц между таблицей.
Фактическое поведение
После первой строки добавляется разрыв страницы. Остальные 3 строки размещаются на следующей странице.
Это происходит только в том случае, если текст выделен курсивом.

Подробнее здесь: https://stackoverflow.com/questions/795 ... reak-is-ad
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»