Pracuję z podpisem przykładu PDF w polu CreateVisableSignature i chciałbym, aby kod zapisał obraz podpisu w polu podpisu o nazwie "ApplicantSignature" na trzeciej stronie.W jaki sposób uzyskać właściwość PDVisibleSigProperties, aby zapisać podpis na 3 stronie w polu podpisu
Czy ktoś może wskazać, dlaczego pisze podpis w lewym górnym rogu pierwszej strony?
Oto kod:
public static void main(String[] args) throws KeyStoreException,
NoSuchAlgorithmException, CertificateException,
FileNotFoundException, IOException, COSVisitorException,
SignatureException {
if (args.length != 4) {
usage();
System.exit(1);
} else {
File ksFile = new File(args[0]);
KeyStore keystore = KeyStore.getInstance("PKCS12", provider);
char[] pin = args[1].toCharArray();
keystore.load(new FileInputStream(ksFile), pin);
File document = new File(args[2]);
CreateVisibleSignature signing = new CreateVisibleSignature(
keystore, pin.clone());
String jpgFile = CreateVisibleSignature.convertPngToJpeg(args[3]);
FileInputStream image = new FileInputStream(jpgFile);
PDVisibleSignDesigner visibleSig = new PDVisibleSignDesigner(
args[2], image, 1);
visibleSig.xAxis(0).yAxis(0).zoom(-75)
.signatureFieldName("ApplicantSignature");
PDVisibleSigProperties signatureProperties = new PDVisibleSigProperties();
signatureProperties.signerName("name").signerLocation("location")
.signatureReason("Security").preferredSize(0).page(3)
.visualSignEnabled(true).setPdVisibleSignature(visibleSig)
.buildSignature();
signing.signPDF(document, signatureProperties);
}
}
Próbowałem również:
PDVisibleSignDesigner visibleSig = new PDVisibleSignDesigner(
args[2], image, 3);
visibleSig.xAxis(0).yAxis(0).zoom(-75)
.signatureFieldName("ApplicantSignature");
PDVisibleSigProperties signatureProperties = new PDVisibleSigProperties();
signatureProperties.signerName("name").signerLocation("location")
.signatureReason("Security").preferredSize(0).page(1)
.visualSignEnabled(true).setPdVisibleSignature(visibleSig)
.buildSignature();
i próbowałem:
PDVisibleSignDesigner visibleSig = new PDVisibleSignDesigner(
args[2], image, 3);
visibleSig.xAxis(0).yAxis(0).zoom(-75)
.signatureFieldName("ApplicantSignature");
PDVisibleSigProperties signatureProperties = new PDVisibleSigProperties();
signatureProperties.signerName("name").signerLocation("location")
.signatureReason("Security").preferredSize(0).page(3)
.visualSignEnabled(true).setPdVisibleSignature(visibleSig)
.buildSignature();
To gdzie chcę podpis, aby przejść na trzecia strona.
Tutaj następuje pierwsza strona.
Czy [to (http://www.ors.od.nih.gov/ser/dpsac/bgchecks/Documents/hhs-745.pdf)](http://www.ors.od.nih.gov /ser/dpsac/bgchecks/Documents/hhs-745.pdf) Twój formularz? Jeśli tak, to ** A ** pole podpisu dla podpisu wnioskodawcy ma nazwę "topmostSubform [0] .Page3 [0] .SignatureField1 [0]", a nie "ApplicantSignature", i ** B ** formularz jest hybrydową formą AcroForm/XFA, która może trochę komplikować. Jeśli jednak nie jest, proszę podać swoją wersję formularza do analizy i odtworzenia problemu. – mkl
@mkl jeśli naprawdę chce podpisać ten dokument, to nie będzie działało z PDFBoxem w ogóle. Ten dokument ma uprawnienia/UR3, których nie obsługujemy. Dokument zostaje podpisany, ale pojawia się komunikat o błędzie, że rozszerzone właściwości zostały utracone. –
@TilmanHausherr Obawiam się, że w kodzie jest więcej złamanych elementów, tworząc widoczny podpis. OP w szczególności używa 'signatureFieldName (" ApplicantSignature ") mając nadzieję, że ustawi to nazwę (wartość ** T **) pola formularza podpisu. W kodzie widzę tylko, że wartość jest używana do ustawienia nazwy (** Nazwa **) w jakimś słowniku sygnatur. Ponadto nie widzę żadnego kodu do używania istniejącego pustego pola formularza podpisu; ale myślę, że dokładnie to, co OP chce zrobić, podpisuje puste pole podpisu, które zakłada, że ma nazwę "ApplicantSignature". – mkl