软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> Web前端 -> iTextSharp5.0页眉页脚及Asp.net预览的实现(PDF导出) -> 正文阅读

[Web前端]iTextSharp5.0页眉页脚及Asp.net预览的实现(PDF导出)


iTextSharp5.0后没有了HeaderFooter的类,导致页眉页脚难以实现。经查资料后,发现可以通过PdfPageEventHelper里面的OnEndPage来实现。先看看实现的效果图。
[img]http://img.blog.csdn.net/20150729151910569?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
页眉和页脚部分使用PdfPTable来达成,下面是实现代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace ITextSharpTest
{
    public class PDFBase : PdfPageEventHelper
    {
        #region 属性
        private String _fontFilePathForHeaderFooter = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "SIMHEI.TTF");
        /// <summary>
        /// 页眉/页脚所用的字体
        /// </summary>
        public String FontFilePathForHeaderFooter
        {
            get
            {
                return _fontFilePathForHeaderFooter;
            }

            set
            {
                _fontFilePathForHeaderFooter = value;
            }
        }

        private String _fontFilePathForBody = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "SIMSUN.TTC,1");
        /// <summary>
        /// 正文内容所用的字体
        /// </summary>
        public String FontFilePathForBody
        {
            get { return _fontFilePathForBody; }
            set { _fontFilePathForBody = value; }
        }


        private PdfPTable _header;
        /// <summary>
        /// 页眉
        /// </summary>
        public PdfPTable Header
        {
            get { return _header; }
            private set { _header = value; }
        }

        private PdfPTable _footer;
        /// <summary>
        /// 页脚
        /// </summary>
        public PdfPTable Footer
        {
            get { return _footer; }
            private set { _footer = value; }
        }


        private BaseFont _baseFontForHeaderFooter;
        /// <summary>
        /// 页眉页脚所用的字体
        /// </summary>
        public BaseFont BaseFontForHeaderFooter
        {
            get { return _baseFontForHeaderFooter; }
            set { _baseFontForHeaderFooter = value; }
        }

        private BaseFont _baseFontForBody;
        /// <summary>
        /// 正文所用的字体
        /// </summary>
        public BaseFont BaseFontForBody
        {
            get { return _baseFontForBody; }
            set { _baseFontForBody = value; }
        }

        private Document _document;
        /// <summary>
        /// PDF的Document
        /// </summary>
        public Document Document
        {
            get { return _document; }
            private set { _document = value; }
        }

        #endregion


        public override void OnOpenDocument(PdfWriter writer, Document document)
        {
            try
            {
                BaseFontForHeaderFooter = BaseFont.CreateFont(FontFilePathForHeaderFooter, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                BaseFontForBody = BaseFont.CreateFont(FontFilePathForBody, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                Document = document;
            }
            catch (DocumentException de)
            {

            }
            catch (System.IO.IOException ioe)
            {

            }
        }

        #region GenerateHeader
        /// <summary>
        /// 生成页眉
        /// </summary>
        /// <param name="writer"></param>
        /// <returns></returns>
        public virtual PdfPTable GenerateHeader(iTextSharp.text.pdf.PdfWriter writer)
        {
            return null;
        }
        #endregion

        #region GenerateFooter
        /// <summary>
        /// 生成页脚
        /// </summary>
        /// <param name="writer"></param>
        /// <returns></returns>
        public virtual PdfPTable GenerateFooter(iTextSharp.text.pdf.PdfWriter writer)
        {
            return null;
        }
        #endregion

        public override void OnEndPage(iTextSharp.text.pdf.PdfWriter writer, iTextSharp.text.Document document)
        {
            base.OnEndPage(writer, document);

            //输出页眉
            Header = GenerateHeader(writer);
            Header.TotalWidth = document.PageSize.Width - 20f;
            ///调用PdfTable的WriteSelectedRows方法。该方法以第一个参数作为开始行写入。
            ///第二个参数-1表示没有结束行,并且包含所写的所有行。
            ///第三个参数和第四个参数是开始写入的坐标x和y.
            Header.WriteSelectedRows(0, -1, 10, document.PageSize.Height - 20, writer.DirectContent);

            //输出页脚
            Footer = GenerateFooter(writer);
            Footer.TotalWidth = document.PageSize.Width - 20f;
            Footer.WriteSelectedRows(0, -1, 10, document.PageSize.GetBottom(50), writer.DirectContent);
        }
    }
}

