我正在尝试将表格放在PDF文档的绝对位置,并让表格进入下一页,但是,将表格添加到ColumnText似乎可以防止这种情况,我怀疑它是因为我&# 39;用DirectContent写作,但我无法确定。
这是显示此内容的代码段。
void Main(string[] args)
{
new Splitting().manipulatePdf(Splitting.dest);
}
public class Splitting {
public static string dest = @"d:\\splitting.pdf";
public void manipulatePdf(String dest)
{
var doc = new Document(PageSize.A4);
var ms = new MemoryStream();
var writer = PdfWriter.GetInstance(doc, ms);
doc.Open();
doc.NewPage();
Paragraph p = new Paragraph("Test");
var table = new PdfPTable(2);
for (int i = 1; i < 60; i++) {
table.AddCell("key " + i);
table.AddCell("value " + i);
}
doc.Add(table);
ColumnText ct = new ColumnText(writer.DirectContent);
ct.SetSimpleColumn(0, 0, 300, 300);
ct.AddElement(table);
ct.Go();
doc.Close();
File.WriteAllBytes(dest, ms.ToArray());
}
}
答案 0 :(得分:1)
您有以下代码:
ColumnText ct = new ColumnText(writer.DirectContent);
ct.SetSimpleColumn(0, 0, 300, 300);
ct.AddElement(table);
ct.Go();
这会将表格添加到一个尺寸为300 x 300个用户单位的矩形中。 ct.Go()
的返回值会通知您所有矩形是否足够大以适应表格,或者表格中是否还有一些内容不合适。在后一种情况下,您必须在新页面上定义新列。
例如,请参阅官方文档中的ColumnTable示例(这是一个Java示例;可以在页面底部找到指向C#版本的链接)。
ColumnText column = new ColumnText(writer.DirectContent);
float[][] x = {
new float[] { document.Left, document.Left + 380 },
new float[] { document.Right - 380, document.Right }
};
column.AddElement(GetTable(day));
int count = 0;
int status = 0;
// render the column as long as it has content
while (ColumnText.HasMoreText(status)) {
column.SetSimpleColumn(
x[count][0], document.Bottom,
x[count][1], document.Top
);
// render as much content as possible
status = column.Go();
// go to a new page if you've reached the last column
if (++count > 1) {
count = 0;
document.NewPage();
}
}
如果您坚持使用iTextSharp 5,这是代码。如果您要升级到最新版本的iText 7 for C#,您的代码将更容易阅读。在这种情况下,仅仅是将DocumentRenderer
更改为ColumnDocumentRenderer
的情况,如chapter 2教程的iText 7: Building Blocks中所述。渲染器的概念是iText 7的主要改进之一。如果您希望您的代码能够面向未来,则应考虑升级。