ASP.NET实现打印页面内容为pdf文件

1、打印功能使用spire.pdf组件,.NET环境使用4.7.2,效果图如下

ASP.NET实现打印页面内容为pdf文件
图 效果图

2、spire.pdf 和aspose.pdf都为超强的文档处理组件,具体实现程序如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using Spire.Pdf.AutomaticFields;

namespace demo1
{
    public partial class index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        string p_font = "宋体"; //字体样式
        Single p_fsize = 11f; //字体大小
        string p_file = "d://" + "test.pdf"; //文件名
        float p_scale = 0.8f; //缩放比例
        string doc_key = "公司"; //自定义属性名称
        string doc_value = "公司名称"; //属性值
        string yemei = ""; //页眉
        string yejiao = ""; //页脚

        protected void Button1_Click(object sender, EventArgs e)
        {
            p_file = "d://"+TextBox1.Text+".pdf";
            p_font = TextBox2.Text;
            p_fsize = Single.Parse(TextBox3.Text);
            p_scale = float.Parse(TextBox4.Text);
            yemei = TextBox5.Text;
            yejiao = TextBox6.Text;
            doc_key = TextBox7.Text;
            doc_value = TextBox8.Text;

            //初始化一个PdfDocument实例
            PdfDocument document = new PdfDocument();

            //设置边距
            PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
            PdfMargins margins = new PdfMargins();
            margins.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
            margins.Bottom = margins.Top;
            margins.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
            margins.Right = margins.Left;

            //添加新页
            PdfPageBase page = document.Pages.Add(PdfPageSize.A4, margins);

            //自定义PdfTrueTypeFont、PdfPen实例
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font(p_font, p_fsize), true);
            PdfPen pen = new PdfPen(Color.Black);

            //使用DrawString方法在指定位置写入文本
            string text = Label1.Text;
            page.Canvas.DrawString(text, font, pen, 100, 50);

            //加载图片到Image对象
            System.Drawing.Image image = System.Drawing.Image.FromFile(Server.MapPath("~/")+Image1.ImageUrl);

            //调整图片大小
            int width = image.Width;
            int height = image.Height;
            float scale = p_scale;  //缩放比例
            Size size = new Size((int)(width * scale), (int)(height * scale));
            Bitmap scaledImage = new Bitmap(image, size);

            //加载缩放后的图片到PdfImage对象
            PdfImage pdfImage = PdfImage.FromImage(scaledImage);

            //设置图片位置
            float x = 0f;
            float y = 100f;

            //在指定位置绘入图片
            page.Canvas.DrawImage(pdfImage, x, y);

            //遍历文档所有页面
            foreach (PdfPageBase page_1 in document.Pages)
            {
                //设置页面背景颜色
                page_1.BackgroundColor = Color.LightSkyBlue;
            }

            //添加自定义文档属性
            document.DocumentInformation.SetCustomerDefined(doc_key, doc_value);

            //将页边距设置为0 
            document.PageSettings.Margins = new PdfMargins(0);

            //创建PdfMargins对象,指定期望设置的页边距 
            PdfMargins margins1 = new PdfMargins(40, 60, 40, 60);

            //在文档模板的顶部和底部应用页眉页脚模板 
            document.Template.Top = CreateHeaderTemplate(document, margins);
            document.Template.Bottom = CreateFooterTemplate(document, margins);

            //在文档模板的左右部分应用空白模板 
            document.Template.Left = new PdfPageTemplateElement(margins.Left, document.PageSettings.Size.Height);
            document.Template.Right = new PdfPageTemplateElement(margins.Right, document.PageSettings.Size.Height);

            //在文档中添加两页并写入文字
            PdfPageBase page1 = document.Pages.Add();
            PdfPageBase page2 = document.Pages.Add();
            PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("华文楷体", 15f, FontStyle.Bold), true);
            page1.Canvas.DrawString(yemei, font, PdfBrushes.Black, 0, 0);
            page2.Canvas.DrawString(yemei, font, PdfBrushes.Black, 0, 0);

            //保存文档
            document.SaveToFile(p_file);
        }

        //创建页眉模板
        public PdfPageTemplateElement CreateHeaderTemplate(PdfDocument doc, PdfMargins margins)
        {
            //获取页面大小
            SizeF pageSize = doc.PageSettings.Size;

            //创建PdfPageTemplateElement对象headerSpace,即作页眉模板
            PdfPageTemplateElement headerSpace = new PdfPageTemplateElement(pageSize.Width, margins.Top);
            headerSpace.Foreground = false;

            //声明x,y两个float型变量
            float x = margins.Left;
            float y = 0;

            //在headerSpace中绘制图片
            //PdfImage headerImage = PdfImage.FromFile(@"C:\logo.png");
            //float width = headerImage.Width / 3;
            //float height = headerImage.Height / 3;
            //headerSpace.Graphics.DrawImage(headerImage, x, margins.Top - height - 2, width, height);

            //在headerSpace中绘制线段
            PdfPen pen = new PdfPen(PdfBrushes.Gray, 0.5f);
            headerSpace.Graphics.DrawLine(pen, x, y + margins.Top - 2, pageSize.Width - x, y + margins.Top - 2);

            //返回headerSpace
            return headerSpace;
        }

        // 创建页脚模板
        public  PdfPageTemplateElement CreateFooterTemplate(PdfDocument doc, PdfMargins margins)
        {
            //获取页面大小
            SizeF pageSize = doc.PageSettings.Size;

            //创建PdfPageTemplateElement对象footerSpace,即页脚模板
            PdfPageTemplateElement footerSpace = new PdfPageTemplateElement(pageSize.Width, margins.Bottom);
            footerSpace.Foreground = false;

            //声明x,y两个float型变量
            float x = margins.Left;
            float y = 0;

            //在footerSpace中绘制线段
            PdfPen pen = new PdfPen(PdfBrushes.Gray, 0.5f);
            footerSpace.Graphics.DrawLine(pen, x, y, pageSize.Width - x, y);

            //在footerSpace中绘制文字
            y = y + 5;
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("黑体", 10f, FontStyle.Bold), true);
            PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Left);
            String footerText =  yejiao;
            footerSpace.Graphics.DrawString(footerText, font, PdfBrushes.Black, x, y, format);

            //在footerSpace中绘制当前页码和总页码
            PdfPageNumberField number = new PdfPageNumberField();
            PdfPageCountField count = new PdfPageCountField();
            PdfCompositeField compositeField = new PdfCompositeField(font, PdfBrushes.Black, "第{0}页/共{1}页", number, count);
            compositeField.StringFormat = new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Top);
            SizeF size = font.MeasureString(compositeField.Text);
            compositeField.Bounds = new RectangleF(pageSize.Width - x - size.Width, y, size.Width, size.Height);
            compositeField.Draw(footerSpace.Graphics);

            //返回footerSpace
            return footerSpace;
        }
    }
}

原创文章,作者:witersen,如若转载,请注明出处:https://www.witersen.com

(0)
witersen的头像witersen
上一篇 2020年12月3日 上午9:37
下一篇 2020年12月4日 下午10:58

相关推荐

发表回复

登录后才能评论