分类: .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. Makefile条件推断 ——————————【Badboy】

    使用条件推断,能够让make依据执行时的不同情况选择不同的执行分支. 条件表达式能够是比較变量的值,或是比較变量和常量的值. 一.演示样例 以下的样例,推断$(CC)变量是否"gcc&quo ...

  2. 编程之美2013 初赛一 A - 竞价 学习大牛的思路

    这题我做了N久也做不出....赛后看了大牛AC的思路.... Program: #include<iostream> #include<cmath> #include<s ...

  3. Java程序员须知的七个日志管理工具(转)

    Splunk vs. Sumo Logic vs. LogStash vs. GrayLog vs. Loggly vs. PaperTrails vs. Splunk>Storm 英文原文:T ...

  4. 自己动手写处理器之第一阶段(2)——MIPS指令集架构的演变

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第三篇.我尽量每周四篇 MIPS指令集架构自上世纪80年代出现后.一直在进行着更新换代,从最初的MIPS I到MIPS V,发 ...

  5. 【Cocos2d-X开发学习笔记】第01期:PC开发环境的详细搭建

    本文使用的是cocos2d-x-2.1.4版本 ,截至目前为止是最新稳定版 所谓的开发环境就是制作游戏的地方,打个比方读者就会十分清楚了.比如提到做饭,人们都会想到厨房.这是 因为厨房有炉灶.烟机.水 ...

  6. 无向图的最短路径算法JAVA实现(转)

    一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...

  7. 百度词典搜索_dress code

    百度词典搜索_dress code dress code n.着装标准

  8. mongodb分页优化

    现在参与一个项目的开发,需要用java查询mongodb数据库,在这里分页用的skip sort 和limit结合,查询语句如下(已经在相关字段建立索引) DBCursor cursor = coll ...

  9. Android清理设备内存具体完整演示样例(一)

    MainActivity例如以下: package come.on; import android.app.Activity; import android.content.Context; impo ...

  10. [LeetCode] Search for a Range [34]

    题目 Given a sorted array of integers, find the starting and ending position of a given target value. ...