找回密码
 立即注册

QQ登录

只需一步,快速开始

KingMan

中级会员

68

主题

148

帖子

554

积分

中级会员

积分
554
KingMan
中级会员   /  发表于:2017-12-7 14:26  /   查看:3294  /  回复:4
// Get the current section to work with.
            TXTextControl.Section currentSection = textControl1.Sections.GetItem();

            // Get the current header.
            TXTextControl.HeaderFooter currentHeader =
                  currentSection.HeadersAndFooters.GetItem(TXTextControl.HeaderFooterType.Header);
           
            // Check if there is already a header present.
            if (currentHeader == null)
            { // no header found in the current section, so we will add one.
                currentSection.HeadersAndFooters.Add(TXTextControl.HeaderFooterType.Header);
                currentHeader = currentSection.HeadersAndFooters.GetItem(TXTextControl.HeaderFooterType.Header);
            }

            // Add image to the header with alignment to the right page border.
            //currentHeader.Images.Add(new TXTextControl.Image(),
            //                TXTextControl.HorizontalAlignment.Right,
            //                0,
            //                TXTextControl.ImageInsertionMode.DisplaceText);

            // Add some text to the header, left aligned.
            currentHeader.Selection.Text = "This is a header with an image aligned to the right.";

            TXTextControl.HeaderFooter currentFooter =
                  currentSection.HeadersAndFooters.GetItem(TXTextControl.HeaderFooterType.Footer);
            if (currentFooter == null)
            {
                currentSection.HeadersAndFooters.Add(TXTextControl.HeaderFooterType.Footer);
                currentFooter = currentSection.HeadersAndFooters.GetItem(TXTextControl.HeaderFooterType.Footer);
            }
            currentFooter.Selection.Text = "Page ";
            // Add PageNumberField text field to the footer to display the current page number.
          //这里设置其实页码为3,但是界面看到的页码仍然是1开始
            PageNumberField pNumberField = new TXTextControl.PageNumberField(3, TXTextControl.NumberFormat.ArabicNumbers);
            //pNumberField.StartNumber = 3;
            currentFooter.PageNumberFields.Add(pNumberField);

            // Add static page count to the footer.
            // PLEASE NOTE: You will have to update this number programmatically if the page count changes!
            // Best solution would be to do that in the Changed event.
            currentFooter.Selection.Text = " of " + textControl1.Pages.ToString();

            // Center the footer content.
            currentFooter.Selection.ParagraphFormat.Alignment = TXTextControl.HorizontalAlignment.Center;

4 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-12-8 21:05:22
沙发
您好,这个问题我们这两天在24的版本上测试依旧么有解决。这个是产品本身的bug ,目前暂时没有什么办法。我们会将bug对厂商进行反馈。保留本帖
回复 使用道具 举报
KingMan
中级会员   /  发表于:2017-12-11 15:59:21
板凳
Richard.Ma 发表于 2017-12-8 21:05
您好,这个问题我们这两天在24的版本上测试依旧么有解决。这个是产品本身的bug ,目前暂时没有什么办法。我 ...

本来想通过另外一种方式来解决这个问题的,如在页脚中添加一个文本域,然后循环替换掉该域。但是搞到一半发现搞不了,
因为在页眉或页脚中新增的域,只有一个。
如第一页中页脚中添加文本域A,文本内容有3页,所以,每页一个页脚,共有3个域A。
但是实际在遍历的时候发现,替换域A发现,所有页脚的文本域A的值都为3.指向了同一个域

  public int SetTextFieldPageNumber(TextControl txControl,int StartPageNumber)
        {
            if (txControl == null)
                return -1;

            PageCollection AllPages = txControl.GetPages();
            String sPageFieldName = Convert.ToString("PageNumberField");

            if (StartPageNumber <= 0)
                StartPageNumber = 1;

            int iTemp = 0;
            int iLastPage = 0;
            HeadFooterActivate(HeaderFooterType.Footer);

            foreach (Page pNext in AllPages)
            {
                foreach (TextField pNextField in pNext.Footer.TextFields)
                {
                    if (pNextField.Name != sPageFieldName)
                        continue;
                    int pCurrentPageNumber = GetTextFieldPageNumber(txControl, pNextField);
                    if (pCurrentPageNumber < 0)
                        continue;
                    if (pCurrentPageNumber != iTemp)
                    {
                        iLastPage = StartPageNumber;
                        pNextField.Text = Convert.ToString(StartPageNumber);
                        StartPageNumber += 1;
                        iTemp = pCurrentPageNumber;
                    }
                    else
                        pNextField.Text = Convert.ToString(iLastPage);
                }
                StartPageNumber += 1;
            }
            HeadFooterDeActivate(HeaderFooterType.Footer);
            return 0;
        }
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-12-12 18:01:39
地板
我这边也是折腾了好久,这个问题暂时无法解决
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-1-30 09:29:14
5#
您好,这个问题的解决方法如下,重点是先要用Activate方法激活进入header区域,设置后再取消激活

  1.        HeaderFooter h = _textControl.Sections.GetItem().HeadersAndFooters.GetItem(HeaderFooterType.Header);
  2. h.Activate();
  3.     PageNumberField page = new PageNumberField(3, NumberFormat.ArabicNumbers);
  4.     h.PageNumberFields.Add(page);
  5. h.Deactivate();
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部