Platforms to show: All Mac Windows Linux Cross-Platform
/DynaPDF/Create PDF with Custom Signature
Required plugins for this example: MBS DynaPDF Plugin, MBS Encryption Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /DynaPDF/Create PDF with Custom Signature
This example is the version from Wed, 14th Sep 2021.
Project "Create PDF with Custom Signature.xojo_binary_project"
FileTypes
Filetype text
End FileTypes
MenuBar MenuBar1
MenuItem UntitledMenu1 = ""
MenuItem FileMenu = "&File"
MenuItem FileQuit = "Quit"
MenuItem UntitledMenu5 = ""
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem UntitledMenu0 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "Clear"
MenuItem UntitledMenu4 = ""
MenuItem UntitledMenu3 = ""
MenuItem UntitledMenu2 = ""
End MenuBar
Class App Inherits Application
Const Message = "This file was digitally signed."
EventHandler Sub Open()
dim pdf as new MyDynapdfMBS
dim d as new date
pdf.SetLicenseKey "Lite" // For this example you can use a Starter, Lite, Pro or Enterprise License
call pdf.CreateNewPDF nil // The output file is opened later
call pdf.SetDocInfo pdf.kdiTitle, "Custom digital signature"
// We want to use top-down coordinates
call pdf.Append
Call pdf.SetFont "Arial", pdf.kfsNone, 12.0, True, pdf.kcpUnicode
Call pdf.WriteFText pdf.ktaJustify, Message
//* ------------------------------------------------------------------------ */
call pdf.EndPage
// No fatal error occurred?
if pdf.HaveOpenDoc then
dim f as FolderItem = SpecialFolder.Desktop.Child("Create PDF with Custom Signature.pdf")
if pdf.OpenOutputFile(f) then
// Now we can sign the PDF file
// In this example we load a PFX certificate file
const password = "123456"
// read from file
dim filePath as FolderItem = SpecialFolder.Desktop.Child("test.pfx")
dim b as BinaryStream = BinaryStream.Open(filePath)
dim certificateData as string = b.Read(b.Length)
// load PKCS12 file to get private key
dim cert as X509MBS
dim certs() as X509MBS
dim pkey as PKeyMBS
if X509MBS.ReadFromPkcs12(certificateData, password, pkey, cert, certs) then
// get private key as text
dim PrivateKey as string = pkey.PrivateKeyData
// sign something so we know length
dim DummySignature as string = OpenSSLMBS.PKCS7SignData(cert, pkey, certs, SHA1MBS.Hash("test"), 0)
// sign parameters
dim p as new DynaPDFSigParmsMBS
p.ContactInfo = "Call MBS for help."
p.Reason = "Signed for demo purpose"
p.Signer = "TestApp"
p.HashType = DynaPDFMBS.khtSHA1
p.PKCS7ObjLen = lenb(DummySignature)
// now assemble PDF and leave room for signature
if pdf.CloseAndSignFileExt(p) then
// sign the Hash
dim Signature as string = OpenSSLMBS.PKCS7SignData(cert, pkey, certs, p.Range1, 0)
// add hash to file and launch in PDF reader
if pdf.FinishSignature(Signature) then
f.Launch
end if
end if
else
MsgBox "Failed to read PKCS12 file"
end if
end if
end if
quit
End EventHandler
End Class
Class MyDynaPDFMBS Inherits DynaPDFMBS
EventHandler Function Error(ErrorCode as integer, ErrorMessage as string, ErrorType as integer) As integer
// output all messages on the console:
System.DebugLog str(ErrorCode)+": "+ErrorMessage
// and display dialog:
Dim d as New MessageDialog //declare the MessageDialog object
Dim b as MessageDialogButton //for handling the result
d.icon=MessageDialog.GraphicCaution //display warning icon
d.ActionButton.Caption="Continue"
d.CancelButton.Visible=True //show the Cancel button
// a warning or an error?
if BitAnd(ErrorType, me.kE_WARNING) = me.kE_WARNING then
// if user decided to ignore, we'll ignore
if IgnoreWarnings then Return 0
d.Message="A warning occurred while processing your PDF code."
// we add a third button to display all warnings
d.AlternateActionButton.Caption = "Ignore warnings"
d.AlternateActionButton.Visible = true
else
d.Message="An error occurred while processing your PDF code."
end if
d.Explanation = str(ErrorCode)+": "+ErrorMessage
b=d.ShowModal //display the dialog
Select Case b //determine which button was pressed.
Case d.ActionButton
Return 0 // ignore
Case d.AlternateActionButton
IgnoreWarnings = true
Return 0 // ignore
Case d.CancelButton
Return -1 // stop
End select
End EventHandler
Property IgnoreWarnings As Boolean
End Class
End Project
See also:
- /DynaPDF/Create and print PDF
- /DynaPDF/Create PDF with Arabic and Ligatures
- /DynaPDF/Create PDF with Czech
- /DynaPDF/Create PDF with Layers
- /DynaPDF/Create PDF with Layers Languages
- /DynaPDF/Create PDF with Line
- /DynaPDF/Create PDF with named destination
- /DynaPDF/Create PDF with SetFillColor
- /DynaPDF/Create PDF with text styles
- /DynaPDF/Create PDF with vertical text
The items on this page are in the following plugins: MBS DynaPDF Plugin.
