หลังจากเข้าไปอ่านเอกสารของ iTextSharp ก็พบว่ามันสามารถทำได้ครับ โดยตัว pdf เองนั้นเราสามารถทำการกำหนด permission ได้ และ iTextSharp มี class ชื่อ PdfWriter ซึ่งเราสามารถทำการ Set Encryption เพื่อกำหนด permission ของ pdf ได้ ดังนั้นจากโค้ดเดิมที่ทำไว้ ผมก็ไปเพิ่มคำสั่ง setEncryption ก่อนสั่ง document.open ครับ
เนื่องจากโค้ดเดิมผมใช้ PdfCopy object สำหรับสร้างเอกสาร pdf ใหม่ แต่ว่า PdfCopy มันไม่มีคำสั่ง setEncryption ครับ พอลองไป view object browser ดูก็พบว่าตัว PdfCopy นั้นมัน inherit มาจาก PdfWriter อีกที ดังนั้นเราสามารถ Casting ไปเป็น PdfWriter ได้ครับ จากนั้นก็สั่ง SetEncryption เพื่อกำหนด permission ว่าจะให้ print ได้หรือไม่ และก็สั่งซ่อน menu bar และ toolbar เพื่อที่ว่า user จะได้สั่ง save ไม่ได้ครับ
Dim writer As PdfWriter = TryCast(copy, PdfWriter)
'writer.SetEncryption(PdfWriter.STANDARD_ENCRYPTION_128, Nothing, Nothing, PdfWriter.ALLOW_SCREENREADERS) '// CANNOT PRINT
writer.SetEncryption(PdfWriter.STANDARD_ENCRYPTION_128, Nothing, Nothing, PdfWriter.ALLOW_PRINTING) '// CAN PRINT
writer.ViewerPreferences = PdfWriter.HideMenubar + PdfWriter.HideToolbar + PdfWriter.HideWindowUI
document.Open()
For i As Integer = 1 To reader.NumberOfPages
Dim ipage As Integer = i
If intIgnorePages Is Nothing OrElse intIgnorePages.Find(Function(c) c = ipage) = 0 Then
copy.AddPage(copy.GetImportedPage(reader, ipage))
End If
Next
document.Close()
reader.Close()
copy.Close()
fs.Close()
fs.Dispose()
เรียบร้อยครับ แหมมันช่างเยี่ยมยอดจริงๆ
1 ความคิดเห็น:
บทความเป็นประโยชน์มากเลยค่ะ แต่ตอนนี้งงกับคำสั่ง เพราะปกติใช้ C# เลยไม่รู้ว่า
Public intIgnorePages As List(Of Integer) จะกำหนดยังไง และ trycast จะกำหนดยังไงค่ะ
แสดงความคิดเห็น