Cette fois, la table est librement disposée. Dans le paragraphe précédent, la position était légèrement décalée, donc je pense que c'est une façon d'organiser les chaînes de caractères dans un tableau avec une cellule.
FreePosTable.java
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.ColumnDocumentRenderer;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.borders.Border;
import com.itextpdf.layout.borders.SolidBorder;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.HorizontalAlignment;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.UnitValue;
public class FreePosTable {
public static void main(String[] args) throws Exception {
PdfDocument pdf = new PdfDocument(new PdfWriter("FreePosTable.pdf"));
PageSize ps = PageSize.A4.rotate();
PdfPage page = pdf.addNewPage(ps);
PdfCanvas canvas = new PdfCanvas(page);
//Heisei Kaku Gothic
PdfFont font = PdfFontFactory.createFont("HeiseiKakuGo-W5", "UniJIS-UCS2-H");
// Initialize document
Document document = new Document(pdf);
// (100, 200)À la largeur:50, height:Spécifiez 100
Rectangle[] columns = {
new Rectangle(100, 200, 400, 100), // x,y,width,height
};
document.setRenderer(new ColumnDocumentRenderer(document, columns));
//Définition du tableau: 3 colonnes avec un rapport de largeur de 100:200:Désigné comme 300
Table table = new Table(new float[]{100,200,300});
table.setWidth(UnitValue.createPercentValue(100))
.setTextAlignment(TextAlignment.CENTER)
.setHorizontalAlignment(HorizontalAlignment.CENTER);
//Spécification d'en-tête de table
Cell cell = new Cell();
cell.add(new Paragraph("En-tête 1"));
table.addCell(cell);
Cell cell2 = new Cell();
cell2.add(new Paragraph("En-tête 2"));
table.addCell(cell2);
Cell cell3 = new Cell();
cell3.add(new Paragraph("En-tête 3"));
table.addCell(cell3);
//Spécifiez 3 lignes de corps de tableau
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
table.addCell("cellule" + x + "-" + y);
}
}
//Spécification du pied de table
table.addFooterCell("Pied de page 1");
table.addFooterCell("Pied de page 2");
table.addFooterCell("Pied de page 3");
//Spécifiez le cadre du tableau, etc.
Border border = new SolidBorder(ColorConstants.RED, 1.5f);
table.setFont(font);
table.setBorder(border);
document.add(table);
// (100, 200)Ligne vers. largeur:400, height:Vérifiez la plage de 100
//Aussi, mettez une ligne tous les 100 en haut
canvas.moveTo(0, 0).lineTo(100, 200).lineTo(500, 200)
.lineTo(500, 310).moveTo(500, 300)
.lineTo(400, 300).lineTo(400, 310).moveTo(400, 300)
.lineTo(300, 300).lineTo(300, 310).moveTo(300, 300)
.lineTo(200, 300).lineTo(200, 310).moveTo(200, 300)
.lineTo(100, 300).lineTo(100, 310).moveTo(100, 300)
.stroke();
//Close document
document.close();
}
}
La spécification de position est la même que la dernière fois. Afin de rendre la largeur facile à comprendre, j'ai fait un pas sur 100.
Image de sortie
Le tableau est également affiché à partir de la hauteur au-dessus de la position spécifiée de la même manière que la chaîne de caractères. Il ne semble y avoir aucun vide dans le tableau.
Les lignes qui dépassent également sont affichées sur la page suivante. Cependant, le pied de page de l'en-tête semble être affiché sur chaque page.
Table table = new Table (new float [] {100,200,300}); indique que 3 colonnes sont spécifiées et que le rapport de chaque largeur est de 100: 200: 300. La largeur spécifiée est 400, mais la largeur est définie sous forme de pourcentage indépendamment de cela. Cependant, avec new float [] {1,2,3}, la largeur est devenue la même pour une raison quelconque (Est-ce que c'est comme si l'ancienne version avait été faite?) De plus, avec new float [] {10,20,30}, une erreur s'est produite. C'est eu. Pourquoi. Pour le moment, il semble qu'il devrait être spécifié avec une valeur assez élevée. ,
Recommended Posts