private void fillImageParameters( final PDDocument doc, final SignatureImageParameters imgParams, SignatureOptions options) throws IOException { // DSS-747. Using the DPI resolution to convert java size to dot ImageAndResolution ires = ImageUtils.create(imgParams); InputStream is = ires.getInputStream(); try { PDVisibleSignDesigner visibleSig = new PDVisibleSignDesigner(doc, is, imgParams.getPage()); visibleSig.xAxis(imgParams.getxAxis()).yAxis(imgParams.getyAxis()); visibleSig .width(ires.toXPoint(visibleSig.getWidth())) .height(ires.toYPoint(visibleSig.getHeight())); PDVisibleSigProperties signatureProperties = new PDVisibleSigProperties(); signatureProperties .visualSignEnabled(true) .setPdVisibleSignature(visibleSig) .buildSignature(); options.setVisualSignature(signatureProperties); options.setPage(imgParams.getPage()); } finally { IOUtils.closeQuietly(is); } }
private byte[] signDocumentAndReturnDigest( final PAdESSignatureParameters parameters, final byte[] signatureBytes, final File signedFile, final FileOutputStream fileOutputStream, final PDDocument pdDocument, final PDSignature pdSignature, final DigestAlgorithm digestAlgorithm) throws DSSException { SignatureOptions options = new SignatureOptions(); try { final MessageDigest digest = DSSUtils.getMessageDigest(digestAlgorithm); // register signature dictionary and sign interface SignatureInterface signatureInterface = new SignatureInterface() { @Override public byte[] sign(InputStream content) throws SignatureException, IOException { byte[] b = new byte[4096]; int count; while ((count = content.read(b)) > 0) { digest.update(b, 0, count); } return signatureBytes; } }; options.setPreferedSignatureSize(parameters.getSignatureSize()); if (parameters.getImageParameters() != null) { fillImageParameters(pdDocument, parameters.getImageParameters(), options); } pdDocument.addSignature(pdSignature, signatureInterface, options); saveDocumentIncrementally(parameters, signedFile, fileOutputStream, pdDocument); final byte[] digestValue = digest.digest(); if (logger.isDebugEnabled()) { logger.debug("Digest to be signed: " + Hex.encodeHexString(digestValue)); } fileOutputStream.close(); return digestValue; } catch (IOException e) { throw new DSSException(e); } catch (SignatureException e) { throw new DSSException(e); } finally { IOUtils.closeQuietly(options.getVisualSignature()); } }