注:为了便于使用,做了一个PDFBase,后续只需要继承即可。
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace ITextSharpTest
{
    /// <summary>
    /// PDF报表
    /// </summary>
    public class PDFReport : PDFBase
    {
        #region 属性
        private int _pageRowCount = 12;
        /// <summary>
        /// 每页的数据行数
        /// </summary>
        public int PageRowCount
        {
            get { return _pageRowCount; }
            set { _pageRowCount = value; }
        }
        #endregion

        /// <summary>
        /// 模拟数据。实际时可能需要从数据库或网络中获取.
        /// </summary>
        private DataTable _dtSimulateData = null;

        private DataTable GenerateSimulateData()
        {
            DataTable dtSimulateData = new DataTable();
            dtSimulateData.Columns.Add("Order", typeof(int));//序号
            dtSimulateData.Columns.Add("No");//料号
            dtSimulateData.Columns.Add("Name");//名称
            dtSimulateData.Columns.Add("Type");//类型
            dtSimulateData.Columns.Add("GetTime");//领取时间
            dtSimulateData.Columns.Add("BackTime");//归还时间
            dtSimulateData.Columns.Add("Remark");//备注
            DataRow row = null;
            String[] types = new string[] { "文具", "辅料", "生活用品", "测试用具", "实体机" };
            DateTime getDate = DateTime.Now;
            DateTime backDate = DateTime.Now;
            for (int i = 0; i < 100; i++)
            {
                row = dtSimulateData.NewRow();
                row["Order"] = i + 1;
                row["No"] = (10000 + i + 1).ToString();
                row["Name"] = Guid.NewGuid().ToString().Substring(0, 5);//造出随机名称
                row["Type"] = types[(i * 3) % 5];
                row["GetTime"] = getDate.AddDays(i).ToString("yyyy-MM-dd");
                row["BackTime"] = ((i + i) % 3 == 0) ? "" : (backDate.AddDays(i + (i * 3) % 8).ToString("yyyy-MM-dd"));//造出没有归还时间的数据
                row["Remark"] = "XXXXXXX";
                dtSimulateData.Rows.Add(row);
            }
            return dtSimulateData;
        }

        #region GenerateHeader
        /// <summary>
        /// 生成页眉
        /// </summary>
        /// <param name="fontFilePath"></param>
        /// <param name="pageNumber"></param>
        /// <returns></returns>
        public override PdfPTable GenerateHeader(iTextSharp.text.pdf.PdfWriter writer)
        {
            BaseFont baseFont = BaseFontForHeaderFooter;
            iTextSharp.text.Font font_logo = new iTextSharp.text.Font(baseFont, 30, iTextSharp.text.Font.BOLD);
            iTextSharp.text.Font font_header1 = new iTextSharp.text.Font(baseFont, 16, iTextSharp.text.Font.BOLD);
            iTextSharp.text.Font font_header2 = new iTextSharp.text.Font(baseFont, 12, iTextSharp.text.Font.BOLD);
            iTextSharp.text.Font font_headerContent = new iTextSharp.text.Font(baseFont, 12, iTextSharp.text.Font.NORMAL);

            float[] widths = new float[] { 55, 300, 50, 90, 15, 20, 15 };

            PdfPTable header = new PdfPTable(widths);
            PdfPCell cell = new PdfPCell();
            cell.BorderWidthBottom = 2;
            cell.BorderWidthLeft = 2;
            cell.BorderWidthTop = 2;
            cell.BorderWidthRight = 2;
            cell.FixedHeight = 35;
            cell.Phrase = new Phrase("LOGO", font_logo);
            cell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
            cell.VerticalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
            cell.PaddingTop = -1;
            header.AddCell(cell);

            cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_LEFT);
            cell.Phrase = new Paragraph("PDF报表示例", font_header1);
            header.AddCell(cell);


            cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_RIGHT);
            cell.Phrase = new Paragraph("日期:", font_header2);
            header.AddCell(cell);

            cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_LEFT);
            cell.Phrase = new Paragraph("2015-07-27", font_headerContent);
            header.AddCell(cell);

            cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_RIGHT);
            cell.Phrase = new Paragraph("第", font_header2);
            header.AddCell(cell);

            cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_CENTER);
            cell.Phrase = new Paragraph(writer.PageNumber.ToString(), font_headerContent);
            header.AddCell(cell);

            cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_RIGHT);
            cell.Phrase = new Paragraph("页", font_header2);
            header.AddCell(cell);
            return header;
        }

        #region GenerateOnlyBottomBorderCell
        /// <summary>
        /// 生成只有底边的cell
        /// </summary>
        /// <param name="bottomBorder"></param>
        /// <param name="horizontalAlignment">水平对齐方式<see cref="iTextSharp.text.Element"/></param>
        /// <returns></returns>
        private PdfPCell GenerateOnlyBottomBorderCell(int bottomBorder,
                                                            int horizontalAlignment)
        {
            PdfPCell cell = GenerateOnlyBottomBorderCell(bottomBorder, horizontalAlignment, iTextSharp.text.Element.ALIGN_BOTTOM);
            cell.PaddingBottom = 5;
            return cell;
        }

        /// <summary>
        /// 生成只有底边的cell
        /// </summary>
        /// <param name="bottomBorder"></param>
        /// <param name="horizontalAlignment">水平对齐方式<see cref="iTextSharp.text.Element"/></param>
        /// <param name="verticalAlignment">垂直对齐方式<see cref="iTextSharp.text.Element"/</param>
        /// <returns></returns>
        private PdfPCell GenerateOnlyBottomBorderCell(int bottomBorder,
                                                            int horizontalAlignment,
                                                            int verticalAlignment)
        {
            PdfPCell cell = GenerateOnlyBottomBorderCell(bottomBorder);
            cell.HorizontalAlignment = horizontalAlignment;
            cell.VerticalAlignment = verticalAlignment; ;
            return cell;
        }

        /// <summary>
        /// 生成只有底边的cell
        /// </summary>
        /// <param name="bottomBorder"></param>
        /// <returns></returns>
        private PdfPCell GenerateOnlyBottomBorderCell(int bottomBorder)
        {
            PdfPCell cell = new PdfPCell();
            cell.BorderWidthBottom = 2;
            cell.BorderWidthLeft = 0;
            cell.BorderWidthTop = 0;
            cell.BorderWidthRight = 0;
            return cell;
        }
        #endregion

        #endregion

        #region GenerateFooter
        public override PdfPTable GenerateFooter(iTextSharp.text.pdf.PdfWriter writer)
        {
            BaseFont baseFont = BaseFontForHeaderFooter;
            iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, 10, iTextSharp.text.Font.NORMAL);

            PdfPTable footer = new PdfPTable(3);
            AddFooterCell(footer, "审阅:", font);
            AddFooterCell(footer, "审批:", font);
            AddFooterCell(footer, "制表:张三", font);
            return footer;
        }

        private void AddFooterCell(PdfPTable foot, String text, iTextSharp.text.Font font)
        {
            PdfPCell cell = new PdfPCell();
            cell.BorderWidthTop = 2;
            cell.BorderWidthRight = 0;
            cell.BorderWidthBottom = 0;
            cell.BorderWidthLeft = 0;
            cell.Phrase = new Phrase(text, font);
            cell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
            foot.AddCell(cell);
        }
        #endregion

        #region ExportPDF
        /// <summary>
        /// 导出PDF
        /// </summary>
        /// <param name="path">导出路径</param>
        public static void ExportPDF(String path)
        {
            PDFReport pdfReport = new PDFReport();
            Document document = new Document(PageSize.A4.Rotate(), -90, -90, 60, 10);//此处设置的偏移量是为了加大页面的可用范围,可以使用默认.
            PdfWriter pdfWriter = PdfWriter.GetInstance(document, new FileStream(path, FileMode.Create));
            pdfWriter.PageEvent = pdfReport;//此处一定要赋值,才能触发页眉和页脚的处理
            document.Open();
            pdfReport.AddBody(document);
            document.Close();
        }

        /// <summary>
        /// 导出PDF
        /// </summary>
        /// <param name="path">导出路径</param>
        public static byte[] ExportPDF()
        {
            PDFReport pdfReport = new PDFReport();
            Document document = new Document(PageSize.A4.Rotate(), -90, -90, 60, 10);//此处设置的偏移量是为了加大页面的可用范围,可以使用默认.
            MemoryStream ms = new MemoryStream();
            PdfWriter pdfWriter = PdfWriter.GetInstance(document, ms);
            pdfWriter.PageEvent = pdfReport;//此处一定要赋值,才能触发页眉和页脚的处理
            document.Open();
            pdfReport.AddBody(document);
            document.Close();
            byte[] buff = ms.ToArray();
            return buff;
        }
        #endregion

        #region AddBody
        private void AddBody(Document document)
        {
            _dtSimulateData = GenerateSimulateData();
            int count = (_dtSimulateData.Rows.Count + (PageRowCount - 1)) / PageRowCount;
            for (int i = 0; i < count; i++)
            {
                AddBodySinglePage(i + 1);
                document.NewPage();
            }
        }

        private void AddBodySinglePage(int pageNumber)
        {
            BaseFont baseFont = BaseFontForBody;
            iTextSharp.text.Font font_columnHeader = new iTextSharp.text.Font(baseFont, 11f, iTextSharp.text.Font.BOLD);
            iTextSharp.text.Font font_contentNormal = new iTextSharp.text.Font(baseFont, 9.5f, iTextSharp.text.Font.NORMAL);
            iTextSharp.text.Font font_contentSmall = new iTextSharp.text.Font(baseFont, 8f, iTextSharp.text.Font.NORMAL);

            int columnCount = 6;//此处是为了当列数很多时,便于循环生成所要的列宽比例
            float[] widths = new float[columnCount];
            for (int i = 0; i < columnCount; i++)
            {
                widths[i] = 1;
            }
            //需要加宽的再进行额外处理
            widths[3] = 2;//时间
            widths[4] = 3;//备注

            PdfPTable bodyTable = new PdfPTable(widths);
            bodyTable.SpacingBefore = 10;//与头部的距离

            AddBodyHeader(bodyTable, font_columnHeader);
            AddBodyContent(bodyTable, font_contentNormal, font_contentSmall, pageNumber);

            Document.Add(bodyTable);
        }

        #region AddBodyHeader
        /// <summary>
        /// 添加Body的列标题
        /// </summary>
        /// <param name="document"></param>
        /// <param name="font_columnHeader"></param>
        private void AddBodyHeader(PdfPTable bodyTable, iTextSharp.text.Font font_columnHeader)
        {
            //采用Rowspan和Colspan来控制单元格的合并与拆分,类似于HTML的Table.
            AddColumnHeaderCell(bodyTable, "料号", font_columnHeader, 1, 2);
            AddColumnHeaderCell(bodyTable, "名称", font_columnHeader, 1, 2);
            AddColumnHeaderCell(bodyTable, "种类", font_columnHeader, 1, 2);
            AddColumnHeaderCell(bodyTable, "时间", font_columnHeader, 2, 1);//表头下还有两列表头
            AddColumnHeaderCell(bodyTable, "备注", font_columnHeader, 1, 2, true, true);

            //时间
            AddColumnHeaderCell(bodyTable, "领取", font_columnHeader);
            AddColumnHeaderCell(bodyTable, "归还", font_columnHeader, true, true);
        }
        #endregion

        #region AddBodyContent Function
        /// <summary>
        /// 添加报表正文
        /// </summary>
        /// <param name="bodyTable"></param>
        /// <param name="fontNormal">普通字体</param>
        /// <param name="fontSmall">小字体,当内容显示不下,需要使用小字体来显示时,可以使用.</param>
        /// <param name="pageNumber">页码。便于从数据库中按页拉取数据时使用.</param>
        public void AddBodyContent(PdfPTable bodyTable,
                                   iTextSharp.text.Font fontNormal,
                                   iTextSharp.text.Font fontSmall,
                                   int pageNumber)
        {
            String filterExpression = String.Format("Order>{0} AND Order<={1}",
                                                    (pageNumber - 1) * PageRowCount,
                                                     pageNumber * PageRowCount);
            DataRow[] rows = _dtSimulateData.Select(filterExpression);
            foreach (var row in rows)
            {
                AddBodyContentRow(bodyTable, fontNormal, fontSmall, row);
            }
        }

        private void AddBodyContentRow(PdfPTable bodyTable, iTextSharp.text.Font fontNormal, iTextSharp.text.Font fontSmall, DataRow row)
        {
            AddBodyContentCell(bodyTable, String.Format("{0}", row["No"]), fontNormal);//料号
            AddBodyContentCell(bodyTable, String.Format("{0}", row["Name"]), fontNormal);//名称
            AddBodyContentCell(bodyTable, String.Format("{0}", row["Type"]), fontNormal);//种类
            AddBodyContentCell(bodyTable, String.Format("{0}", row["GetTime"]), fontSmall, 1);//时间-领取
            String backTime = String.Format("{0}", row["BackTime"]);
            AddBodyContentCell(bodyTable, backTime, fontSmall);//时间-归还
            AddBodyContentCell(bodyTable, String.Format("{0}", row["Remark"]), fontSmall, 2, true);//备注  

            AddBodyContentCell(bodyTable, (String.IsNullOrWhiteSpace(backTime)) ? "消耗品不需归还" : "", fontSmall, 1);//时间-领取(下方说明)
        }

        private static void AddBodyContentCell(PdfPTable bodyTable,
                                               String text,
                                               iTextSharp.text.Font font,
                                               int rowspan = 2,
                                               bool needRightBorder = false)
        {
            PdfPCell cell = new PdfPCell();
            float defaultBorder = 0.5f;
            cell.BorderWidthLeft = defaultBorder;
            cell.BorderWidthTop = 0;
            cell.BorderWidthRight = needRightBorder ? defaultBorder : 0;
            cell.BorderWidthBottom = defaultBorder;
            cell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
            cell.VerticalAlignment = iTextSharp.text.Element.ALIGN_BASELINE;
            cell.Rowspan = rowspan;
            cell.PaddingBottom = 4;
            cell.Phrase = new Phrase(text, font);
            cell.FixedHeight = 18f;
            bodyTable.AddCell(cell);
        }
        #endregion

        #region AddColumnHeaderCell Function
        /// <summary>
        /// 添加列标题单元格
        /// </summary>
        /// <param name="table">表格行的单元格列表</param>
        /// <param name="header">标题</param>
        /// <param name="font">字段</param>
        /// <param name="colspan">列空间</param>
        /// <param name="rowspan">行空间</param>
        /// <param name="needLeftBorder">是否需要左边框</param>
        /// <param name="needRightBorder">是否需要右边框</param>
        public void AddColumnHeaderCell(PdfPTable table,
                                                String header,
                                                iTextSharp.text.Font font,
                                                int colspan,
                                                int rowspan,
                                                bool needLeftBorder = true,
                                                bool needRightBorder = false)
        {
            PdfPCell cell = GenerateColumnHeaderCell(header, font, needLeftBorder, needRightBorder);
            if (colspan > 1)
            {
                cell.Colspan = colspan;
            }

            if (rowspan > 1)
            {
                cell.Rowspan = rowspan;
            }

            table.AddCell(cell);
        }

        /// <summary>
        /// 添加列标题单元格
        /// </summary>
        /// <param name="table">表格</param>
        /// <param name="header">标题</param>
        /// <param name="font">字段</param>
        /// <param name="needLeftBorder">是否需要左边框</param>
        /// <param name="needRightBorder">是否需要右边框</param>
        public void AddColumnHeaderCell(PdfPTable table,
                                                String header,
                                                iTextSharp.text.Font font,
                                                bool needLeftBorder = true,
                                                bool needRightBorder = false)
        {
            PdfPCell cell = GenerateColumnHeaderCell(header, font, needLeftBorder, needRightBorder);
            table.AddCell(cell);
        }
        #endregion

        #region GenerateColumnHeaderCell
        /// <summary>
        /// 生成列标题单元格
        /// </summary>
        /// <param name="header">标题</param>
        /// <param name="font">字段</param>
        /// <param name="needLeftBorder">是否需要左边框</param>
        /// <param name="needRightBorder">是否需要右边框</param>
        /// <returns></returns>
        private PdfPCell GenerateColumnHeaderCell(String header,
                                                        iTextSharp.text.Font font,
                                                        bool needLeftBorder = true,
                                                        bool needRightBorder = false)
        {
            PdfPCell cell = new PdfPCell();
            float border = 0.5f;
            cell.BorderWidthBottom = border;
            if (needLeftBorder)
            {
                cell.BorderWidthLeft = border;
            }
            else
            {
                cell.BorderWidthLeft = 0;
            }

            cell.BorderWidthTop = border;
            if (needRightBorder)
            {
                cell.BorderWidthRight = border;
            }
            else
            {
                cell.BorderWidthRight = 0;
            }

            cell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
            cell.VerticalAlignment = iTextSharp.text.Element.ALIGN_BASELINE;
            cell.PaddingBottom = 4;
            cell.Phrase = new Phrase(header, font);
            return cell;
        }
        #endregion

        #endregion
    }
}
注:代码对关键调用作了注释。
Asp.net中的调用
 public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                byte[] buff = PDFReport.ExportPDF();
                Response.ContentType = "application/pdf";
                Response.BinaryWrite(buff);
            }
        }
    }

