MigraDoc - 仅限最后一页页脚

时间:2014-08-11 13:35:31

标签: pdfsharp migradoc

我有这段代码:

        Document document = new Document();

        Section sec = document.AddSection();
        Paragraph par;

        for (int i = 0; i < 50; i++)
        {
            par = sec.AddParagraph();
            par.AddText("Wiki je označení webů (nebo obecněji hypertextových dokumentů), které umožňují uživatelům přidávat obsah podobně jako v internetových diskusích, ale navíc jim také umožňují měnit stávající obsah; v přeneseném smyslu se jako wiki označuje software, který takovéto weby vytváří.Původně se termín wiki používal zcela opačně. Wiki bylo označení typu softwaru a weby postavené.");
        }

        par = sec.Headers.Primary.AddParagraph();
        par.AddText("hlavicka");
        Borders hranice = new Borders();
        hranice.Width = 1;
        sec.Headers.Primary.Format.Borders = hranice;

        sec.AddImage("images.jpg");

        par = sec.AddParagraph();
        par.AddText("paticka");

        PdfDocumentRenderer print = new PdfDocumentRenderer(false, PdfFontEmbedding.Always);
        print.Document = document;
        print.RenderDocument();
        print.PdfDocument.Save("ahoj.pdf");

我只需要在最后一页上制作一个页脚。有可能吗?

3 个答案:

答案 0 :(得分:0)

无法在最后一页上创建真正的页脚。

您可以使用最后一段创建TextFrame。 TextFrames是Shapes,可以放在页面的绝对位置,因此您也可以将它们放在页脚所在的位置。

答案 1 :(得分:0)

例如:
在最后一页的页脚上方需要30毫米的位置。 (这可能是签名字段。)

  1. 定义不带此位置的PageSetup(仅页脚高+您与页面底部的距离)
  2. 在固定位置TextFrame.RelativeVertical = RelativeVertical.Page; frame.Top = ShapePosition.Bottom;
  3. 中将30mm段落或表格定义为TextFrame。
  4. 使用paragraph.Format.SpaceBefore = 30mm
  5. 将一个空的段落定义为文档的最后一个段落

现在所有文档的末尾都有30mm的空白段落,并且签名重叠了,或者签名的地方不够。然后,在30mm的空白处强制分页。

答案 2 :(得分:0)

MemoryStream PdfDocumnet()
{
    Document pdfdoc = new MigraDoc.DocumentObjectModel.Document();
    pdfdoc.Info.Title = "Doc Title";
    pdfdoc.Info.Subject = "Doc Subject";

    DefineProformaStyles(pdfdoc);

    CreatePdf(pdfdoc);

    MemoryStream stream = new MemoryStream();
    PdfDocumentRenderer renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always);
    renderer.Document = pdfdoc;
    renderer.RenderDocument();
    renderer.Save(stream, false);

    return stream;
}


private void CreatePdf(Document pdfDoc)
{
    pdfDoc.DefaultPageSetup.HeaderDistance = "0.8cm";
    pdfDoc.DefaultPageSetup.FooterDistance = "0.6cm"; 

    MigraDoc.DocumentObjectModel.Section section = pdfDoc.AddSection();
    section.PageSetup.TopMargin = "6.8cm"; //Unit.FromCentimeter(3.0);
    section.PageSetup.BottomMargin = "3.4cm"; //Unit.FromCentimeter(3.0);


    // HEADER  ///////////////////////////////////////////////////////////////////////////////////
    MigraDoc.DocumentObjectModel.Tables.Table tableh1 = section.Headers.Primary.AddTable();
    Column colh1 = tableh1.AddColumn("10.8cm");
    Column colh2 = tableh1.AddColumn("8cm");
    colh2.Format.Alignment = ParagraphAlignment.Right; 

    // ...
    // ... add content to header
    // ...


    //FOOTER for every page //////////////////////////////////////////////////////////////////////
    MigraDoc.DocumentObjectModel.Tables.Table tablef2 = section.Footers.Primary.AddTable();
    tablef2.Style = "Table";

    //add content to footer



    // BODY    ///////////////////////////////////////////////////////////////////////////////////
    MigraDoc.DocumentObjectModel.Tables.Table tableC = section.AddTable();

    TextFrame frm0 = section.AddTextFrame();

    Paragraph prg1 = section.AddParagraph();

    //....

    //.....



    //FOOTER FOR ONLY LAST PAGE //////////////////////////////////////////////////////////////////
    //Add an empty paragraph. If there is not enough space to fit in current page then ... page break
    Paragraph emptyPar = section.AddParagraph();
    emptyPar.Format.SpaceBefore = "2.6cm";

    //add the special footer
    string lastPageFooterImgFile = HttpContext.Current.Server.MapPath("/company/CompanyFooter.png");
    TextFrame lastframe = section.AddTextFrame();
    lastframe.Height = "2.6cm";
    lastframe.RelativeVertical = RelativeVertical.Page;
    lastframe.Top = "24cm"; // 24cm + 2.6cm + footer_for_every_page.Height = Page.Height
    lastframe.AddImage(lastPageFooterImgFile);
}


private void DefineProformaStyles(Document Doc)
{
    Doc.DefaultPageSetup.LeftMargin = "1.3cm";
    MigraDoc.DocumentObjectModel.Style style = Doc.Styles["Normal"];

    style = Doc.Styles[StyleNames.Header];
    style.ParagraphFormat.AddTabStop("1cm", TabAlignment.Right);

    style = Doc.Styles[StyleNames.Footer];
    style.ParagraphFormat.AddTabStop("1cm", TabAlignment.Center);

    style = Doc.Styles.AddStyle("Table", "Normal");
    style.Font.Name = "Times New Roman";
    style.Font.Size = 9;

    style = Doc.Styles.AddStyle("Reference", "Normal");
    style.ParagraphFormat.SpaceBefore = "1mm";
    style.ParagraphFormat.SpaceAfter = "1mm";
    style.ParagraphFormat.TabStops.AddTabStop("1cm", TabAlignment.Right);
}