我正在尝试将单个pdf生成多个pdf,这是我通过使用itextSharp实现的,但是在生成它们时我遇到的一些事情,如下所示:
如何解决这些错误?以下是我的代码:
public byte[] GetPDF(string pHTML)
{
byte[] bPDF = null;
MemoryStream ms = new MemoryStream();
TextReader txtReader = new StringReader(pHTML);
//Rectangle pagesize = new Rectangle(864.0f, 1152.0f);
Document doc = new Document(PageSize.NOTE);
string path = Server.MapPath("PDFs");
PdfWriter oPdfWriter = PdfWriter.GetInstance(doc, ms);
HTMLWorker htmlWorker = new HTMLWorker(doc);
doc.Open();
for (int i = 1; i <= 5; i++)
{
doc.NewPage();
PdfPTable table= new PdfPTable(1);
table.TotalWidth = 500f;
table.LockedWidth = true;
table.HorizontalAlignment = 0;
table.DefaultCell.Border = Rectangle.NO_BORDER;
Image imageTopURL = Image.GetInstance("Top.PNG");
PdfPCell imgTopCell = new PdfPCell(imageTopURL);
Paragraph p = new Paragraph("XYZ", new Font(Font.FontFamily.COURIER, 32f, Font.UNDERLINE));
p.Alignment = Element.ALIGN_CENTER;
table.AddCell(imgTopCell);
table.AddCell(p);
Image imageMidURL = Image.GetInstance("Mid.PNG");
PdfPCell imgMidCell = new PdfPCell(imageMidURL);
Paragraph p1 = new Paragraph("ABC", new Font(Font.FontFamily.HELVETICA, 29f, Font.ITALIC));
p1.Alignment = Element.ALIGN_CENTER;
table.AddCell(imgMidCell);
imgMidCell.Border = 0;
table.AddCell(p1);
Image imageBotURL = Image.GetInstance("Bottom.PNG");
PdfPCell imgBotCell = new PdfPCell(imageBotURL);
table.AddCell(imgBotCell);
imageTopURL.ScaleAbsolute(505f, 270f);
imageMidURL.ScaleAbsolute(590f, 100f);
imageBotURL.ScaleAbsolute(505f, 170f);
doc.Open();
doc.Add(table);
htmlWorker.StartDocument();
htmlWorker.Parse(txtReader);
htmlWorker.EndDocument();
}
htmlWorker.Close();
doc.Close();
doc.Close();
bPDF = ms.ToArray();
return bPDF;
}
答案 0 :(得分:1)
您告诉该表默认单元格不应该有边框:
table.DefaultCell.Border = Rectangle.NO_BORDER;
这意味着隐式创建的PdfPCell
个实例将不会获得边框。例如:如果你这样做:
table.AddCell("Implicit cell creation");
那个单元格不会有边框。
但是:您正在创建一个 的单元格:
PdfPCell imgTopCell = new PdfPCell(imageTopURL);
在这种情况下,永远不会使用DefaultCell
。 imgTopCell
有边框是很正常的。如果您不想要imgTopCell
的边框,则需要定义Border
imgTopCell
,如下所示:
imgTopCell.Border = Rectangle.NO_BORDER;
关于对齐:似乎您没有阅读文本模式和复合模式之间的区别。请阅读文档,例如:
您正在制作一些新手错误,这些错误都可以通过阅读文档来解决。你在一篇文章中有太多问题。如果我的答案没有解决你的每一个问题,请创建新的问题。我在你的帖子中至少看到了两个问题(你的问题实际上应该以“太宽泛”为理由而被关闭。)
<强>更新强>
在评论中,您添加了以下代码段:
table.AddCell(new Paragraph(data.EmpName, new Font(Font.FontFamily.COURIER, 32f, Font.BOLD)));
您希望将此文字居中。
首先,让我解释一下您使用AddCell()
方法并以Paragraph
作为参数。这并不合理,因为Paragraph
将被视为Phrase
。你也可以写:
table.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER ;
table.AddCell(new Phrase(data.EmpName, new Font(Font.FontFamily.COURIER, 32f, Font.BOLD)));
当您将Phrase
传递给AddCell()
方法时,您
PdfPCell
。在这种情况下,iTextSharp将查看DefaultCell
并使用该单元格的属性来创建新单元格。如果要将新单元格的内容居中,则需要在DefaultCell
级别定义此内容。所有这些都在我对以下问题的回答中进行了解释: