分类: .net 2012-06-06 21:04 2842人阅读 评论(3) 收藏 举报

我在网上找了好久都没找到在封面显示生成的PDF总页数,然后自己摸索着做出来,分享给大家。

我用的是这个组件来实现的.net生成PDF。

首先创建一个工程,然后引用这个组件

然后创建一个页面,添加一个 按钮

然后开始写后台了。。不多说,直接贴代码。

  1. protected void Button1_Click(object sender, EventArgs e)
  2. {
  3. PDF();
  4. }
  5. private void PDF()
  6. {
  7. string filePath = "C:\\PDF";
  8. if (false == Directory.Exists(filePath))
  9. Directory.CreateDirectory(filePath);
  10. string filename = filePath + "/PDF.pdf";//设置保存路径
  11. Document doc = new Document(iTextSharp.text.PageSize.A4, 25, 25, 50, 40);//定义pdf大小,设置上下左右边距
  12. PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(filename, FileMode.Create));//生成pdf路径,创建文件流
  13. doc.Open();
  14. writer.PageEvent = new HeaderAndFooterEvent();
  15. HeaderAndFooterEvent.PAGE_NUMBER = true;//不实现页眉跟页脚
  16. First(doc, writer);//封面页
  17. doc.NewPage();//新建一页
  18. PdfHeader(doc, writer);//在新建的一页里面加入数据
  19. HeaderAndFooterEvent.PAGE_NUMBER = false;//开始书写页眉跟页脚
  20. writer.Flush();
  21. writer.CloseStream = true;
  22. doc.Close();
  23. }
  24. private void PdfHeader(Document doc, PdfWriter writer)
  25. {
  26. string totalStar = string.Empty;
  27. writer.PageEvent = new HeaderAndFooterEvent();
  28. string tmp = "这个是标题";
  29. doc.Add(HeaderAndFooterEvent.InsertTitleContent(tmp));
  30. }
  31. private void First(Document doc, PdfWriter writer)
  32. {
  33. string tmp = "分析报告";
  34. doc.Add(HeaderAndFooterEvent.InsertTitleContent(tmp));
  35. tmp = "(正文     页,附件 0 页)";
  36. doc.Add(HeaderAndFooterEvent.InsertTitleContent(tmp));
  37. //模版 显示总共页数
  38. HeaderAndFooterEvent.tpl = writer.DirectContent.CreateTemplate(100, 100); //模版的宽度和高度
  39. PdfContentByte cb = writer.DirectContent;
  40. cb.AddTemplate(HeaderAndFooterEvent.tpl, 266, 714);//调节模版显示的位置
  41. }

然后再新建一个类这个类是用来重写Itext组件的一些方法的。

该类要继承类PdfPageEventHelper和接口IPdfPageEvent

然后重写里面的方法

    1. public static PdfTemplate tpl = null;//模版
    2. public static bool PAGE_NUMBER = false;//为True时就生成 页眉和页脚
    3. iTextSharp.text.Font font = BaseFontAndSize("黑体", 10, Font.NORMAL, BaseColor.BLACK);
    4. //重写 关闭一个页面时
    5. public override void OnEndPage(PdfWriter writer, Document document)
    6. {
    7. if (PAGE_NUMBER)
    8. {
    9. Phrase header = new Phrase("PDF测试生成页眉分析报告", font);
    10. Phrase footer = new Phrase("第" + (writer.PageNumber - 1) + "页/共     页", font);
    11. PdfContentByte cb = writer.DirectContent;
    12. //模版 显示总共页数
    13. cb.AddTemplate(tpl, document.Right - 54 + document.LeftMargin, document.Bottom - 8);//调节模版显示的位置
    14. //页眉显示的位置
    15. ColumnText.ShowTextAligned(cb, Element.ALIGN_CENTER, header,
    16. document.Right - 140 + document.LeftMargin, document.Top + 10, 0);
    17. //页脚显示的位置
    18. ColumnText.ShowTextAligned(cb, Element.ALIGN_CENTER, footer,
    19. document.Right - 60 + document.LeftMargin, document.Bottom - 10, 0);
    20. }
    21. }
    22. //重写 打开一个新页面时
    23. public override void OnStartPage(PdfWriter writer, Document document)
    24. {
    25. if (PAGE_NUMBER)
    26. {
    27. writer.PageCount = writer.PageNumber-1;
    28. }
    29. }
    30. //关闭PDF文档时发生该事件
    31. public override void OnCloseDocument(PdfWriter writer, Document document)
    32. {
    33. BaseFont bf = BaseFont.CreateFont(@"c:\windows\fonts\SIMYOU.TTF", BaseFont.IDENTITY_H, false); //调用的字体
    34. tpl.BeginText();
    35. tpl.SetFontAndSize(bf, 16);//生成的模版的字体、颜色
    36. tpl.ShowText((writer.PageNumber - 2).ToString());//模版显示的内容
    37. tpl.EndText();
    38. tpl.ClosePath();
    39. }
    40. //定义字体 颜色
    41. public static Font BaseFontAndSize(string font_name, int size, int style, BaseColor baseColor)
    42. {
    43. BaseFont baseFont;
    44. BaseFont.AddToResourceSearch("iTextAsian.dll");
    45. BaseFont.AddToResourceSearch("iTextAsianCmaps.dll");
    46. Font font = null;
    47. string file_name = "";
    48. int fontStyle;
    49. switch (font_name)
    50. {
    51. case "黑体":
    52. file_name = "SIMHEI.TTF";
    53. break;
    54. case "华文中宋":
    55. file_name = "STZHONGS.TTF";
    56. break;
    57. case "宋体":
    58. file_name = "SIMYOU.TTF";
    59. break;
    60. default:
    61. file_name = "SIMYOU.TTF";
    62. break;
    63. }
    64. baseFont = BaseFont.CreateFont(@"c:/windows/fonts/" + file_name, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//字体:黑体
    65. if (style < -1)
    66. {
    67. fontStyle = Font.NORMAL;
    68. }
    69. else
    70. {
    71. fontStyle = style;
    72. }
    73. font = new Font(baseFont, size, fontStyle, baseColor);
    74. return font;
    75. }
    76. //定义输出文本
    77. public static Paragraph InsertTitleContent(string text)
    78. {
    79. iTextSharp.text.Font font = BaseFontAndSize("华文中宋", 16, Font.BOLD,BaseColor.BLACK);
    80. //BaseFont bfSun = BaseFont.CreateFont(@"c:\windows\fonts\STZHONGS.TTF", BaseFont.IDENTITY_H, false); //调用的字体
    81. //Font font = new Font(bfSun, 15);
    82. Paragraph paragraph = new Paragraph(text, font);//新建一行
    83. paragraph.Alignment = Element.ALIGN_CENTER;//居中
    84. paragraph.SpacingBefore = 5;
    85. paragraph.SpacingAfter = 5;
    86. paragraph.SetLeading(1, 2);//每行间的间隔
    87. return paragraph;
    88. }

C#生成PDF页脚第几页共几页的更多相关文章

  1. itext 生成pdf文件添加页眉页脚

    原文来自:https://www.cnblogs.com/joann/p/5511905.html 我只是记录所有jar版本,由于版本冲突及不兼容很让人头疼的,一共需要5个jar, 其中itextpd ...

  2. 【Itext】7步制作Itext5页眉页脚pdf实现第几页共几页

    itext5页眉页脚工具类,实现page x of y 完美兼容各种格式大小文档A4/B5/B3,兼容各种文档格式自动计算页脚XY轴坐标 鉴于没人做的这么细致,自己就写了一个itext5页眉页脚工具类 ...

  3. iText + Freemarker实现pdf的导出,支持中文、css以及图片,页眉页脚,页眉添加图片

    本文为了记录自己的实现过程,具体的实现步骤是参考博文 https://www.cnblogs.com/youzhibing/p/7692366.html 来实现的,只是在他的基础上添加了页眉页脚及页眉 ...

  4. iText导出PDF(图片,水印,页眉,页脚)

    项目需要导出PDF,导出的内容包含图片和文本,而且图片的数量不确定,在网上百度发现大家都在用iText,在官网发现可以把html转换为PDF,但是需要收费,那就只能自己写了. 在开始之前先在网上百度了 ...

  5. 怎么给PDF去除页眉页脚

    PDF文件我们现在都会使用到,但有时需编辑PDF文件的时候,小伙伴们都知道该怎么操作吗,不知道的小伙伴不用担心,今天小编就来跟大家分享一下怎么删除PDF文件的页眉页脚,我们一起来看看下面的文章吧 操作 ...

  6. C# 如何添加Excel页眉页脚(图片、文字、奇偶页不同)

    简介 我们可以通过代码编程来对Excel工作表实现很多操作,在下面的示例中,将介绍如何来添加Excel页眉.页脚.在页眉处,我们可以添加文字,如公司名称.页码.工作表名.日期等,也可以添加图片,如LO ...

  7. 如何利用API导出带有页眉页脚的excel

     在报表中设置的页眉页脚在页面中是看不到的,如下图: 页面中的效果: 在打印的时候,可以看到页眉页脚的效果: 那么,如果将页眉页脚导入到导出的excel中呢.我们可以通过API来进行设置: < ...

  8. 给SharePoint页面加入自己定义页脚Custom footer

    给SharePoint页面加入自己定义页脚Custom footer         在公司做站点设计项目时,须要在页面上加入页脚.         非常多人都把页脚忽视了,认为没什么多大用处,事实上 ...

  9. C# 操作Word页眉页脚——奇偶页/首页不同、不连续设置页码、复制页眉页脚、锁定页眉页脚、删除页眉页脚

    前言 本文是对Word页眉页脚的操作方法的进一步的阐述.在“C# 添加Word页眉页脚.页码”一文中,介绍了添加简单页眉页脚的方法,该文中的方法可满足于大多数的页眉页脚添加要求,但是对于比较复杂一点的 ...

  10. word页眉与页脚详解

    1.如何隔离封面等不需要插入页码的页面: 首先插入分节符下一页(一定是分节符),再在下一页(即要开始插入页码的页面)选择视图-->页眉和页脚-->设置为取消链接到前一页.设置页码格式为起始 ...

随机推荐

  1. 什么是VSync

    VSync是垂直同期(Vertical Synchronization)的简称.主要的思路是将你的FPS和显示器的刷新率同期起来.其目的是避免一种称之为"撕裂"的现象.再以下我将具 ...

  2. [Android学习笔记]Android Library Project的使用

    RT http://developer.android.com/tools/projects/index.html

  3. [Android学习笔记]PopupWindow的使用

    什么时候使用PopupWindow? 当业务需求的交互形式需要在当前页弹出一个简单可选项UI与用户进行交互时,可使用PopupWindow完成此功能开发 Android Dev API Doc Pop ...

  4. Python批量删除指定目录下的指定类型的文件

    Python作为一种脚本语言.其很适合文件级的各种操作.以下的代码能够批量删除指定目录下的所有特定类型(CSV类型)的文件. import sys, csv , operator import os ...

  5. 解决windows下的mysql匿名登陆无法使用mysql数据库的问题

    原文:解决windows下的mysql匿名登陆无法使用mysql数据库的问题 我在windows下安装了mysql,但是不用密码就能登进去,而root明明是有密码的,我用select user()命令 ...

  6. 蜗牛—JSONJ学习ava转变

    最近,写网站管理员,使用异步通信技术,所使用的方法是JSON数据传输模式 需要以下jar文件 然后,自己写了一点点经常使用代码 Java的List和数组要用JSONArray对象 Map和实体用JSO ...

  7. 读懂Java中的Socket编程(转)

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

  8. zoj2059(经典dp)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1059 分析:dp[i][j]表示前i个石头组成两座塔高度差为j的较低 ...

  9. Uva10290 - {Sum+=i++} to Reach N

    Problem H {sum+=i++} to Reach N Input: standard input Output:  standard output Memory Limit: 32 MB A ...

  10. ARMv8 Linux内核异常处理过程分析

    NOTE:为了方便大家阅读,制作了PDF版文档.下载请猛戳这里 老样子,为了赚点积分下载其它人的文件,下载以上资料须要资源分2分. 假设没有积分请留言全部文档,留下邮箱就可以. 看了Linaro提供的 ...