【发布时间】:2014-06-10 15:53:33
【问题描述】:
我需要一些帮助来调整我的 PDF 页眉/页脚以及我的文本区域。第一页看起来不错,但从那里开始变得更糟。页眉和页脚是否占用了我现有的边距空间?
我想知道出了什么问题以及我可以进行哪些调整以设置以下内容:
- 页面宽度
- 边距宽度
- 标题
- 页脚
- 文本区域
我的头部覆盖函数如下:
public partial class Header : PdfPageEventHelper
{
public override void OnStartPage(PdfWriter writer, Document doc)
{
PdfPTable headerTbl = new PdfPTable(2);
headerTbl.SetWidths(new float[] { 4, 1 });
headerTbl.TotalWidth = doc.PageSize.Width;
iTextSharp.text.Image logo = iTextSharp.text.Image.GetInstance(HttpContext.Current.Server.MapPath("~/Images/view.gif"));
logo.ScalePercent(5);
PdfPCell cell = new PdfPCell(logo);
cell.HorizontalAlignment = Element.ALIGN_RIGHT;
cell.PaddingRight = 20;
cell.Border = Rectangle.NO_BORDER;
Font timesH = new Font(Font.FontFamily.TIMES_ROMAN, 20);
Font times = new Font(Font.FontFamily.TIMES_ROMAN, 10);
Chunk c1= new Chunk("THIS IS MY HEADER TEXT", timesH);
Chunk c = new Chunk("\n", times);
Chunk c2=new Chunk("PLEASE HAVE A NICE DAY", times);
Phrase p = new Phrase();
p.Add(c1);
p.Add(c);
p.Add(c2);
PdfPCell cell2 = new PdfPCell(p);
cell2.Border = Rectangle.NO_BORDER;
headerTbl.AddCell(cell2);
headerTbl.AddCell(cell);
headerTbl.WriteSelectedRows(0, -1, 0, (doc.PageSize.Height - 10), writer.DirectContent);
}
}
stringWrite 是一个包含一堆数据的 StringWriter。更清晰HERE。
我按如下方式创建pdf:
StringReader sr = new StringReader(stringWrite.ToString());
Document pdfDoc = new Document(new Rectangle(288f, 144f), 10f, 10f, 30f, 30f);
pdfDoc.SetPageSize(PageSize.A4.Rotate());
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter pdfwriter = PdfWriter.GetInstance(pdfDoc, HttpContext.Current.Response.OutputStream);
pdfwriter.PageEvent = new Footer();
pdfwriter.PageEvent = new Header();
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
HttpContext.Current.Response.Write(pdfDoc);
HttpContext.Current.Response.End();
我在我的应用程序中使用 iTextSharp、C#、Asp.net。
【问题讨论】:
-
不鼓励在
OnStartPage中添加内容。你应该使用OnEndPage。HTMLWorker已弃用。你应该使用XMLWorker。您是否有理由不从一开始就设置最终页面大小(在new Document中)而是单独设置?请提供一个示例 PDF 输出。 -
@mkl 我应该使用
OnEndPage作为标题吗?我已经从各种教程中的一些代码中编译了它。请在这件事上给予我帮助?我在 3 页中提供了我的 PDF 标题的屏幕截图。 -
我应该将
OnEndPage用于标题 - 是的,对于所有 对内容、标题、页脚、背景图像、. … -
@mkl 你有没有看到第一页打印得很完美,第二页刚刚被挤压,第三页被覆盖了?为什么会这样?让我尝试添加您要求我添加的内容。
-
@mkl 你能帮我出个教程吗?我需要为每一页添加几行文本标题。机构名称和一些联系方式。我看到this。我真的不明白发生了什么。
标签: c# asp.net pdf printing itextsharp