Skip to content

Commit 57b5d09

Browse files
committed
Improve documetation for SignatureFieldAppearance#getId
DEVSIX-8163
1 parent a1e83ef commit 57b5d09

28 files changed

+73
-62
lines changed

forms/src/main/java/com/itextpdf/forms/form/element/SignatureFieldAppearance.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,17 @@ public class SignatureFieldAppearance extends FormField<SignatureFieldAppearance
6666
/**
6767
* Creates a new {@link SignatureFieldAppearance} instance.
6868
*
69-
* @param id the id.
69+
* @param id signature field name if you use this {@link SignatureFieldAppearance} in pure layout for the new
70+
* interactive signature field creation. ID will be ignored if this {@link SignatureFieldAppearance}
71+
* is used for signing or for existing signature field
7072
*/
7173
public SignatureFieldAppearance(String id) {
72-
// We should support signing of existing fields with dots in name.
74+
// ID is required for the new interactive signature field creation. We can't provide parameterless constructor
75+
// since the user might misuse it for unintended purpose, and we have to generate a unique field name
76+
// that doesn't exist in the document acroform, which we don't have access to at this level.
7377
super(id != null && id.contains(".") ? "" : id);
7478
if (id.contains(".")) {
79+
// We should support signing of existing fields with dots in name.
7580
idWithDots = id;
7681
}
7782
// Draw the borders inside the element by default

pdfua/src/test/java/com/itextpdf/pdfua/PdfUASignerTest.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public void invisibleSignatureWithTU() throws GeneralSecurityException, IOExcept
9494
ByteArrayInputStream inPdf = generateSimplePdfUA1Document();
9595
String outPdf = generateSignature(inPdf, "invisibleSignatureWithTU", (signer) -> {
9696
signer.setSignerProperties(new SignerProperties().setFieldName("Signature12"));
97-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signer.getSignerProperties().getFieldName());
97+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID);
9898
appearance.getAccessibilityProperties().setAlternateDescription("Some alternate description");
9999
signer.getSignerProperties().setSignatureAppearance(appearance);
100100
});
@@ -106,7 +106,7 @@ public void visibleSignatureWithTUButNotAFont() throws GeneralSecurityException,
106106
ByteArrayInputStream inPdf = generateSimplePdfUA1Document();
107107
String outPdf = generateSignature(inPdf, "visibleSignatureWithTUButNotAFont", (signer) -> {
108108
signer.setSignerProperties(new SignerProperties().setFieldName("Signature12"));
109-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signer.getSignerProperties().getFieldName());
109+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID);
110110
appearance.getAccessibilityProperties().setAlternateDescription("Some alternate description");
111111
try {
112112
appearance.setFont(PdfFontFactory.createFont(FONT));
@@ -128,7 +128,7 @@ public void visibleSignatureWithoutTUFont() {
128128
Exception e = Assertions.assertThrows(PdfUAConformanceException.class, () -> {
129129
generateSignature(inPdf, "visibleSignatureWithoutTUFont", (signer) -> {
130130
signer.setSignerProperties(new SignerProperties().setFieldName("Signature12"));
131-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signer.getSignerProperties().getFieldName());
131+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID);
132132
appearance.setContent(new SignedAppearanceText().setLocationLine("Dummy location").setReasonLine("Dummy reason").setSignedBy("Dummy"));
133133

134134
try {
@@ -151,7 +151,7 @@ public void visibleSignatureWithNoFontSelected() {
151151
Exception e = Assertions.assertThrows(PdfUAConformanceException.class, () -> {
152152
generateSignature(inPdf, "visibleSignatureWithNoFontSelected", (signer) -> {
153153
signer.setSignerProperties(new SignerProperties().setFieldName("Signature12"));
154-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signer.getSignerProperties().getFieldName());
154+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID);
155155
appearance.setContent("Some signature content");
156156
signer.getSignerProperties().setPageNumber(1).setPageRect(new Rectangle(36, 648, 200, 100));
157157
appearance.getAccessibilityProperties().setAlternateDescription("Some alternate description");
@@ -167,7 +167,7 @@ public void normalPdfSignerInvisibleSignatureWithTU() throws GeneralSecurityExce
167167
ByteArrayInputStream inPdf = generateSimplePdfUA1Document();
168168
String outPdf = generateSignatureNormal(inPdf, "normalPdfSignerInvisibleSignatureWithTU", (signer) -> {
169169
signer.setSignerProperties(new SignerProperties().setFieldName("Signature12"));
170-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signer.getSignerProperties().getFieldName());
170+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID);
171171
appearance.getAccessibilityProperties().setAlternateDescription("Some alternate description");
172172
signer.getSignerProperties().setSignatureAppearance(appearance);
173173
});
@@ -179,7 +179,7 @@ public void normalPdfSignerInvisibleSignatureWithoutTU() throws GeneralSecurityE
179179
ByteArrayInputStream inPdf = generateSimplePdfUA1Document();
180180
String outPdf = generateSignatureNormal(inPdf, "normalPdfSignerInvisibleSignatureWithoutTU", (signer) -> {
181181
signer.setSignerProperties(new SignerProperties().setFieldName("Signature12"));
182-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signer.getSignerProperties().getFieldName());
182+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID);
183183
signer.getSignerProperties().setSignatureAppearance(appearance);
184184
});
185185
Assertions.assertNull(new VeraPdfValidator().validate(outPdf)); // Android-Conversion-Skip-Line (TODO DEVSIX-7377 introduce pdf\a validation on Android)
@@ -192,7 +192,7 @@ public void normalPdfSignerVisibleSignatureWithoutFont() throws GeneralSecurityE
192192
ByteArrayInputStream inPdf = generateSimplePdfUA1Document();
193193
String outPdf = generateSignatureNormal(inPdf, "normalPdfSignerVisibleSignatureWithoutFont", (signer) -> {
194194
signer.setSignerProperties(new SignerProperties().setFieldName("Signature12"));
195-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signer.getSignerProperties().getFieldName());
195+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID);
196196
appearance.getAccessibilityProperties().setAlternateDescription("Some alternate description");
197197
appearance.setContent(new SignedAppearanceText().setLocationLine("Dummy location").setReasonLine("Dummy reason").setSignedBy("Dummy"));
198198
signer.getSignerProperties()
@@ -210,7 +210,7 @@ public void normalPdfSignerVisibleSignatureWithFont() throws GeneralSecurityExce
210210
PdfFont font = PdfFontFactory.createFont(FONT);
211211
String outPdf = generateSignatureNormal(inPdf, "normalPdfSignerVisibleSignatureWithFont", (signer) -> {
212212
signer.setSignerProperties(new SignerProperties().setFieldName("Signature12"));
213-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signer.getSignerProperties().getFieldName());
213+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID);
214214
appearance.getAccessibilityProperties().setAlternateDescription("Some alternate description");
215215
appearance.setContent(new SignedAppearanceText().setLocationLine("Dummy location").setReasonLine("Dummy reason").setSignedBy("Dummy"));
216216
appearance.setFont(font);
@@ -230,7 +230,7 @@ public void normalPdfSignerVisibleSignatureWithFontEmptyTU() throws GeneralSecur
230230
PdfFont font = PdfFontFactory.createFont(FONT);
231231
String outPdf = generateSignatureNormal(inPdf, "normalPdfSignerVisibleSignatureWithFontEmptyTU", (signer) -> {
232232
signer.setSignerProperties(new SignerProperties().setFieldName("Signature12"));
233-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signer.getSignerProperties().getFieldName());
233+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID);
234234
appearance.getAccessibilityProperties().setAlternateDescription("");
235235
appearance.setContent(new SignedAppearanceText().setLocationLine("Dummy location").setReasonLine("Dummy reason").setSignedBy("Dummy"));
236236
appearance.setFont(font);
@@ -250,7 +250,7 @@ public void pdfSignerVisibleSignatureWithFontEmptyTU() throws IOException {
250250
Assertions.assertThrows(PdfUAConformanceException.class, () -> {
251251
generateSignature(inPdf, "pdfSignerVisibleSignatureWithFontEmptyTU", (signer) -> {
252252
signer.setSignerProperties(new SignerProperties().setFieldName("Signature12"));
253-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signer.getSignerProperties().getFieldName());
253+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID);
254254
appearance.getAccessibilityProperties().setAlternateDescription("");
255255
appearance.setContent(new SignedAppearanceText().setLocationLine("Dummy location").setReasonLine("Dummy reason").setSignedBy("Dummy"));
256256
appearance.setFont(font);

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -995,8 +995,7 @@ protected void preClose(Map<PdfName, Integer> exclusionSizes) throws IOException
995995
*/
996996
protected SignatureFieldAppearance getSignatureAppearance() {
997997
if (this.signerProperties.getSignatureAppearance() == null) {
998-
this.signerProperties.setSignatureAppearance(
999-
new SignatureFieldAppearance(this.signerProperties.getFieldName()));
998+
this.signerProperties.setSignatureAppearance(new SignatureFieldAppearance(SignerProperties.IGNORED_ID));
1000999
setContent();
10011000
} else {
10021001
populateExistingModelElement();

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ This file is part of the iText (R) project.
3535
* Properties to be used in signing operations.
3636
*/
3737
public class SignerProperties {
38+
public static final String IGNORED_ID = "";
3839

3940
private PdfSigFieldLock fieldLock;
4041
private SignatureFieldAppearance appearance;
@@ -78,6 +79,8 @@ public SignerProperties setClaimedSignDate(java.util.Calendar signDate) {
7879

7980
/**
8081
* Sets the signature field layout element to customize the appearance of the signature.
82+
* ID specified for {@link SignatureFieldAppearance} will be ignored and won't override field name, so
83+
* {@link #IGNORED_ID} could be used. To specify signature name use {@link SignerProperties#setFieldName}.
8184
*
8285
* <p>
8386
* Note that if {@link SignedAppearanceText} was set as the content (or part of the content)
@@ -154,6 +157,10 @@ public String getFieldName() {
154157
* Sets the name indicating the field to be signed. The field can already be presented in the
155158
* document but shall not be signed. If the field is not presented in the document, it will be created.
156159
*
160+
* <p>
161+
* Note that ID specified for {@link SignatureFieldAppearance} set by {@link #setSignatureAppearance} will be
162+
* ignored and won't override the field name.
163+
*
157164
* @param fieldName the name indicating the field to be signed
158165
*
159166
* @return this instance to support fluent interface

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ public void setAlternativeName() throws IOException, GeneralSecurityException {
287287
.setPageRect(new Rectangle(100, 100, 10, 10));
288288
signer.setSignerProperties(signerProperties);
289289

290-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signerProperties.getFieldName());
290+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID);
291291
appearance.setContent("Some text");
292292
appearance.getAccessibilityProperties().setAlternateDescription("Alternate description");
293293
signerProperties.setSignatureAppearance(appearance);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ protected void sign(String src, String name, String dest,
184184
.setFieldName(name);
185185

186186
// Creating the appearance
187-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(name)
187+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID)
188188
.setContent(new SignedAppearanceText());
189189
signerProperties
190190
.setReason(reason)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ private void doSign(String keySampleName, String digestAlgo, String signatureAlg
312312
IExternalSignature pks = new PrivateKeySignature(signPrivateKey, digestAlgo, signatureAlgo, BOUNCY_CASTLE_FACTORY.getProviderName(), null);
313313

314314
PdfSigner signer = new PdfSigner(new PdfReader(SOURCE_FILE), os, new StampingProperties());
315-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SIGNATURE_FIELD)
315+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID)
316316
.setContent("Approval test signature.\nCreated by iText.");
317317
SignerProperties signerProperties = new SignerProperties()
318318
.setFieldName(SIGNATURE_FIELD)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ private void signApproval(String signCertFileName, String outFileName,
182182
new StampingProperties());
183183
SignerProperties signerProperties = new SignerProperties().setFieldName("Signature1");
184184
signer.setSignerProperties(signerProperties);
185-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signer.getSignerProperties().getFieldName())
185+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID)
186186
.setContent("Approval test signature.\nCreated by iText.");
187187
signerProperties
188188
.setPageRect(new Rectangle(50, 650, 200, 100))

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public void padesSignatureLevelTTest01()
9595
PrivateKey tsaPrivateKey = PemFileHelper.readFirstKey(tsaCertFileName, password);
9696

9797
PdfSigner signer = new PdfSigner(new PdfReader(srcFileName), FileUtil.getFileOutputStream(outFileName), new StampingProperties());
98-
SignatureFieldAppearance appearance = new SignatureFieldAppearance("Signature1")
98+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID)
9999
.setContent("Approval test signature.\nCreated by iText.");
100100
SignerProperties signerProperties = new SignerProperties()
101101
.setFieldName("Signature1")

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ public void twoStepSigningBaselineLTATest(Boolean useTempFolder, String digestAl
315315
private SignerProperties createSignerProperties() {
316316
SignerProperties signerProperties = new SignerProperties();
317317
signerProperties.setFieldName("Signature1");
318-
SignatureFieldAppearance appearance = new SignatureFieldAppearance(signerProperties.getFieldName())
318+
SignatureFieldAppearance appearance = new SignatureFieldAppearance(SignerProperties.IGNORED_ID)
319319
.setContent("Approval test signature.\nCreated by iText.");
320320
signerProperties.setPageRect(new Rectangle(50, 650, 200, 100))
321321
.setSignatureAppearance(appearance);

0 commit comments

Comments
 (0)