Я создаю простое приложение для создания PDF, используя ASP.NET. это приложение создаст файл PDF на лету с паролем для защиты этого документа. вот мой код:
Sub createPDFFile()
Dim doc As Document = New Document
PdfWriter.GetInstance(doc, New FileStream(Request.PhysicalApplicationPath + _
"pdf\result.pdf", FileMode.Create))
doc.Open()
doc.Add(New Paragraph("Hello World!! only Testing"))
doc.Close()
SetPDFPassword(Server.MapPath("~/pdf/result.pdf"), "resultwithpassword.pdf", "12345")
Response.Redirect("pdf/1.pdf")
End Sub
и вот мой код для добавления пароля в файл PDF:
Private Sub SetPDFPassword(ByVal FullPathPdfFileName As String, ByVal DownloadPDFFileName As String, ByVal ForOpenPassword As String)
Dim sname As String = FullPathPdfFileName
Dim sname1 As String = New System.IO.FileInfo(FullPathPdfFileName).DirectoryName & "/test.pdf"
Dim reader As New PdfReader(sname)
Dim n As Integer = reader.NumberOfPages
Dim document As New Document(reader.GetPageSizeWithRotation(1))
Dim writer As PdfWriter = PdfWriter.GetInstance(document, New IO.FileStream(sname1, IO.FileMode.Create))
writer.SetEncryption(PdfWriter.STRENGTH128BITS, ForOpenPassword, Nothing, PdfWriter.AllowPrinting)
document.Open()
Dim cb As PdfContentByte = writer.DirectContent
Dim page As PdfImportedPage
Dim rotation As Integer
Dim i As Integer = 0
While i < n
i += 1
document.SetPageSize(reader.GetPageSizeWithRotation(i))
document.NewPage()
page = writer.GetImportedPage(reader, i)
rotation = reader.GetPageRotation(i)
If rotation = 90 OrElse rotation = 270 Then
cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, _
reader.GetPageSizeWithRotation(i).Height)
Else
cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, _
0)
End If
End While
document.Close()
writer.Close()
Dim PDFfile As New IO.FileStream(sname1, IO.FileMode.Open)
Dim FileSize As Long
FileSize = PDFfile.Length
Dim buffer As Byte() = New Byte(CInt(FileSize) - 1) {}
PDFfile.Read(buffer, 0, CInt(FileSize))
PDFfile.Close()
System.IO.File.Delete(sname1)
Response.AddHeader("Content-Disposition", "attachment;filename=" & DownloadPDFFileName)
Response.ContentType = "application/pdf"
Response.BinaryWrite(buffer)
Response.Flush()
Response.Close()
End Sub
этот код работает отлично. он может сгенерировать файл PDF и добавить некоторый пароль для открытия, но файл PDF будет отправлен пользователю. Кто-нибудь знает, как создать PDF-файл с паролем, но этот файл результатов по-прежнему на сервере и может отображаться только из веб-браузера (без отображения запроса на загрузку) ?? заранее спасибо ..: D