iTextSharp简单生成pdf和操作pdf添加水印

http://www.cnblogs.com/LL-723/archive/2013/12/25/3490699.html

遇到需要导出页面到pdf,并添加pdf水印的业务。稍微研究了下,借阅网友的前车之鉴,经过使用可行之后的代码贴出来,做个记录,也供需要的网友借阅。

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using iTextSharp.text.pdf;
using System.IO;
using iTextSharp.text;

namespace NAIS.Common
{
    public class PDFSetWaterMark
    {
        /// <summary>
        /// 创建一个显示指定图片的pdf
        /// </summary>
        /// <param name="picPdfPath"></param>
        /// <param name="picPath"></param>
        /// <returns></returns>
        public static bool CreatePDFByPic(string picPdfPath,string picPath)
        {
            //新建一个文档
            Document doc = new Document();
            try
            {
                //建立一个书写器(Writer)与document对象关联
                PdfWriter.GetInstance(doc, new FileStream(picPdfPath, FileMode.Create, FileAccess.ReadWrite));
                //打开一个文档
                doc.Open();
                //向文档中添加内容
                Image img = Image.GetInstance(picPath);
                //img.SetAbsolutePosition();
                doc.Add(img);
                return true;
            }
            catch (Exception ex)
            {
                return false;
                throw ex;
            }
            finally
            {
                if (doc != null)
                {
                    doc.Close();
                }
            }

        }

        /// <summary>
        /// 加图片水印
        /// </summary>
        /// <param name="inputfilepath"></param>
        /// <param name="outputfilepath"></param>
        /// <param name="ModelPicName"></param>
        /// <param name="top"></param>
        /// <param name="left"></param>
        /// <returns></returns>
        public static bool PDFWatermark(string inputfilepath, string outputfilepath, string ModelPicName, float top, float left)
        {
            //throw new NotImplementedException();
            PdfReader pdfReader = null;
            PdfStamper pdfStamper = null;
            try
            {
                pdfReader = new PdfReader(inputfilepath);

                int numberOfPages = pdfReader.NumberOfPages;

                iTextSharp.text.Rectangle psize = pdfReader.GetPageSize(1);

                float width = psize.Width;

                float height = psize.Height;

                pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));

                PdfContentByte waterMarkContent;

                iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(ModelPicName);

                image.GrayFill = 20;//透明度,灰色填充
                //image.Rotation//旋转
                //image.RotationDegrees//旋转角度
                //水印的位置 
                if (left < 0)
                {
                    left = width/2 - image.Width + left;
                }

                //image.SetAbsolutePosition(left, (height - image.Height) - top);
                image.SetAbsolutePosition(left, (height/2 - image.Height) - top);


                //每一页加水印,也可以设置某一页加水印 
                for (int i = 1; i <= numberOfPages; i++)
                {
                    //waterMarkContent = pdfStamper.GetUnderContent(i);//内容下层加水印
                    waterMarkContent = pdfStamper.GetOverContent(i);//内容上层加水印

                    waterMarkContent.AddImage(image);
                }
                //strMsg = "success";
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
                
            }
            finally
            {

                if (pdfStamper != null)
                    pdfStamper.Close();

                if (pdfReader != null)
                    pdfReader.Close();
            }
        }
        /// <summary>
        /// 添加普通偏转角度文字水印
        /// </summary>
        /// <param name="inputfilepath"></param>
        /// <param name="outputfilepath"></param>
        /// <param name="waterMarkName"></param>
        /// <param name="permission"></param>
        public static void setWatermark(string inputfilepath, string outputfilepath,string waterMarkName)
        {
            PdfReader pdfReader = null;
            PdfStamper pdfStamper = null;
            try
            {
                pdfReader = new PdfReader(inputfilepath);
                pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));
                int total = pdfReader.NumberOfPages + 1;
                iTextSharp.text.Rectangle psize = pdfReader.GetPageSize(1);
                float width = psize.Width;
                float height = psize.Height;
                PdfContentByte content;
                BaseFont font = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                PdfGState gs = new PdfGState();
                for (int i = 1; i < total; i++) 
                {
                    content = pdfStamper.GetOverContent(i);//在内容上方加水印
                    //content = pdfStamper.GetUnderContent(i);//在内容下方加水印
                    //透明度
                    gs.FillOpacity = 0.3f;
                    content.SetGState(gs);
                    //content.SetGrayFill(0.3f);
                    //开始写入文本
                    content.BeginText();
                    content.SetColorFill(BaseColor.LIGHT_GRAY);
                    content.SetFontAndSize(font, 100);
                    content.SetTextMatrix(0, 0);
                    content.ShowTextAligned(Element.ALIGN_CENTER, waterMarkName, width / 2 - 50,height / 2 - 50, 55);
                    //content.SetColorFill(BaseColor.BLACK);
                    //content.SetFontAndSize(font, 8);
                    //content.ShowTextAligned(Element.ALIGN_CENTER, waterMarkName, 0, 0, 0);
                    content.EndText();
                }
            }catch (Exception ex)
            {
                throw ex;
            }
            finally
            {

                if (pdfStamper != null)
                    pdfStamper.Close();

                if (pdfReader != null)
                    pdfReader.Close();
            }
        }
        /// <summary>
        /// 添加倾斜水印
        /// </summary>
        /// <param name="inputfilepath"></param>
        /// <param name="outputfilepath"></param>
        /// <param name="waterMarkName"></param>
        /// <param name="userPassWord"></param>
        /// <param name="ownerPassWord"></param>
        /// <param name="permission"></param>
        public static void setWatermark(string inputfilepath, string outputfilepath, string waterMarkName, string userPassWord, string ownerPassWord, int permission)
        {
            PdfReader pdfReader = null;
            PdfStamper pdfStamper = null;
            try
            {
                pdfReader = new PdfReader(inputfilepath);
                pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));
                // 设置密码   
                //pdfStamper.SetEncryption(false,userPassWord, ownerPassWord, permission); 

                int total = pdfReader.NumberOfPages + 1;
                PdfContentByte content;
                BaseFont font = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                PdfGState gs = new PdfGState();
                gs.FillOpacity = 0.2f;//透明度

                int j = waterMarkName.Length;
                char c;
                int rise = 0;
                for (int i = 1; i < total; i++)
                {
                    rise = 500;
                    content = pdfStamper.GetOverContent(i);//在内容上方加水印
                    //content = pdfStamper.GetUnderContent(i);//在内容下方加水印
                    
                    content.BeginText();
                    content.SetColorFill(BaseColor.DARK_GRAY);
                    content.SetFontAndSize(font, 50);
                    // 设置水印文字字体倾斜 开始 
                    if (j >= 15)
                    {
                        content.SetTextMatrix(200, 120);
                        for (int k = 0; k < j; k++)
                        {
                            content.SetTextRise(rise);
                            c = waterMarkName[k];
                            content.ShowText(c + "");
                            rise -= 20;
                        }
                    }
                    else
                    {
                        content.SetTextMatrix(180, 100);
                        for (int k = 0; k < j; k++)
                        {
                            content.SetTextRise(rise);
                            c = waterMarkName[k];
                            content.ShowText(c + "");
                            rise -= 18;
                        }
                    }
                    // 字体设置结束 
                    content.EndText();
                    // 画一个圆 
                    //content.Ellipse(250, 450, 350, 550);
                    //content.SetLineWidth(1f);
                    //content.Stroke(); 
                } 

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {

                if (pdfStamper != null)
                    pdfStamper.Close();

                if (pdfReader != null)
                    pdfReader.Close();
            }
        }

    }
}
复制代码

调用的例子:

复制代码
                string path = "E://3.pdf";
                HtmlToPDFUtil.HtmlToPdf(Request.Url.AbsoluteUri, path);
                //HtmlToPDFUtil.HtmlToPdf(sbUrlList.ToString(), path);
                PDFSetWaterMark.PDFWatermark(path, "E://3-1.pdf", Server.MapPath("/HtmlToPdf/Tools/sy.bmp"), 0, 0);
                PDFSetWaterMark.setWatermark("E://3-1.pdf", "E://3-2.pdf", "NAIS");
                //PDFSetWaterMark.setWatermark("E://3-2.pdf", "E://3-3.pdf", "NAIS", "", "", 1);
