• c# iTextSharp导出PDF


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Threading;
    using iTextSharp.text;
    using System.IO;
    using System.Windows.Forms;
    using iTextSharp.text.pdf;
    
    namespace Bmw.Web.BLL
    {
        public class OutPDF
        {
            private static System.Drawing.Bitmap bitmap;
            private static string url;
            private static int w = 760, h = 900;
            public static void setBitmap()
            {
                using (WebBrowser wb = new WebBrowser())//应该是new的问题?。。
                {
                    wb.Width = w;
                    wb.Height = h;
                    wb.ScrollBarsEnabled = false;
                    
                    wb.Navigate(url);
                    //确保页面被解析完全
                    while (wb.ReadyState != WebBrowserReadyState.Complete)
                    {
                        System.Windows.Forms.Application.DoEvents();
                    }
                    bitmap = new System.Drawing.Bitmap(w, h);
                    wb.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, w, h));
                    wb.Dispose();
                }
            }
            public static void CreatPdf()
            {
                Document doc = new Document(PageSize.A4, 9, 18, 36, 36);//左右上下
                MemoryStream ms = new MemoryStream();
                try
                {
                    PdfWriter writer = PdfWriter.GetInstance(doc, ms);
                    writer.CloseStream = false;
                    doc.Open();
                    url = "http://localhost:5026/Orders/SeeOneOrder?Order_Id=31";
                    Thread thread = new Thread(new ThreadStart(setBitmap));
                    thread.SetApartmentState(ApartmentState.STA);
                    thread.Start();
                    while (thread.IsAlive)
                        Thread.Sleep(100);
                    bitmap.Save("t.bmp");
    
                    iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(bitmap, System.Drawing.Imaging.ImageFormat.Bmp);
                    img.ScalePercent(75);//560 630
                    doc.Add(img);
                }
                catch (Exception err)
                {
                    throw new Exception(err.Message);
                }
                finally
                {
                    doc.Close();
                    //using (FileStream fs = new FileStream("out.pdf", FileMode.Create))
                    //{
                        ms.Position = 0;
                        byte[] bit = new byte[ms.Length];
                        ms.Read(bit, 0, (int)ms.Length);
                        //fs.Write(bit, 0, bit.Length);
                    //}
                    ViewPdf(ms);
                }
            }
            private static void ViewPdf(Stream fs)
            {
    
                HttpContext.Current.Response.Clear();
                //中文名的话
                //Response.AppendHeader("Content-Disposition", "attachment;filename=" +
                //             HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ";charset=GB2312");
                HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;FileName=out.pdf");
                HttpContext.Current.Response.AddHeader("Content-Length", fs.Length.ToString());
                HttpContext.Current.Response.ContentType = "application/pdf";
                long fileLength = fs.Length;
                int size = 10240;//10K一--分块下载,10K为1块
                byte[] readData = new byte[size];
                if (size > fileLength)
                    size = Convert.ToInt32(fileLength);
                long fPos = 0;
                bool isEnd = false;
                while (!isEnd)
                {
                    if ((fPos + size) >= fileLength)
                    {
                        size = Convert.ToInt32(fileLength - fPos);
                        isEnd = true;
                    }
                    readData = new byte[size];
                    fs.Position = fPos;
                    fs.Read(readData, 0, size);
                    HttpContext.Current.Response.BinaryWrite(readData);
                    HttpContext.Current.Response.OutputStream.Flush();
                    fPos += size;
                }
                fs.Close();
                HttpContext.Current.Response.OutputStream.Close();
                HttpContext.Current.Response.End();//非常重要,没有这句的话,页面的HTML代码将会保存到文件中
                HttpContext.Current.Response.Close();
            }
        }
    }
    

      

  • 相关阅读:
    [Project Euler] 来做欧拉项目练习题吧: 题目002(转)
    [Project Euler] 欧拉项目练习题001(转)
    Linux wc 结合cat命令统计代码行数
    mysql:主键和索引的区别
    一些常用的SQL语句
    mysql 性能优化方案
    修改mysql用户密码
    Ruby on Rails,创建开发用的MYSQL数据库
    mysql数据库中分区的概念
    Rails 数据库操作
  • 原文地址:https://www.cnblogs.com/kinpauln/p/3600408.html
Copyright © 2020-2023  润新知