protected List<String> getSignatureNames(Blob blob) throws IOException { PdfReader reader = new PdfReader(blob.getStream()); try { @SuppressWarnings("unchecked") List<String> names = reader.getAcroFields().getSignatureNames(); return names; } finally { reader.close(); } }
/** extracts XML from PDF */ protected byte[] getXMLFromPDF(PdfReader reader) throws Exception { XfaForm xfaForm = reader.getAcroFields().getXfa(); Node domDocument = xfaForm.getDomDocument(); if (domDocument == null) return null; Element documentElement = ((Document) domDocument).getDocumentElement(); Element datasetsElement = (Element) documentElement.getElementsByTagNameNS(XFA_NS, "datasets").item(0); Element dataElement = (Element) datasetsElement.getElementsByTagNameNS(XFA_NS, "data").item(0); Element xmlElement = (Element) dataElement.getChildNodes().item(0); Node budgetElement = getBudgetElement(xmlElement); byte[] serializedXML = XfaForm.serializeDoc(budgetElement); return serializedXML; }
// TODO concluir e validar a verifica��o de PDFs public String verify(final IVFile pdf) { // Certificados adicionados localmente KeyStore kall = PdfPKCS7.loadCacertsKeyStore(); StringBuffer sb = new StringBuffer(); final String nl = System.getProperty("line.separator"); // $NON-NLS-1$ InputStream fin = null; try { boolean second = false; PdfReader reader = new PdfReader(fin = pdf.getInputStream()); AcroFields af = reader.getAcroFields(); ArrayList<?> names = af.getSignatureNames(); if (names.isEmpty()) return Messages.getString("PDFSignatureImpl.9"); // $NON-NLS-1$ for (Iterator<?> iter = names.iterator(); iter.hasNext(); ) { if (second) { sb.append(nl).append(" ====== ").append(nl).append(nl); // $NON-NLS-1$ } String name = (String) iter.next(); sb.append(Messages.getString("PDFSignatureImpl.11")).append(name).append(nl); // $NON-NLS-1$ sb.append(Messages.getString("PDFSignatureImpl.12")) .append( af.signatureCoversWholeDocument(name) ? Messages.getString("PDFSignatureImpl.13") : Messages.getString("PDFSignatureImpl.14")) .append(nl); // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ sb.append(Messages.getString("PDFSignatureImpl.15")) .append(af.getRevision(name)) .append(Messages.getString("PDFSignatureImpl.16")) .append(af.getTotalRevisions()) .append(nl); // $NON-NLS-1$ //$NON-NLS-2$ PdfPKCS7 pk = af.verifySignature(name); Calendar cal = pk.getSignDate(); Certificate pkc[] = pk.getCertificates(); sb.append(Messages.getString("PDFSignatureImpl.17")) .append(PdfPKCS7.getSubjectFields(pk.getSigningCertificate())) .append(nl); // $NON-NLS-1$ sb.append(Messages.getString("PDFSignatureImpl.18")) .append( !pk.verify() ? Messages.getString("PDFSignatureImpl.19") : Messages.getString("PDFSignatureImpl.20")) .append(nl); // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ Object fails[] = PdfPKCS7.verifyCertificates(pkc, kall, null, cal); if (fails == null) sb.append(Messages.getString("PDFSignatureImpl.21")).append(nl); // $NON-NLS-1$ else sb.append(Messages.getString("PDFSignatureImpl.22")) .append(nl); // : " + fails[1]); //$NON-NLS-1$ } } catch (Exception e) { log.error("error verifying file", e); // $NON-NLS-1$ return Messages.getString("PDFSignatureImpl.24"); // $NON-NLS-1$ } finally { try { if (fin != null) { fin.close(); } } catch (IOException e) { } } return sb.toString(); }