gpt4 book ai didi

C# - iTextSharp 文档没有页面

转载 作者:行者123 更新时间:2023-11-30 23:09:15 24 4
gpt4 key购买 nike

我这里确实有代码,但我一直收到错误消息:文档没有页面。我也设置了表格宽度和短语,但仍然出现错误消息。我现在完全不在了,我已经尝试搜索其他一些案例,但是,他们试图在设置表格宽度时修复它们。有什么我想念的吗?任何帮助,将不胜感激。谢谢!

private void printPDF(object sender, EventArgs e)
{

Document docu = new Document(PageSize.LETTER);
PdfWriter writer = PdfWriter.GetInstance(docu, new FileStream("C:\\Report\\" + empno + ".pdf", FileMode.Create));
Phrase phrase = null;
PdfPCell cell = null;
PdfPTable table = null;
BaseColor color = null;

docu.Open();

//Header Table
table = new PdfPTable(2);
table.TotalWidth = 500f;
table.LockedWidth = true;
table.SetWidths(new float[] { 0.3f, 0.7f });

//Company Name and Address
phrase = new Phrase();
phrase.Add(new Chunk("Company Name\n\n", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.ORANGE)));
phrase.Add(new Chunk("Company Address", FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK)));
cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
cell.VerticalAlignment = PdfPCell.ALIGN_TOP;
table.AddCell(cell);

docu.Add(table);
docu.Close();
}
private static PdfPCell PhraseCell(Phrase phrase, int align)
{
PdfPCell cell = new PdfPCell(phrase);
cell.BorderColor = BaseColor.WHITE;
cell.VerticalAlignment = PdfPCell.ALIGN_TOP;
cell.HorizontalAlignment = align;
cell.PaddingBottom = 2f;
cell.PaddingTop = 0f;
return cell;
}

最佳答案

我快速浏览了一下,会说当你指定 table = new PdfPTable(2); 告诉表格它将有 每行 2 个单元格 但是你只提供了第一行的一个单元格。由于您只提供了一个单元格,因此表定义不完整,因此没有任何行要呈现。

现在,如果您更改代码并提供 2 个单元格。

phrase = new Phrase();
phrase.Add(new Chunk("Company Name\n\n", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.ORANGE)));
phrase.Add(new Chunk("Company Address", FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK)));
cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
cell.VerticalAlignment = PdfPCell.ALIGN_TOP;
table.AddCell(cell);

//yes this is just duplicating content but proves the point
cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
cell.VerticalAlignment = PdfPCell.ALIGN_TOP;
table.AddCell(cell);


docu.Add(table);
docu.Close();

这很好用,因为我们现在有两个单元格并且可以完成表格定义。如果您尝试添加 3 个单元格,您会发现第 3 个单元格没有呈现,因为它没有完成表格定义。

当您向表格中添加单元格时,您是将它们水平添加到表格中,表格将根据列定义将它们呈现为行。即在 2 列表中,单元格变为

cell 1    | Row 1 Cell 1 
cell 2 | Row 1 Cell 2
cell 3 | Row 2 Cell 1
cell 4 | Row 2 Cell 2

现在这个声明

table = new PdfPTable(2);
table.TotalWidth = 500f;
table.LockedWidth = true;
table.SetWidths(new float[] { 0.3f, 0.7f });

相当于:

table = new PdfPTable(new float[] { 0.3f, 0.7f });
table.TotalWidth = 500f;
table.LockedWidth = true;

正如您在构造函数中指定的 2 列宽度,这将为表格指定 2 列。

作为一个完整的例子,请看下面的代码:

private void printPDF(object sender, EventArgs e)
{
string path = "D:\\Test\\" + Guid.NewGuid().ToString() + ".pdf";
using (var fileStream = new FileStream(path, FileMode.Create))
{
Document docu = new Document(PageSize.LETTER);
PdfWriter writer = PdfWriter.GetInstance(docu, fileStream);

docu.Open();

//Header Table
var table = new PdfPTable(new float[] { 0.3f, 0.7f });
table.TotalWidth = 500f;

//company name
var phrase = new Phrase("Company Name", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.ORANGE));
var cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
table.AddCell(cell);

phrase = new Phrase("My test company", FontFactory.GetFont("Arial", 16, iTextSharp.text.Font.BOLD, BaseColor.ORANGE));
cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
table.AddCell(cell);

//company address
phrase = new Phrase("Company Address", FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK));
cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
table.AddCell(cell);

phrase = new Phrase("123 Main Street, Your City.", FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK));
cell = PhraseCell(phrase, PdfPCell.ALIGN_LEFT);
table.AddCell(cell);

docu.Add(table);
docu.Close();
writer.Close();
}
}
private static PdfPCell PhraseCell(Phrase phrase, int align)
{
PdfPCell cell = new PdfPCell(phrase);
cell.BorderColor = BaseColor.WHITE;
cell.VerticalAlignment = PdfPCell.ALIGN_TOP;
cell.HorizontalAlignment = align;
cell.PaddingBottom = 2f;
cell.PaddingTop = 0f;
return cell;
}

关于C# - iTextSharp 文档没有页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45929466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com