• 使用itextsharp.dll组件实现导出PDF及添加水印功能
  • 发布于 2个月前
  • 727 热度
    0 评论
  • APAC
  • 18 粉丝 33 篇博客
  •   

前言:

iTextSharp 是一个用于 .NET 平台的文本处理库,它提供了一系列功能强大的 API,可以用来创建、读取、编辑和操作 PDF 文件。iTextSharp 库基于 iText 库开发,是 iText 在 .NET 平台上的实现。iTextSharp 库可以帮助开发人员快速创建 PDF 文件,其中包含了丰富的文本、图像、表格、超链接等内容。它还支持数字签名、加密、水印等高级功能,可以满足不同应用场景的需求。今天我们就用一段实例来展示使用iTextSharp生成PDF及添加水印的功能。


首先需要准备动态库itextsharp.dll,这个可以直接在nuget包管理工具搜索itextsharp进行安装就可以了,C#对PDF的操作都是基于这个类库来实现的。

话不多说,直接上代码。


1.导出PDF功能代码


/// <summary>
/// 堆代码 duidaima.com
/// 导出PDF
/// </summary>
/// <param name="FilePath">图片的路劲</param>
/// <param name="FileName">图片的名称</param>
private bool PrintToPdf(string FilePath,string FileName )
{          
 
    iTextSharp.text.Rectangle rec = new iTextSharp.text.Rectangle(0, 0, iTextSharp.text.PageSize.A4.Width, iTextSharp.text.PageSize.A4.Height);
    iTextSharp.text.Image image;
    iTextSharp.text.Document document = null;
    FileStream fs = null;
    PdfWriter writer = null;
    try
    {
        //生成PDF
        document = new iTextSharp.text.Document(rec);
        fs = new FileStream(FilePath + FileName + ".pdf", FileMode.Create);
 
        PdfWriter.GetInstance(document, fs);
        document.Open();
        image = iTextSharp.text.Image.GetInstance(FilePath + FileName + ".jpg");
        //调整图片大小,使之适合A4
        if (image.Height > rec.Height)
        {
            image.ScaleToFit(rec.Width, rec.Height);
        }
        else if (image.Width > rec.Width)
        {
            image.ScaleToFit(rec.Width, rec.Height);
        }
 
        //调整图片位置,使之居中
        image.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE;
        document.NewPage();
        document.Add(image);
    }
    catch (Exception ex)
    {
        return false;
    }
    finally
    {
        if (document.IsOpen())
        {
            document.Close();
        }
        fs.Close();
 
        //最后删除生成的图片
        File.Delete(FilePath + FileName + ".jpg");
    }
 
    try
    {
        //添加水印图片,水印图片采取的是先生成图片,再添加到PDF文件中
        document = new iTextSharp.text.Document(rec);
        fs = new FileStream(FilePath + FileName + ".pdf", FileMode.Open);
        writer = PdfWriter.GetInstance(document, fs);
        iTextSharp.text.Image imgWater = CreateWaterImage();
        PdfReader reader = new PdfReader(fs);
        document.Open();
        PdfContentByte cb = writer.DirectContent;
        PdfImportedPage newPage;
        int iPageNum = reader.NumberOfPages;
        for (int j = 1; j <= iPageNum; j++)
        {
            document.NewPage();
            newPage = writer.GetImportedPage(reader, j);
 
            //pdf旋转
            if (newPage.Width > newPage.Height)
            {
                cb.AddTemplate(newPage, 0, -1f, 1f, 0, 0, newPage.Width);
            }
            else
            {
                cb.AddTemplate(newPage, 0, 0);
            }
            cb.AddImage(imgWater);
        }
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
    finally
    {
        if (document.IsOpen())
        {
            document.Close();
        }
        writer.Close();
        fs.Close();
    }
}
2.生成水印图片功能代码


/// <summary>
/// 生成水印图片
/// </summary>
/// <returns></returns>
private iTextSharp.text.Image CreateWaterImage()
{
    string WaterText = "水印文本";
    Bitmap bitmap = new Bitmap(595, 842);
    using (Graphics g = Graphics.FromImage(bitmap))
    {
        //重置图像
        g.ResetTransform();
        //设置旋转中心
        g.TranslateTransform(bitmap.Width / 2, bitmap.Height / 2);
        //旋转50度 顺时针
        g.RotateTransform(-50);
        //指定文本呈现的质量 解决文字锯齿问题
        g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
        System.Drawing.Font font = new System.Drawing.Font("微软雅黑", 14);
        SolidBrush solidBrush = new SolidBrush(Color.FromArgb(100, 0, 0, 0));
 
        //设置文字、字体、大小、颜色、起始位置
        g.DrawString(WaterText, font, solidBrush, new Point(-240, -100));
 
        g.DrawString(WaterText, font, solidBrush, new Point(-340, 100));
    }
     
    //把水印图片保存在系统指定位置
    bitmap.Save("C:\\WaterTemp.jpg");
 
    iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance("C:\\WaterTemp.jpg");
    //透明度,灰色填充
    image.GrayFill = 20;
    image.SetAbsolutePosition(0, 0);
 
    return image;
}

用户评论