zoukankan      html  css  js  c++  java
  • h5打印Html

    今天有个客户提了个需求,有个较复杂的页面需要导出为pdf,如果使用现有的生成pdf,再通过企业微信替换通讯录比较复杂,于是直接调用系统打印功能实现

    找到一篇比较简单的解决方案

    https://blog.csdn.net/alokka/article/details/75103322

    1、添加js代码

    <script language="javascript">
    function preview(oper)
    {
    if (oper < 10){
    bdhtml=window.document.body.innerHTML;//获取当前页的html代码
    sprnstr="<!--startprint"+oper+"-->";//设置打印开始区域
    eprnstr="<!--endprint"+oper+"-->";//设置打印结束区域
    prnhtml=bdhtml.substring(bdhtml.indexOf(sprnstr)+18); //从开始代码向后取html
    prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));//从结束代码向前取html
    window.document.body.innerHTML=prnhtml;
    window.print();
    window.document.body.innerHTML=bdhtml;
    } else {
    window.print();
    }
    }
    </script>

    2、需要打印的部分,使用如下代码包裹,多个打印区域可以设置多个startprint2...

    <!--startprint1-->
    
    <!--打印内容开始-->
    <div id=sty>
        ...
    </div>
    <!--打印内容结束-->
    
    <!--endprint1-->

    3、打印

     <a onclick="preview(1);"style="float:right;position:relative">打印</a>

    4、效果

     5、如果使用输出PDF方式,可以是使用PDFHelper

    using System.IO;
    using iTextSharp.text;
    using iTextSharp.text.pdf;
    
    namespace Utilities
    {
        /// <summary>
        /// PDF文档操作类
        /// </summary>
        //------------------------------------调用--------------------------------------------
        //PDFHelper pdf = new PDFHelper();
        //pdf.Open(new FileStream(path, FileMode.Create));
        //pdf.SetBaseFont(@"C:WindowsFontsSIMHEI.TTF");
        //pdf.AddParagraph("测试文档(生成时间:" + DateTime.Now + ")", 15, 1, 20, 0, 0);
        //pdf.Close();
        //-------------------------------------------------------------------------------------
        public class PDFHelper
        {
            #region 构造函数
            /// <summary>
            /// 构造函数
            /// </summary>
            public PDFHelper()
            {
                rect = PageSize.A4;
                document = new Document(rect);
            }
    
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="type">页面大小(如"A4")</param>
            public PDFHelper(string type)
            {
                SetPageSize(type);
                document = new Document(rect);
            }
    
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="type">页面大小(如"A4")</param>
            /// <param name="marginLeft">内容距左边框距离</param>
            /// <param name="marginRight">内容距右边框距离</param>
            /// <param name="marginTop">内容距上边框距离</param>
            /// <param name="marginBottom">内容距下边框距离</param>
            public PDFHelper(string type, float marginLeft, float marginRight, float marginTop, float marginBottom)
            {
                SetPageSize(type);
                document = new Document(rect, marginLeft, marginRight, marginTop, marginBottom);
            }
            #endregion
    
            #region 私有字段
            private Font font;
            private Rectangle rect;   //文档大小
            private Document document;//文档对象
            private BaseFont basefont;//字体
            #endregion
    
            #region 设置字体
            /// <summary>
            /// 设置字体
            /// </summary>
            public void SetBaseFont(string path)
            {
                basefont = BaseFont.CreateFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            }
    
            /// <summary>
            /// 设置字体
            /// </summary>
            /// <param name="size">字体大小</param>
            public void SetFont(float size)
            {
                font = new Font(basefont, size);
            }
            #endregion
    
            #region 设置页面大小
            /// <summary>
            /// 设置页面大小
            /// </summary>
            /// <param name="type">页面大小(如"A4")</param>
            public void SetPageSize(string type)
            {
                switch (type.Trim())
                {
                    case "A4":
                        rect = PageSize.A4;
                        break;
                    case "A8":
                        rect = PageSize.A8;
                        break;
                }
            }
            #endregion
    
            #region 实例化文档
            /// <summary>
            /// 实例化文档
            /// </summary>
            /// <param name="os">文档相关信息(如路径,打开方式等)</param>
            public void GetInstance(Stream os)
            {
                PdfWriter.GetInstance(document, os);
            }
            #endregion
    
            #region 打开文档对象
            /// <summary>
            /// 打开文档对象
            /// </summary>
            /// <param name="os">文档相关信息(如路径,打开方式等)</param>
            public void Open(Stream os)
            {
                GetInstance(os);
                document.Open();
            }
            #endregion
    
            #region 关闭打开的文档
            /// <summary>
            /// 关闭打开的文档
            /// </summary>
            public void Close()
            {
                document.Close();
            }
            #endregion
    
            #region 添加段落
            /// <summary>
            /// 添加段落
            /// </summary>
            /// <param name="content">内容</param>
            /// <param name="fontsize">字体大小</param>
            public void AddParagraph(string content, float fontsize)
            {
                SetFont(fontsize);
                Paragraph pra = new Paragraph(content, font);
                document.Add(pra);
            }
    
            /// <summary>
            /// 添加段落
            /// </summary>
            /// <param name="content">内容</param>
            /// <param name="fontsize">字体大小</param>
            /// <param name="Alignment">对齐方式(1为居中,0为居左,2为居右)</param>
            /// <param name="SpacingAfter">段后空行数(0为默认值)</param>
            /// <param name="SpacingBefore">段前空行数(0为默认值)</param>
            /// <param name="MultipliedLeading">行间距(0为默认值)</param>
            public void AddParagraph(string content, float fontsize, int Alignment, float SpacingAfter, float SpacingBefore, float MultipliedLeading)
            {
                SetFont(fontsize);
                Paragraph pra = new Paragraph(content, font);
                pra.Alignment = Alignment;
                if (SpacingAfter != 0)
                {
                    pra.SpacingAfter = SpacingAfter;
                }
                if (SpacingBefore != 0)
                {
                    pra.SpacingBefore = SpacingBefore;
                }
                if (MultipliedLeading != 0)
                {
                    pra.MultipliedLeading = MultipliedLeading;
                }
                document.Add(pra);
            }
            #endregion
    
            #region 添加图片
            /// <summary>
            /// 添加图片
            /// </summary>
            /// <param name="path">图片路径</param>
            /// <param name="Alignment">对齐方式(1为居中,0为居左,2为居右)</param>
            /// <param name="newWidth">图片宽(0为默认值,如果宽度大于页宽将按比率缩放)</param>
            /// <param name="newHeight">图片高</param>
            public void AddImage(string path, int Alignment, float newWidth, float newHeight)
            {
                Image img = Image.GetInstance(path);
                img.Alignment = Alignment;
                if (newWidth != 0)
                {
                    img.ScaleAbsolute(newWidth, newHeight);
                }
                else
                {
                    if (img.Width > PageSize.A4.Width)
                    {
                        img.ScaleAbsolute(rect.Width, img.Width * img.Height / rect.Height);
                    }
                }
                document.Add(img);
            }
            #endregion
    
            #region 添加链接、点
            /// <summary>
            /// 添加链接
            /// </summary>
            /// <param name="Content">链接文字</param>
            /// <param name="FontSize">字体大小</param>
            /// <param name="Reference">链接地址</param>
            public void AddAnchorReference(string Content, float FontSize, string Reference)
            {
                SetFont(FontSize);
                Anchor auc = new Anchor(Content, font);
                auc.Reference = Reference;
                document.Add(auc);
            }
    
            /// <summary>
            /// 添加链接点
            /// </summary>
            /// <param name="Content">链接文字</param>
            /// <param name="FontSize">字体大小</param>
            /// <param name="Name">链接点名</param>
            public void AddAnchorName(string Content, float FontSize, string Name)
            {
                SetFont(FontSize);
                Anchor auc = new Anchor(Content, font);
                auc.Name = Name;
                document.Add(auc);
            }
            #endregion
        }
    }
  • 相关阅读:
    Java核心技术 卷一 笔记四 库类的直接使用
    Java核心技术 卷一 笔记三 大数值及数组
    Java核心技术 卷一 笔记2 字符串的复制
    Java核心技术 卷一 笔记1
    修改css 样式后, hover事件 不生效
    修改 element ui input 输入框 样式不生效问题
    css3 计算属性
    Vue3 改动系列
    浏览器实现,向下滑动 鼠标滚轮,页面横向移动
    linux ceont0s7 vue 打包压缩图片 一直报错
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/13405853.html
Copyright © 2011-2022 走看看