iTextSharp - Table en coordonnées absolues
Je suis en train d'utiliser cette tutoriel à table de position en coordonnées absolues à l'aide de iTextSharp. Voici mon code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
namespace iTextSharpQuestion
{
class Program
{
static void Main(string[] args)
{
System.IO.FileStream fs = new FileStream(@"C:\Temp\" + "First PDF document.pdf", FileMode.Create);
Document document = new Document(PageSize.LETTER, 25, 25, 30, 30);
document.SetPageSize(iTextSharp.text.PageSize.LETTER.Rotate());
PdfWriter writer = PdfWriter.GetInstance(document, fs);
document.Open();
PdfContentByte cb = writer.DirectContent;
BaseFont f_cn = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false);
cb.BeginText();
cb.SetFontAndSize(f_cn, 9);
PdfPTable ObjTestTable = TestTable();
ObjTestTable.WriteSelectedRows(0, -1, 200, 50, cb);
cb.EndText();
//Close the document
document.Close();
//Close the writer instance
writer.Close();
//Always close open filehandles explicity
fs.Close();
}
public static PdfPTable TestTable()
{
PdfPTable table = new PdfPTable(3);
PdfPCell cell = new PdfPCell(new Phrase("Header spanning 3 columns"));
cell.Colspan = 3;
cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
table.AddCell(cell);
table.AddCell("Col 1 Row 1");
table.AddCell("Col 2 Row 1");
table.AddCell("Col 3 Row 1");
table.AddCell("Col 1 Row 2");
table.AddCell("Col 2 Row 2");
table.AddCell("Col 3 Row 2");
return table;
}
}
}
La ligne suivante génère message d'erreur
ObjTestTable.WriteSelectedRows(0, -1, 200, 50, cb);
Le message d'erreur est
La largeur de la table doit être supérieure à zéro.
Tutoriel suggère d'utiliser la largeur de zéro. Ce que je fais mal?
OriginalL'auteur user1700890 | 2015-02-25
Vous devez vous connecter pour publier un commentaire.
Vous avez plusieurs erreurs dans votre code.
Lorsque vous ajoutez une table de positions absolues, il est interdit d'utiliser
BeginText()
etEndText()
que serait la cause de imbriqués les objets texte. Comme expliqué dans la norme ISO-32000-1, vous ne pouvez pas côtéBT
/ET
séquences et c'est exactement ce qui va se passer si votre table contient du texte. Comme vous ne pouvez pas ajouter un tableau à l'intérieur d'un objet de texte, il ne fait pas de sens d'utiliserSetFontAndSize()
.Ceci dit: vous avez besoin de définir une largeur de la table:
Noter que le site que vous consultez contient aussi une copie illégale d'un livre publié par Manning Publications dont je suis l'auteur.
Merci, Bruno! Je suis désolé pour le référencement de piratage de ressources. La dernière ligne de votre code est censé être
table.WriteSelectedRows(0, -1, 200, 50, cb);
n'est-ce pas?Oui, je vous remercie. Je vais le mettre à jour.
OriginalL'auteur Bruno Lowagie