WinForm中的调用
  private void btnExportPdf_Click(object sender, EventArgs e)
        {
            try
            {

                String path = textBoxPath.Text;
                if (String.IsNullOrWhiteSpace(path))
                {
                    MessageBox.Show("请输入路径");
                    return;
                }

                if (!Directory.Exists(Path.GetDirectoryName(path)))
                {
                    MessageBox.Show("指定的目录不存在");
                    return;
                }

                if (".PDF" != Path.GetExtension(path).ToUpper())
                {
                    path = path + ".pdf";
                }
                PDFReport.ExportPDF(path);
                MessageBox.Show("导出成功");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

源码下载http://download.csdn.net/detail/xxdddail/8943371
转载请注明出处http://blog.csdn.net/xxdddail/article/details/47128319
版权声明:本文为博主原创文章,未经博主允许不得转载。
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2015-07-30 15:13:59  
Web前端 最新文章
10分钟
SSM框架SSM项目源码SSM源码下载java框架整合
javascript入门
JavaScript常用对象Array(2)
8.Smarty3:模版中的内置函数
表单脚本
iTextSharp5.0页眉页脚及Asp.net预览的实现
MVC基础学习—理论篇
JavaScript
http协议中get与post区别详解
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture
生肖星座 三丰软件 视频 开发 Android开发 站长 古典小说 网文精选 搜图网 美图 中国文化英文版 多播 租车 短信
2017-7-24 16:44:02
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --