Spire.PDF is a professional PDF library applied to creating, writing, editing, handling and reading PDF files without any external dependencies. Get free and professional technical support for Spire.PDF for .NET, Java, Android, C++, Python.

Wed Feb 09, 2022 9:24 am

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

chauhan.pradip
 
Posts: 1
Joined: Tue Feb 01, 2022 5:30 am

Wed Feb 09, 2022 10:01 am

Hello,

Thanks for your inquiry!

You want to make the signature on each page of PDF file verified, right? Sorry that our Spire.PDF for java does not support this feature now. We have added it as a new feature with the ticket SPIREPDF-4936 in our upgrade list. If there is any progress, we will keep you informed. Sorry for the inconvenience caused.

Sincerely,
Marcia
E-iceblue support team
User avatar

Marcia.Zhou
 
Posts: 858
Joined: Wed Nov 04, 2020 2:29 am

Fri Jun 17, 2022 10:29 am

Hello,

Greetings from E- iceblue.
Glad to inform that we just released Spire.PDF for Java 8.6.8, which has support for signing pdf files with multiple pages. Please refer to the code below to have a test.
Code: Select all
String inputFile = "input.pdf";
String outputFile = "result.pdf";
String inputfile_img = "sign.png";
String inputFile_Pfx = "gary.pfx";
//load pdf
PdfDocument doc = new PdfDocument();
doc.loadFromFile(inputFile);
//load pfx file
PdfCertificate x509 = new PdfCertificate(inputFile_Pfx, "e-iceblue");
PdfOrdinarySignatureMaker signatureMaker = new PdfOrdinarySignatureMaker(doc, x509);
PdfSignature signature = signatureMaker.getSignature();
PdfSignatureAppearance appearance = new PdfSignatureAppearance(signature);
//set ImageAndSignDetail mode
appearance.setGraphicMode(GraphicMode.SignImageAndSignDetail);
//set signature content
appearance.setNameLabel("SSSSSSSSSS:");
signature.setName("Peekaboo");
appearance.setContactInfoLabel("Phone:");
signature.setContactInfo("028-81705109");
appearance.setDateLabel("Date: ");
appearance.setLocationLabel("Address: ");
signature.setLocation("ChengDu");
appearance.setReasonLabel("Cause");
signature.setReason("I am owner of ducument");
appearance.setSignImageLayout(SignImageLayout.Stretch);
appearance.setSignatureImage(PdfImage.fromFile(inputfile_img));
//define signature size and position and add it in PDF
for (int i = 0; i < doc.getPages().getCount(); i++) {
     signatureMaker.makeSignature("Peekaboo_"+ (i + 1), doc.getPages().get(i), (float) doc.getPages().get(i).getActualSize().getWidth() -340, (float) doc.getPages().get(0).getActualSize().getHeight() - 150,270,100, appearance);
}
//save document
doc.saveToFile(outputFile);
doc.close();


Sincerely,
William
E-iceblue support team
User avatar

William.Zhang
 
Posts: 757
Joined: Mon Dec 27, 2021 2:23 am

Return to Spire.PDF