【问题标题】:Setting margins, headers and footers for PDF without overlap为 PDF 设置页边距、页眉和页脚而不重叠
【发布时间】:2014-06-10 15:53:33
【问题描述】:

我需要一些帮助来调整我的 PDF 页眉/页脚以及我的文本区域。第一页看起来不错,但从那里开始变得更糟。页眉和页脚是否占用了我现有的边距空间?

我想知道出了什么问题以及我可以进行哪些调整以设置以下内容:

  1. 页面宽度
  2. 边距宽度
  3. 标题
  4. 页脚
  5. 文本区域

我的头部覆盖函数如下:

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 中添加内容。你应该使用OnEndPageHTMLWorker 已弃用。你应该使用XMLWorker。您是否有理由不从一开始就设置最终页面大小(在new Document 中)而是单独设置?请提供一个示例 PDF 输出。
  • @mkl 我应该使用OnEndPage 作为标题吗?我已经从各种教程中的一些代码中编译了它。请在这件事上给予我帮助?我在 3 页中提供了我的 PDF 标题的屏幕截图。
  • 我应该将OnEndPage 用于标题 - 是的,对于所有 对内容、标题、页脚、背景图像、. …
  • @mkl 你有没有看到第一页打印得很完美,第二页刚刚被挤压,第三页被覆盖了?为什么会这样?让我尝试添加您要求我添加的内容。
  • @mkl 你能帮我出个教程吗?我需要为每一页添加几行文本标题。机构名称和一些联系方式。我看到this。我真的不明白发生了什么。

标签: c# asp.net pdf printing itextsharp


【解决方案1】:

您使用

初始化文档创建
Document pdfDoc = new Document(new Rectangle(288f, 144f), 10f, 10f, 30f, 30f);

这意味着您特别保留左右 10 个单位和上下各 30 个单位作为边距。自动内容布局机制可以使用整个剩余的内部空间。

因此,标题材料必须在该边缘区域中绘制,否则可能与页面内容重叠。

另一方面,您的代码创建一个包含两行的段落,第一行设置为 20 单位字体,第二行设置为 10 单位字体,并将其包裹在表格中。因此,该表格的高度超过 30 个单位(这两行的组合高度加上一些行间空间和可能的一些表格单元格边距开销)。然后画成这样

headerTbl.WriteSelectedRows(0, -1, 0, (doc.PageSize.Height - 10), writer.DirectContent);

所以它从页面顶部下方 10 个单位开始。不过,您将首页边距定义为仅 30。因此,标题和页面内容以超过 10 个单位高的条纹重叠。

因此,我建议您将上边距增加 20 (超过 10 加上 一些距离):

Document pdfDoc = new Document(new Rectangle(288f, 144f), 10f, 10f, 50f, 30f);

第一页看起来正常的原因很可能是您的 HTML 以一些空白开头(至少就HTMLWorker 而言)。

补充说明:

  • 不鼓励在 OnStartPage 中添加内容。您应该使用OnEndPage 对内容、页眉、页脚、背景图像等进行所有此类操作...

  • HTMLWorker 已弃用。你应该使用XMLWorker

  • 您是否有理由不从一开始就设置最终页面大小(在new Document 中)而是单独设置?

【讨论】:

  • 非常感谢您提供的漂亮答案。完美! 1. 我在OnEndPage 上添加标题内容时,在pdfwriter.PageEvent = new Header(); 上抛出错误:'iTextSharp.text.Header' does not contain a constructor that takes 0 arguments 为什么会这样? 2. 将使用XMLWorker 代替。 3. 不,我也没有理由这样做。将改变这一点。
  • 当我在OnEndPage 上添加标题内容时,它会在pdfwriter.PageEvent = new Header(); 上引发错误:'iTextSharp.text.Header' 不包含采用 0 个参数的构造函数 i> - 您不应该将pdfwriter.PageEvent 设置为您的页面事件侦听器吗? iTextSharp.text.Header 很可能不是你的班级。
  • 能否给我一个教程链接?
  • iText 网站Keyword Header/footer 表示 part1.chapter05.MovieHistory2、part1.chapter05.MovieCountries1 和 part2.chapter06.TwoPasses 是很好的示例。可以找到 iTextSharp 等价物,例如here.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
相关资源
最近更新 更多