当循环位于页面末尾时,Itextsharp不会创建新的空白页面

时间:2018-02-01 10:29:02

标签: c# asp.net itext

我正在打开一个pdf模板并创建一个新的pdf并在其上书写。在循环中我必须从列表中输入动态数据,我正在减去高度变量以将一个项目放在另一个项目之后。我的问题是,当列表太长并且接近pdf页面的末尾时,代码不会创建新的空白页面以继续编写列表的其余项目。但是,它会在页面的最后一项中覆盖其余项目。我试图增加我的高度变量,但代码仍无法生成新页面。

string pdfpath = context.Server.MapPath(@"~/mypdf_new.pdf");
string oldFile = context.Server.MapPath(@"~/mypdftemplate.pdf");
string newFile = pdfpath;                

PdfReader reader = new PdfReader(oldFile);
iTextSharp.text.Rectangle size = reader.GetPageSizeWithRotation(1);

Document document = new Document(size);

FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write);
PdfWriter writer = PdfWriter.GetInstance(document, fs);

document.Open();

string myFont = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), 
     "Calibri.TTF");

iTextSharp.text.pdf.BaseFont bfR;
bfR = iTextSharp.text.pdf.BaseFont.CreateFont(myFont,
    iTextSharp.text.pdf.BaseFont.IDENTITY_H,
    iTextSharp.text.pdf.BaseFont.EMBEDDED);

BaseFont title = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
iTextSharp.text.Font titleFont = new iTextSharp.text.Font(title, 10, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.BLACK);

int myheight = 500;
foreach (var mypro in listofproducts)
{
    ColumnText ct26 = new ColumnText(cb);
    Phrase myText26 = new Phrase(mypro.ProductCode, titleFont);
    ct26.SetSimpleColumn(myText26, 60, myheight, 580, 317, 15, Element.ALIGN_LEFT);
    ct26.Go();

    ColumnText ct28 = new ColumnText(cb);
    Phrase myText28 = new Phrase(Convert.ToString(mypro.quantity), titleFont);
    ct28.SetSimpleColumn(myText28, 340, myheight, 580, 317, 15, Element.ALIGN_LEFT);
    ct28.Go();

    myheight = myheight - 20;
  }

  PdfImportedPage page = writer.GetImportedPage(reader, 1);
  cb.AddTemplate(page, 0, 0);

  document.Close();
  fs.Close();
  writer.Close();
  reader.Close();

0 个答案:

没有答案