简体   繁体   English

如何将图像背景作为水印添加到pdf文件?

[英]How to add an image background as watermark to the pdf file?

I Created ExportToPDF Button to export Gridview to PDF file, then how can I add an image background as watermark to the PDF file?我创建了 ExportToPDF 按钮将 Gridview 导出为 PDF 文件,那么如何将图像背景作为水印添加到 PDF 文件中?

protected void ExportToPDF(object sender, EventArgs e)
{
    using (StringWriter sw = new StringWriter())
    using (HtmlTextWriter hw = new HtmlTextWriter(sw))
    {
        gvOrders.RenderControl(hw);
        StringReader sr = new StringReader(sw.ToString());
        Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
        PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
        pdfDoc.Open();
        XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
        pdfDoc.Close();
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Write(pdfDoc);
        Response.End();
    }
}

One solution would be;一种解决方案是;

private static Image watermark_600
        {
            get
            {
                if (_watermark_600 == null)
                    _watermark_600 = Image.FromFile(HttpContext.Current.Server.MapPath(@"~/content/Images/watermark600.png"));
                return _watermark_600;
            }
        }

then,然后,

public static byte[] AddWaterMark(byte[] fileContent)
        {
            if (fileContent == null)
                return null;
            //create a image object containing the photograph to watermark            
            using (var img = new ImageFactory())
            using (var imgWatermark = new ImageLayer())
            {
                img.Load(fileContent);
                if (img.Image.Width < 750 && img.Image.Height < 750)
                    imgWatermark.Image = (Image)watermark_200.Clone();
                else if (img.Image.Width < 1500 && img.Image.Height < 1500)
                    imgWatermark.Image = (Image)watermark_400.Clone();
                else if (img.Image.Width < 2500 && img.Image.Height < 2500)
                    imgWatermark.Image = (Image)watermark_600.Clone();
                else
                    imgWatermark.Image = (Image)watermark_800.Clone();

                int x = Math.Abs((img.Image.Width - imgWatermark.Image.Width)) / 2;
                int y = Math.Abs((img.Image.Height - imgWatermark.Image.Height)) / 2;

                imgWatermark.Position = new Point(x, y);
                imgWatermark.Opacity = 90;
                img.Overlay(imgWatermark);
                using (MemoryStream msbyte = new MemoryStream())
                {
                    img.Save(msbyte);
                    return msbyte.ToArray();
                }
            }
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM