import java.io.FileOutputStream;
import com.itextpdf.layout.element.List;
import com.itextpdf.io.font.FontConstants;
import com.itextpdf.kernel.color.Color;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.border.Border;
import com.itextpdf.layout.border.SolidBorder;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.property.TextAlignment;
public static void main(String[] args) throws Exception {
try
{
PdfWriter pdfWriter = new PdfWriter("output1.pdf");
PdfDocument pdfDocument = new PdfDocument(pdfWriter);
Document document = new Document(pdfDocument);
document.setLeftMargin(30);
document.setRightMargin(30);
final Table myTable = new Table(new float[]
{ 30, 65, 120, 180, 100, 25 });// { 30, 65, 150, 180, 100, 25 }); works.
setTableProperties(myTable, pdfDocument, 70, 7, "italic", Color.BLACK);
myTable.setFixedLayout();
final PdfFont font = getPdfFont(FontConstants.HELVETICA);
myTable.setFont(font).setFontSize(7).setItalic().setFontColor(Color.WHITE);
//*** Start - Added Header*****
//BLOCK THIS TO See Issue 1 below, UNBLOCK Causes issue 2 and it hangs
createTableHeader(myTable);
//*** End - Added Header *****
//*** Start Add Data ****
equipmentTableData(myTable, "NUMITEMS", false, TextAlignment.CENTER);
equipmentTableData(myTable, "CONDENSADORCONDENSAD", false, TextAlignment.CENTER);
// MATNUMBERUCACHBMPVAIRD4EFANFUC (com.itextpdf.layout.renderer.RootRenderer - Element does not fit current area)
// MATNUMBERUCACHB-PVAIRD4EFANFUC (Works ok.. it wraps at '-')
// MATNUMBERUCACH1MPVAIRD4EFANFUC (added '1' in middle Works ok.. 'MATNUMBERUCACH1MPVAIRD4EF' 'ANFUC')
equipmentTableData(myTable, "MATNUMBERUCACHBMPVAIRD4EFANFUC", false, TextAlignment.CENTER);
equipmentTableData(myTable, "MATERIALDESCRIPTIONDOPKSOPKDKJSLIOULOISOOPWOSKLISL", false, TextAlignment.CENTER);
equipmentTableData(myTable, "DETAILS", false, TextAlignment.CENTER);
equipmentTableData(myTable, "QTY", false, TextAlignment.CENTER);
//*** End Add Data ****
document.add(myTable); // Goes in infinite loop if createTableHeader is enabled above, and i can see pdf file size growing
document.close();
}
catch (final Exception e)
{
System.out.println("Error " + e);
}
}
private static Table createTableHeader(final Table myTable)
{
Cell customCell;
List listforPrepared;
listforPrepared = new List().setSymbolIndent(0).setListSymbol(" ");
listforPrepared.add("Line");
listforPrepared.add("Item");
customCell = new Cell(1, 1).add(listforPrepared).setBackgroundColor(Color.GRAY).setFontColor(Color.WHITE)
.setTextAlignment(TextAlignment.CENTER);
myTable.addHeaderCell(customCell);
listforPrepared = new List().setSymbolIndent(0).setListSymbol(" ");
listforPrepared.add("Tag:");
customCell = new Cell(1, 1).add(listforPrepared).setBackgroundColor(Color.GRAY).setFontColor(Color.WHITE)
.setTextAlignment(TextAlignment.CENTER);
myTable.addHeaderCell(customCell);
listforPrepared = new List().setSymbolIndent(0).setListSymbol(" ");
listforPrepared.add("Material");
listforPrepared.add("Number");
customCell = new Cell(1, 1).add(listforPrepared).setBackgroundColor(Color.GRAY).setFontColor(Color.WHITE)
.setTextAlignment(TextAlignment.CENTER);
myTable.addHeaderCell(customCell);
listforPrepared = new List().setSymbolIndent(0).setListSymbol(" ");
listforPrepared.add("Description");
customCell = new Cell(1, 1).add(listforPrepared).setBackgroundColor(Color.GRAY).setFontColor(Color.WHITE)
.setTextAlignment(TextAlignment.CENTER);
myTable.addHeaderCell(customCell);
listforPrepared = new List().setSymbolIndent(0).setListSymbol(" ");
listforPrepared.add("Detail");
customCell = new Cell(1, 1).add(listforPrepared).setBackgroundColor(Color.GRAY).setFontColor(Color.WHITE)
.setTextAlignment(TextAlignment.CENTER);
myTable.addHeaderCell(customCell);
listforPrepared = new List().setSymbolIndent(0).setListSymbol(" ");
listforPrepared.add("QTY");
customCell = new Cell(1, 1).add(listforPrepared).setBackgroundColor(Color.GRAY).setFontColor(Color.WHITE)
.setTextAlignment(TextAlignment.CENTER);
myTable.addHeaderCell(customCell);
return myTable;
}
private static Table equipmentTableData(final Table Table, final String data, final boolean isGrey, final TextAlignment textAligned)
{
final PdfFont helvetica = getPdfFont(FontConstants.HELVETICA);
final Text dataText = new Text((data)).setFont(helvetica).setFontSize(7).setItalic()
.setFontColor(Color.BLACK); // new Font(Font.FontFamily.HELVETICA, 7, Font.ITALIC);
final Cell cellData = new Cell(1, 1).add(new Paragraph(dataText));
cellData.setTextAlignment(textAligned);
if (isGrey)
{
cellData.setBackgroundColor(Color.LIGHT_GRAY);
}
else
{
cellData.setBackgroundColor(Color.WHITE);
}
cellData.setPadding(0f);
Table.addCell(cellData);
return Table;
}
public static void setTableProperties(Table tblName, PdfDocument pdf, int widthSize, int fontSize, String fontStyle, Color fontColor)
{
tblName.setWidth(pdf.getDefaultPageSize().getWidth() - widthSize); /* Set Width of a Table */
tblName.setFontColor(fontColor); /* Set Font Color */
if (fontStyle.toLowerCase() == "italic")
tblName.setFontSize(fontSize).setItalic();
else if (fontStyle.toLowerCase() == "bold")
tblName.setFontSize(fontSize).setBold();
else if (fontStyle.toLowerCase() == "bold-italic")
tblName.setFontSize(fontSize).setBold().setItalic();
}
public static PdfFont getPdfFont(final String font)
{
try
{
return PdfFontFactory.createFont(font);
}
catch (final Exception e)
{
System.out.println("Error " + e);
}
return null;
}
Почему слово переносится в ячейку только в определенных случаях, как мне исправить это, чтобы оно работало (Переносить текст в столбце) независимо от текста.
- MATNUMBERUCACHBMPVAIRD4EFANFUC
(com.itextpdf.layout.renderer.RootRenderer - элемент не подходит
текущая область) Почему это так, не работает текст не отображается в PDF (а также создает проблему ниже ..)
- MATNUMBERUCACHB-PVAIRD4EFANFUC (Работает нормально .. оборачивается на
'-')
- MATNUMBERUCACH1MPVAIRD4EFANFUC (добавлено '1' в середине Работает нормально, разбивается на 2 как 'MATNUMBERUCACH1MPVAIRD4EF' 'ANFUC')
Другая проблема, в коде, если я вызываю метод «createTableHeader», то в «document.add (myTable)» не возвращается и идет информация бесконечного цикла, и файл продолжает расти, ошибок нет, исключение не выдается конечно, если есть способ справиться с этим.