使用C#为PDF文件设置密码保护

6
connetionString = ConfigurationManager.ConnectionStrings["conString"].ToString();
sql = "select Id,employeeName,employeePosition from Employee";
connection = new SqlConnection(connetionString);
connection.Open();
command = new SqlCommand(sql, connection);
adapter.SelectCommand = command;
adapter.Fill(ds);
connection.Close();

PdfDocument pdf = new PdfDocument();
pdf.Info.Title = "Database to PDF";
PdfPage pdfPage = pdf.AddPage();
XGraphics graph = XGraphics.FromPdfPage(pdfPage);
XFont font = new XFont("Verdana", 20, XFontStyle.Regular);

yPoint = yPoint + 100;

for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
    pubname = ds.Tables[0].Rows[i].ItemArray[0].ToString();
    city = ds.Tables[0].Rows[i].ItemArray[1].ToString();
    state = ds.Tables[0].Rows[i].ItemArray[2].ToString();
    graph.DrawString(pubname, font, XBrushes.Black, new XRect(40, yPoint, pdfPage.Width.Point, pdfPage.Height.Point), XStringFormats.TopLeft);
    graph.DrawString(city, font, XBrushes.Black, new XRect(120, yPoint, pdfPage.Width.Point, pdfPage.Height.Point), XStringFormats.TopLeft);
    graph.DrawString(state, font, XBrushes.Black, new XRect(400, yPoint, pdfPage.Width.Point, pdfPage.Height.Point), XStringFormats.TopLeft);
    yPoint = yPoint + 40;
}

string pdfFilename = "dbtopdf.pdf";
pdf.Save(pdfFilename);

我直接从数据库创建了一个PDF文件。我需要用密码保护这个PDF文件。

using (MemoryStream ObjememoryStream = new MemoryStream())
{
    PdfWriter.GetInstance(pdfDoc, ObjememoryStream);
    pdfDoc.Open();
    htmlworker.Parse(sr);
    pdfDoc.Close();
    byte[] Filebytes = ObjememoryStream.ToArray();
    ObjememoryStream.Close();
    using (MemoryStream inputData = new MemoryStream(Filebytes))
    {
        using (MemoryStream outputData = new MemoryStream())
        {
            string PDFFileword = txtPassword.Text;//you can also generate Dynamic word  
            PdfReader reader = new PdfReader(inputData);
            PdfEncryptor.Encrypt(reader, outputData, true, PDFFileword, PDFFileword, PdfWriter.ALLOW_SCREENREADERS);
            Filebytes = outputData.ToArray();
            File.WriteAllBytes(destPath, Filebytes);
            //Response.ContentType = "application/pdf";
            //Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.pdf");
            //Response.Cache.SetCacheability(HttpCacheability.NoCache);
            //Response.BinaryWrite(Filebytes);
            //Response.End();
            GridView1.AllowPaging = true;
            GridView1.DataBind();
        }
    }
}

我已经使用上面的代码成功地为pdf文件设置了密码,但是它只适用于从网格视图生成的pdf文件。有人能向我展示如何通过类似于我的第二个代码的方法来保护生成的pdf文件吗?


1
你使用的是哪个库? - Hakan Fıstık
2个回答

4

SecuritySettings 中设置用户密码。

pdf.SecuritySettings.UserPassword = "your password";

0
web.config 中,使用 add key 元素添加路径, 我将出生日期设置为PDF密码。您可以使用任何内容替换它。
<add key="Inputfile" value=”Path of pdf file where it is getting saved…”>
        <add key="Outputfile" value=”Path of pdf file where it has to be saved after getting password protected…”>   


        protected void passwordProtect(DateTime DateofBirth)
                {
                    string yourpdf = ConfigurationManager.AppSettings["Inputfile"];
                    string pdfWithPasswordA = ConfigurationManager.AppSettings["Outputfile"];
                    string InputFileA = yourpdf;
                    string OutputFileA = pdfWithPasswordA;

                    using (Stream input = new FileStream(InputFileA, FileMode.Open, FileAccess.Read, FileShare.Read))
                    {
                        using (Stream output = new FileStream(OutputFileA, FileMode.Create, FileAccess.Write, FileShare.None))
                        {
                            PdfReader reader = new PdfReader(input);
                            PdfEncryptor.Encrypt(reader, output, true, DateofBirth.ToString("yyyyMMdd"), "secret", PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY);
                        }
                    } 



            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接