/*
* Click nbfs://nbhost/SystemFileSystem/Template ... efault.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Template ... Class.java to edit this template
*/
package spire;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfBlendMode;
import com.spire.pdf.graphics.PdfBrush;
import com.spire.pdf.graphics.PdfFont;
import com.spire.pdf.graphics.PdfFontFamily;
import com.spire.pdf.graphics.PdfFontStyle;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfRGBColor;
import com.spire.pdf.graphics.PdfSolidBrush;
import com.spire.pdf.graphics.PdfStringFormat;
import com.spire.pdf.graphics.PdfTextAlignment;
import com.spire.pdf.graphics.PdfTrueTypeFont;
import com.spire.pdf.security.GraphicMode;
import com.spire.pdf.security.PdfCertificate;
import com.spire.pdf.security.PdfCertificationFlags;
import com.spire.pdf.security.PdfSignature;
import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
public class AddDigitalSignature {
public static void main(String[] args) {
String sourcePath = "C:\\Users\\Lubi\\Downloads\\input\\";
String inputFile = "test.pdf";
String outputFile = "test_signed.pdf";
String dateTime = "10-03-2022";
String certPath = "C:\\Users\\Lubi\\Downloads\\input\\signature.pfx";
String certPass = "1234567890";
String imgSource = "C:\\Users\\Lubi\\Downloads\\input\\signvery.png";
//Load a pdf document
PdfDocument doc = new PdfDocument();
doc.loadFromFile(sourcePath+inputFile);
//Load the certificate
PdfCertificate cert = new PdfCertificate(certPath, certPass);
int num = doc.getPages().getCount();
int i;
for (i=0; i<num; i++)
{
//Create a PdfSignature object and specify its position and size
//PdfSignature signature = new PdfSignature(doc, doc.getPages().get(i), cert, "MySignature"+i);
PdfSignature signature = new PdfSignature(doc, doc.getPages().get(i), cert, "MySignature"+i);
Rectangle2D rect = new Rectangle2D.Float();
rect.setFrame(new Point2D.Float(380, 770), new Dimension(200, 40));
signature.setBounds(rect);
//Set the graphics mode
signature.setGraphicMode(GraphicMode.Sign_Detail);
//Set the signature content
signature.setNameLabel("Digitally Signed By:");
signature.setName("Pradip Chauhan");
//signature.setContactInfoLabel("ContactInfo:");
//signature.setContactInfo("02881705109");
signature.setDateLabel("");
signature.setDate(new java.util.Date());
//signature.setLocationInfoLabel("Location:");
//signature.setLocationInfo("Chengdu");
//signature.setReasonLabel("Reason: ");
//signature.setReason("The certificate of this document");
//signature.setDistinguishedNameLabel("DN: ");
//signature.setDistinguishedName(signature.getCertificate().get_IssuerName().getName());
signature.setDistinguishedNameLabel("");
signature.setDistinguishedName("");
//signature.setSignImageSource(PdfImage.fromFile(imgSource));
// Load image and set its width and height
PdfImage image = PdfImage.fromFile(imgSource);
double imageWidth = image.getPhysicalDimension().getWidth() / 2;
double imageHeight = image.getPhysicalDimension().getHeight() / 2;
//Add a page
PdfPageBase page = doc.getPages().get(i);
float pageWidth = (float) page.getCanvas().getClientSize().getWidth();
float x = 470;
float y = 770;
//Draw Title and set the font and format
PdfBrush brush = new PdfSolidBrush(new PdfRGBColor(new Color(255,69,0)));
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", Font.BOLD,12));
PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Center);
String text = String.format("");
page.getCanvas().drawString(text, font, brush, pageWidth / 2, y, format);
//Set image transparency
page.getCanvas().setTransparency(0.8f, 0.8f, PdfBlendMode.Normal);
//Add image to the page
page.getCanvas().drawImage(image, x, y, imageWidth, imageHeight);
page.getCanvas().save();
//Set the signature font
signature.setSignDetailsFont(new PdfFont(PdfFontFamily.Helvetica, 10f, PdfFontStyle.Regular));
//Set the document permission
signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);
signature.setCertificated(true);
}
//Save to file
doc.saveToFile(sourcePath+outputFile);
doc.close();
}
}