分类: .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. Codeforces Round #275 (Div. 2) C - Diverse Permutation (构造)

    题目链接:Codeforces Round #275 (Div. 2) C - Diverse Permutation 题意:一串排列1~n.求一个序列当中相邻两项差的绝对值的个数(指绝对值不同的个数 ...

  2. [容斥原理] zoj 3556 How Many Sets I

    主题链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=4535 How Many Sets I Time Limit: 2 ...

  3. 请慎用java的File#renameTo(File)方法(转)

    以前我一直以为File#renameTo(File)方法与OS下面的 move/mv 命令是相同的,可以达到改名.移动文件的目的.不过后来经常发现问题:File#renameTo(File)方法会返回 ...

  4. 调试Release发布版程序的Crash错误

    http://www.cppblog.com/Walker/archive/2012/11/08/146153.html http://blog.sina.com.cn/s/blog_48f93b53 ...

  5. Android开发之style属性和提前定义样式

    摘要 Android平台定义的主题样式: android:theme="@android:style/Theme.Dialog" // 将一个Activity显示为对话框模式and ...

  6. SQL视图索引

    视图: 视图就相当于一个查询结果,它相对应的是表 表----真正存储数据的地方 视图---不存储数据,展示查询的结果 注意: 1.视图就是为了查询数据方便.一般不要试图向视图中插入数据,容易出错. 2 ...

  7. [Cocos2d-x]代码段记录

    一些零碎的代码,便于以后查找 1.添加动画 //添加动画帧 CCAnimation* animation = CCAnimation::create(); ; i< ;i++) { ] = {} ...

  8. vdsm的SSL证书验证过程

    1. Copy the VDSM certificate of the RHEV-H(Red Hat Enterprise Virtualization Hypervisor ) host to th ...

  9. git使用ssh密钥和https两种认证方式汇总(转)

    在版本库的SSH方式和HTTPS方式是不同的,具体来说就是url信息的不同,但是,实际的认证机制也是不同的.当建立了本机密钥之后,使用ssh方式实际上是不需要再次认证的,而https则每次需要输入密码 ...

  10. [置顶] C++学习书单

    关于C++的书太多了,很容易让人没有头绪.一直想整理下,把这些书列个书单出来,直到今天才动手.希望我的经验能给后来的初学者一点帮助. 1.<C++程序设计教程> 钱能 很多学校把这本书选做 ...