Search code examples
c#asp.netpdfencryptionpasswords

Protect pdf file with password C#


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);

I created a pdf file directly from the database. I need to protect the pdf file with the password.

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();
        }
    }
}

I managed to protect the pdf file with password with the code above, but it only works with the pdf file which is generate from a gridview. Can someone show me how to protect the pdf file with password which generated with first method by something similar to my second code?


Solution

  • Set the user password in SecuritySettings

    pdf.SecuritySettings.UserPassword = "your password";