Skip to content

Commit 4e00255

Browse files
committed
Add some new methods to handle signature's font color. Add a test.
DEVSIX-1850
1 parent 2bf1177 commit 4e00255

File tree

3 files changed

+61
-1
lines changed

3 files changed

+61
-1
lines changed

sign/src/main/java/com/itextpdf/signatures/PdfSignatureAppearance.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ This file is part of the iText (R) project.
4646
import com.itextpdf.forms.PdfAcroForm;
4747
import com.itextpdf.forms.fields.PdfFormField;
4848
import com.itextpdf.io.image.ImageData;
49+
import com.itextpdf.kernel.colors.Color;
4950
import com.itextpdf.kernel.font.PdfFont;
5051
import com.itextpdf.kernel.font.PdfFontFactory;
5152
import com.itextpdf.kernel.geom.Rectangle;
@@ -192,6 +193,11 @@ public class PdfSignatureAppearance {
192193
*/
193194
private float layer2FontSize = 0;
194195

196+
/**
197+
* Font color for the font of Layer 2.
198+
*/
199+
private Color layer2FontColor;
200+
195201
/**
196202
* Indicates the field to be signed if it is already presented in the document
197203
* (signing existing field). Required for {@link #reuseAppearance} option.
@@ -546,6 +552,34 @@ public PdfSignatureAppearance setLayer2FontSize(float fontSize) {
546552
return this;
547553
}
548554

555+
/**
556+
* Gets the n2 and n4 layer font size.
557+
*
558+
* @return the n2 and n4 layer font size
559+
*/
560+
public float getLayer2FontSize() {
561+
return layer2FontSize;
562+
}
563+
564+
/**
565+
* Sets the n2 and n4 layer font color.
566+
*
567+
* @param color font color
568+
*/
569+
public PdfSignatureAppearance setLayer2FontColor(Color color) {
570+
this.layer2FontColor = color;
571+
return this;
572+
}
573+
574+
/**
575+
* Gets the n2 and n4 layer font color.
576+
*
577+
* @return the n2 and n4 layer font color
578+
*/
579+
public Color getLayer2FontColor() {
580+
return layer2FontColor;
581+
}
582+
549583
/**
550584
* Gets the visibility status of the signature.
551585
*
@@ -855,6 +889,7 @@ private void addTextToCanvas(String text, PdfFont font, Rectangle dataRect) {
855889
canvas = new PdfCanvas(n2, document);
856890
Paragraph paragraph = new Paragraph(text).setFont(font).setMargin(0).setMultipliedLeading(0.9f);
857891
Canvas layoutCanvas = new Canvas(canvas, document, dataRect);
892+
paragraph.setFontColor(layer2FontColor);
858893
if (layer2FontSize == 0) {
859894
applyCopyFittingFontSize(paragraph, dataRect, layoutCanvas.getRenderer());
860895
} else {

sign/src/test/java/com/itextpdf/signatures/sign/PdfSignatureAppearanceTest.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,14 @@ This file is part of the iText (R) project.
4444

4545
import com.itextpdf.forms.PdfAcroForm;
4646
import com.itextpdf.io.image.ImageDataFactory;
47+
import com.itextpdf.io.util.MessageFormatUtil;
48+
import com.itextpdf.kernel.colors.ColorConstants;
4749
import com.itextpdf.kernel.geom.Rectangle;
4850
import com.itextpdf.kernel.pdf.PdfDocument;
4951
import com.itextpdf.kernel.pdf.PdfName;
5052
import com.itextpdf.kernel.pdf.PdfReader;
5153
import com.itextpdf.kernel.pdf.PdfStream;
54+
import com.itextpdf.kernel.utils.CompareTool;
5255
import com.itextpdf.signatures.BouncyCastleDigest;
5356
import com.itextpdf.signatures.DigestAlgorithms;
5457
import com.itextpdf.signatures.IExternalSignature;
@@ -75,7 +78,6 @@ This file is part of the iText (R) project.
7578
import java.security.UnrecoverableKeyException;
7679
import java.security.cert.Certificate;
7780
import java.security.cert.CertificateException;
78-
import com.itextpdf.io.util.MessageFormatUtil;
7981

8082
@Category(IntegrationTest.class)
8183
public class PdfSignatureAppearanceTest extends ExtendedITextTest {
@@ -203,5 +205,28 @@ private static void assertAppearanceFontSize(String filename, float expectedFont
203205
Assert.assertTrue(MessageFormatUtil.format("Font size: exptected {0}, found {1}", expectedFontSize, fontSize), Math.abs(foundFontSize - expectedFontSize) < 0.1 * expectedFontSize);
204206
}
205207

208+
@Test
209+
public void fontColorTest01() throws GeneralSecurityException, IOException, InterruptedException {
210+
String fileName = "fontColorTest01.pdf";
211+
String dest = destinationFolder + fileName;
212+
213+
Rectangle rect = new Rectangle(36, 648, 100, 50);
214+
String src = sourceFolder + "simpleDocument.pdf";
215+
216+
PdfSigner signer = new PdfSigner(new PdfReader(src), new FileOutputStream(dest), false);
217+
// Creating the appearance
218+
signer.getSignatureAppearance()
219+
.setLayer2FontColor(ColorConstants.RED)
220+
.setLayer2Text("Verified and signed by me.")
221+
.setPageRect(rect);
222+
223+
signer.setFieldName("Signature1");
224+
// Creating the signature
225+
IExternalSignature pks = new PrivateKeySignature(pk, DigestAlgorithms.SHA256, BouncyCastleProvider.PROVIDER_NAME);
226+
signer.signDetached(new BouncyCastleDigest(), pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CADES);
227+
228+
Assert.assertNull(new CompareTool().compareVisually(dest, sourceFolder + "cmp_" + fileName, destinationFolder,
229+
"diff_"));
230+
}
206231

207232
}

0 commit comments

Comments
 (0)