從我的ASP.net MVC應用程序中,我使用iTextSharp和XSLT作爲模板生成PDF。這些網頁應該是以風景爲導向的。如何使用iTextSharp爲橫向中生成的頁面添加頁腳到PDF文檔
以下是橫向模式下的PDF文檔。
new Document(PageSize.LETTER.Rotate(), marginLeft, marginRight, marginTop, marginBottom);
從XSLT我得到的HTML和構建PDF內容如下:
public void ParseXhtmlContents(string xhtml)
{
//Instantiate handler
var elementhandler = new ElementHandler();
//Bind a reader to text
using (TextReader sr = new StringReader(xhtml))
{
//Parse
XMLWorkerHelper.GetInstance().ParseXHtml(elementhandler, sr);
}
//Loop through each element
foreach (var element in elementhandler.Elements)
{
var div = element as PdfDiv;
if (div != null)
foreach (var table in div.Content.OfType<PdfPTable>())
{
table.HeaderRows = 1;
}
_iTextDocument.Add(element);
}
}
生成PDF字節,我想添加頁腳後如下
private byte[] AddPageHeader(byte[] pdf, float marginLeft, float marginRight, float marginTop, float marginBottom)
{
using (var stream = new MemoryStream())
{
stream.Write(pdf, 0, pdf.Length);
var reader = new PdfReader(pdf);
var totalPage = reader.NumberOfPages;
var pageSize = reader.GetPageSize(1);
var document = new Document(pageSize, marginLeft, marginRight, marginTop, marginBottom);
var writer = PdfWriter.GetInstance(document, stream);
document.Open();
var contentByte = writer.DirectContent;
var pageIndex = 0;
for (var page = 1; page <= reader.NumberOfPages; page++)
{
document.NewPage();
pageIndex++;
var importedPage = writer.GetImportedPage(reader, page);
contentByte.AddTemplate(importedPage, 0, 0);
contentByte.BeginText();
var baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
contentByte.SetFontAndSize(baseFont, 6);
contentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "- " + pageIndex.ToString() + " -", 300f, 20, 0);
contentByte.EndText();
contentByte.SaveState();
contentByte.SetColorStroke(new PdfSpotColor("black", new BaseColor(0, 0, 0)), 100);
contentByte.SetLineWidth(0.25f);
contentByte.Rectangle(20, 45, 572, 0.25f);
contentByte.FillStroke();
contentByte.RestoreState();
}
startingPageNumber = pageIndex;
document.Close();
return stream.ToArray();
}
}
如果我跳過添加頁碼的部分,我可以橫向生成PDF,內容按正確順序顯示,但是當我添加頁腳時,我得到以下結果,呈現的頁面e是肖像。
請參考附圖像輸出:
幫我出在哪裏我錯了,謝謝。
1.創建新頁面,但不設置頁面大小。 2.通過將頁面作爲模板添加到其他頁面來複制頁面,可能會丟失很多信息。 1和2導致'丟失'你的頁面方向 –
由於你首先解析元素並將它們添加到iText文檔中,解決此問題的更好方法是通過頁面事件。看看這個iText的例子:http://developers.itextpdf.com/examples/itext-action-second-edition/chapter-5#228-moviehistory2.java –