Html生成PDF文件,并Zip打包下载

本文介绍了一种利用WebBrowser控件将网页内容转换为PDF文件的方法,并实现了通过C#进行ZIP文件打包的功能。该方法首先加载指定URL的内容,然后将其绘制为位图并转换成PDF保存。此外,还提供了ZIP文件压缩的实现方式,能够递归地压缩文件夹中的所有文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上代码:

 1     #region PDF转换实现
 2     protected void batchGD(string url,string fileName)
 3     {
 4         var webroot = System.Configuration.ConfigurationManager.AppSettings["WebRoot"];
 5         
 6         url = webroot + url;
 7         Thread thread = new Thread(delegate()
 8         {
 9             using (WebBrowser browser = new WebBrowser())
10             {
11                 browser.Tag = fileName;
12                 browser.ScrollBarsEnabled = false;
13                 browser.AllowNavigation = true;
14                 browser.ScriptErrorsSuppressed = true;
15                 browser.Navigate(url);
16                 browser.Width = 1024;
17                 browser.Height = 768;
18                 browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentCompleted);
19                 while (browser.ReadyState != WebBrowserReadyState.Complete)
20                 {
21                     System.Windows.Forms.Application.DoEvents();
22                 }
23             }
24         });
25         thread.SetApartmentState(ApartmentState.STA);
26         thread.Start();
27         thread.Join();
28 
29 
30 
31 
32     }
33     private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
34     {
35         WebBrowser m_WebBrowser = sender as WebBrowser;
36         var name = m_WebBrowser.Tag;
37         var FileName = StorePath + name + ".pdf";
38 
39         Bitmap m_Bitmap = new Bitmap(this.m_BrowserWidth, m_WebBrowser.Document.Body.ScrollRectangle.Height);
40         m_WebBrowser.Width = this.m_BrowserWidth;
41         m_WebBrowser.Height = m_WebBrowser.Document.Body.ScrollRectangle.Height;
42         m_WebBrowser.BringToFront();
43         Rectangle rectangle = new Rectangle(0, 0, this.m_BrowserWidth, m_WebBrowser.Document.Body.ScrollRectangle.Height);
44         m_WebBrowser.DrawToBitmap(m_Bitmap, rectangle);
45         m_Bitmap = (Bitmap)m_Bitmap.GetThumbnailImage(this.m_BrowserWidth, m_WebBrowser.Document.Body.ScrollRectangle.Height, null, IntPtr.Zero);
46 
47         using (MemoryStream stream = new MemoryStream())
48         {
49             m_Bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
50             byte[] bytes = stream.ToArray();
51             iTextSharp.text.Image im = iTextSharp.text.Image.GetInstance(bytes);
52             iTextSharp.text.Rectangle rec = new iTextSharp.text.Rectangle(im.Width, im.Height);
53             iTextSharp.text.Document doc = new iTextSharp.text.Document(rec, 0, 0, 0, 0);
54             iTextSharp.text.pdf.PdfWriter.GetInstance(doc, new System.IO.FileStream(FileName, System.IO.FileMode.Create));
55             doc.Open();
56 
57             doc.Add(im);
58             doc.Close();
59             doc.Dispose();
60         }
61         m_Bitmap.Dispose();
62         
63     }
64     #endregion
    #region ZIP打包实现
 
    public void ZipForDown(string outPathname, string folderName)
    {

        FileStream fsOut = File.Create(outPathname);
        ZipOutputStream zipStream = new ZipOutputStream(fsOut);

        zipStream.SetLevel(6); //0-9, 9 being the highest level of compression
        int folderOffset = folderName.Length + (folderName.EndsWith("\\") ? 0 : 1);
        CompressFolder(folderName, zipStream, folderOffset);

        zipStream.IsStreamOwner = true;    // Makes the Close also Close the underlying stream
        zipStream.Close();
    }
    private void CompressFolder(string path, ZipOutputStream zipStream, int folderOffset)
    {

        string[] files = Directory.GetFiles(path);

        foreach (string filename in files)
        {

            FileInfo fi = new FileInfo(filename);

            string entryName = filename.Substring(folderOffset); // Makes the name in zip based on the folder
            entryName = ZipEntry.CleanName(entryName); // Removes drive from name and fixes slash direction
            ZipEntry newEntry = new ZipEntry(entryName);
            newEntry.DateTime = fi.LastWriteTime; // Note the zip format stores 2 second granularity
            newEntry.Size = fi.Length;
            zipStream.PutNextEntry(newEntry);
            byte[] buffer = new byte[4096];
            using (FileStream streamReader = File.OpenRead(filename))
            {
                StreamUtils.Copy(streamReader, zipStream, buffer);
            }
            zipStream.CloseEntry();
        }
        string[] folders = Directory.GetDirectories(path);
        foreach (string folder in folders)
        {
            CompressFolder(folder, zipStream, folderOffset);
        }
    }
    #endregion

 

转载于:https://www.cnblogs.com/wu-fei/p/7016350.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值