复制代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: itextsharp 是一种用于创建和处理 PDF 文件的开源库。它是基于 iText 库的一个变种,专门用于 .NET 平台开发。iTextSharp 中文教程是一本介绍如何使用 iTextSharp 库的教程,主要以中文语言编写。 该教程首先会介绍 iTextSharp 库的基本概念和原理,然后逐步教读者如何使用 iTextSharp 来创建、编辑和操作 PDF 文件。教程会涵盖 iTextSharp 库的各个功能模块,包括文本处理、图像插入、表格生成、页面布局、字体样式等。 教程的内容会结合实际的案例来讲解 iTextSharp 库的使用方法。读者可以跟随教程中的示例代码一步步实践,从而加深对 iTextSharp 的理解,并能够熟练地应用到自己的项目中。 作为一本中文教程,它特别适合那些以中文为母语或更习惯使用中文进行学习和开发的开发人员。通过这本教程,中文用户可以更轻松地学习和掌握 iTextSharp 库的使用技巧,提高 PDF 文件的生成和处理能力。 总之,iTextSharp 中文教程是一本详尽介绍如何使用 iTextSharp 库的中文教程,能够帮助读者深入了解和运用 iTextSharp 的功能来创建和处理 PDF 文件。对于想要在 .NET 平台使用 iTextSharp 实现 PDF 相关功能的开发人员来说,这本教程将是一本非常有用的参考资料。 ### 回答2: itextsharp中文教程.pdf是一本关于使用iTextSharp库的中文教程的PDF文档。iTextSharp是一个功能强大的开源库,用于处理PDF文件的创建、修改和提取操作。它提供了丰富的功能和易于使用的接口,使得使用C#编写PDF处理代码变得简单和高效。 这本教程将帮助读者了解如何使用iTextSharp库来创建、编辑和处理PDF文件。教程的内容包括基本概念、API的使用方法和常见的应用场景。读者将学习如何创建新的PDF文档、添加文本、图片和表格等元素,以及如何进行格式化和样式设置。教程还介绍了如何进行页面操作,例如添加页面、合并页面和分割页面等。 此外,教程还介绍了如何进行PDF文档的加密和签名,以保护文档的安全性。读者将学习如何添加密码保护、权限限制以及数字签名等功能,确保PDF文档的完整性和机密性。 iTextSharp库在各个领域都有广泛的应用,尤其在生成报表、合并PDF、转换HTML到PDF等方面非常受欢迎。无论是初学者还是有一定经验的开发者,这本教程都能帮助他们理解和掌握iTextSharp的使用。 总而言之,itextsharp中文教程.pdf是一本详细介绍iTextSharp库的中文教程,内容涵盖了从基本操作到高级功能的应用。它是学习如何使用iTextSharp的绝佳资源,对于对PDF文档处理感兴趣的读者来说是一本难得的指南。 ### 回答3: iTextSharp是一个开源的用于创建和处理PDF文件的C#库。它是iText库的一个分支,特别适用于在.NET平台上开发PDF文档的应用程序。 iTextSharp中文教程.pdf是一本介绍iTextSharp库的中文教程的PDF文件。这本教程可以帮助初学者了解和学习使用iTextSharp库创建PDF文档的基本知识和技巧。 这本教程涵盖了iTextSharp库的所有主要功能和用法,包括PDF页面的创建、内容的添加和格式化、字体和颜色的设置、表格和列表的创建、图像和水印添加、页面导航和书签的设置等等。 此外,教程还介绍了如何使用iTextSharp库进行PDF文档的合并、拆分、加密和解密等高级操作。它还包括一些示例代码和实际应用案例,以帮助读者更好地理解和应用所学的知识。 通过学习iTextSharp中文教程.pdf,读者可以掌握使用iTextSharp库创建和处理PDF文档的技能,并能够在自己的应用程序中应用这些技能,实现各种有关PDF文档的需求,例如生成报告、生成电子表格、创建可打印的文档等。 总之,iTextSharp中文教程.pdf是一本帮助读者学习使用iTextSharp库创建和处理PDF文档的实用教程,它对于对PDF文档处理感兴趣的开发人员和学生来说是一本非常有价值的参考书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值