我在不使数字签名无效的情况下加盖PDF文档时遇到麻烦。
目前,我已成功将PDF标记。但是,如果文档先前已签名,则签名不再有效。我知道为什么会发生这种情况,但是如果我使用Acrobat添加文本或使用注释对其进行标记,则签名有效。
我尝试添加注释或注释,但它仍然使签名无效。有没有一种方法可以在不使数字签名无效的情况下使用iText将图章添加到PDF ?
这是我用来标记的代码片段:
PdfReader reader = new PdfReader(inputstream);
stamp = new PdfStamper(reader, new FileOutputStream(file));
PdfContentByte pcb;
BaseFont bf = BaseFont.createFont("Courier", BaseFont.CP1250,BaseFont.EMBEDDED);
Rectangle r = reader.getPageSizeWithRotation(1);
pcb = stamp.getOverContent(1);
// set the font and size
float size = 12;
pcb.setFontAndSize(bf, size);
float width = 90;
float centerX = 0, startY = 0;
centerX = r.getWidth() - (width / 2) - 20;
startY = r.getHeight() - (15 * 2) - 145;
pcb.beginText();
pcb.showTextAligned(PdfContentByte.ALIGN_CENTER, stampText, centerX, startY, …Run Code Online (Sandbox Code Playgroud) 我对标记为符合 PDF/A - 3A 的 PDF 文档进行数字签名时遇到问题。使用 PDFBox(最新版本,2.0.24)我最终在 Adobe Acrobat 中得到一个无效签名,而使用 iText7(最新版本)我得到一个有效签名。目标是获得符合 PAdES LTV 的签名。
我的流程如下(同时使用 PDFBox 和 iText7):
对于 PDFBox,签名代码在这里,OCSP/CRL 嵌入代码在这里。对于 iText7,签名和 OCSP/CRL 嵌入的代码在这里。
现在,这适用于大多数 PDF 文件,包括多签名文档。问题在于一个特定的 PDF,它被创建为 PDF/A 兼容,级别 3A。
使用 PDFBox,如果我只是嵌入签名并在 Adobe Acrobet 中打开文档,则签名是有效的。如果我还嵌入了 OCSP/CRL 内容,则签名不再有效。Adobe Acrobat …
我有一个pdf文件,其中包含一些我希望从java填写的表单字段.现在我正试图填写一个我正在寻找的形式.我的代码看起来像这样:
File file = new File("c:/Testy/luxmed/Skierowanie3.pdf");
PDDocument document = PDDocument.load(file);
PDDocumentCatalog doc = document.getDocumentCatalog();
PDAcroForm Form = doc.getAcroForm();
String formName = "topmostSubform[0].Page1[0].pana_pania[0]";
PDField f = Form.getField(formName);
setField(document, formName, "Artur");
System.out.println("New value 2nd: " + f.getValueAsString());
document.saveIncremental(new FileOutputStream("c:/Testy/luxmed/nowy_pd3.pdf"));
document.close();
Run Code Online (Sandbox Code Playgroud)
还有这个:
public static void setField(PDDocument pdfDocument, String name, String Value) throws IOException
{
PDDocumentCatalog docCatalog = pdfDocument.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDField field = acroForm.getField(name);
if (field instanceof PDCheckBox){
field.setValue("Yes");
}
else if (field instanceof PDTextField){
System.out.println("Original value: " + field.getValueAsString());
field.setValue(Value); …Run Code Online (Sandbox Code Playgroud)