分类: .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. 爬虫总结_python

    import sqlite3 Python 的一个非常大的优点是很容易写很容易跑起来,缺点就是很多不那么著名的(甚至一些著名的)程序和库都不像 C 和 C++ 那边那样专业.可靠(当然这也有动态类型 ...

  2. 使用ffmpeg 对视频截图,和视频转换格式

    //执行CMD命令方法 public static void CmdProcess(string command)//调用CMD        {            //实例化一个进程类      ...

  3. [C++]指针浅析

    Date: 2014-1-4 summary: 指针的简单理解,概念性的东西会比较多(100个人有100种理解,此处只代表我个人看法) Contents: 1.什么是指针 c++ primer plu ...

  4. NetBeans工具学习之道:NetBeans的(默认)快捷键

    没什么好介绍的,是netbeans的快捷键,比較全面.看到好多坛子里还在问eclipse下的这个快捷键怎么netbeans下没有呢.曾经收集的,如今列在以下: 事实上,在当前安装的netbeans的 ...

  5. Android开发者必须深入学习的10个应用开源项目

    Android 开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项 目,贡献出他们的智慧和创造力.学习开源代码是掌握技术的 ...

  6. GB2312引进和使用的字体

    一个:先上图看到的结果,下面的屏幕截图android在测试的结果"SD卡测试".."GPS测试"和其他字符24x24字体进来. 二:  1)简单介绍       ...

  7. java socket 的参数选项解读(转)

    java socket中有很多参数可以选择,这篇博客的目的是沉淀出这些参数的语义和用法,供自己以后查阅. 1.java socket参数选项总览 在JDK1.6中有如下参数选项: 1 public f ...

  8. QT4和QT3的区别

    著名的QT库前一阵子升级到4.xx版本了,我目前在开发的一个基于QT3的软件,由于受到QThread的各种困扰,因此打算尝试将代码升级到QT4, 但是当我实际开始升级工作后,才发现QT3和QT4的变化 ...

  9. ipv6加英文的中括号访问

    加英文的中括号就可以,如[2001:4998:c:e33::1004],我发现这是yahoo首页.但并不是所有IPv6网站都可以通过IPv6地址访问,跟IPv4一样,网站服务器端可以只绑定域名,不接受 ...

  10. c++ 如何获取系统时间 - zjnig711的信息仓库 - 博客频道 - CSDN.NET

    c++ 如何获取系统时间 - zjnig711的信息仓库 - 博客频道 - CSDN.NET c++ 如何获取系统时间 分类: C/C++ 2008-05-08 22:15 14115人阅读 评论(5 ...