• Страница:
  • 1

ТЕМА: Подпись PDF в Java

Подпись PDF в Java 1 год назад #4302

  • vasyapupkin
  • Новый участник
  • Постов: 2
  • Репутация: 0
Написал тестовый код для подписи PDF с визуальным представлением.
Использовался ваш sdk и библиотека для работы с pdf IText 7.1.1
Правильный ли это подход и если да, то оцените более опытным глазом что я мог упустить.

public static void initkey(String doc, String keystore, char storepass[], String keyalias, char aliaspass[])
			throws Exception {
		// char password[] = "qwe".toCharArray();
		Provider provider = new KalkanProvider();
		//BouncyCastleProvider provider = new BouncyCastleProvider();
		Security.addProvider(provider);
		KeyStore ks = KeyStore.getInstance("PKCS12"); 
		ks.load(new FileInputStream(keystore), storepass);
		// String alias = "pupkinvru";
		PrivateKey pk = (PrivateKey) ks.getKey(keyalias, aliaspass); 
		Certificate[] chain = ks.getCertificateChain(keyalias);
		x509 = (X509Certificate) ks.getCertificate(keyalias);
		System.out.println("|" + x509.getIssuerDN() + "|");
		sign(doc, doc + "(signed)", chain, pk, DigestAlgorithms.SHA256, provider.getName(), CryptoStandard.CMS,
				"Утвержденно", "Подписанно");
		
	}

public static void sign(String src, String dest, Certificate[] chain, PrivateKey pk, String digestAlgorithm,
			String provider, CryptoStandard subfilter, String reason, String location) throws Exception {


		System.out.println(src + "|" + dest);
		PdfFont fonttnw = PdfFontFactory.createFont("C://SSR56__C.TTF", "CP1251", true); // Поддержка																						 
                                                                                                 // кириллицы
		ImageData imgdt = ImageDataFactory.create("C://pict.png"); // картиночка
		try {
			PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
			PdfReader reader = new PdfReader(src);
			PdfSigner signer = new PdfSigner(reader, new FileOutputStream(dest), false);
			int pages = pdfDoc.getNumberOfPages();
			pdfDoc.close();
			PdfSignatureAppearance appearance = signer.getSignatureAppearance().setReason(reason).setLocation(location)
					.setReuseAppearance(false);
			appearance.setRenderingMode(PdfSignatureAppearance.RenderingMode.DESCRIPTION);
			// appearance.setSignatureGraphic(imgdt); изображение рядом
			appearance.setImage(imgdt); // изображение фоном
			appearance.setLayer2Text(x509.getIssuerDN() + "\n" + "Дата подписания: " + signer.getSignDate().getTime()
					+ "\n" + "Основание: Утверждено");
			appearance.setLayer2Font(fonttnw);
			Rectangle rect = new Rectangle(2, 2, 150, 150);
			appearance.setPageRect(rect).setPageNumber(pages);
			signer.setFieldName("sig");			
			IExternalSignature pks = new PrivateKeySignature(pk, digestAlgorithm, provider);		 
			IExternalDigest digest = new ProviderDigest(provider);			
			//IExternalDigest digest = new BouncyCastleDigest();	
			signer.signDetached(digest, pks, chain, null, null, null, 0, subfilter);			
			reader.close();
			File forig = new File(src);
			File fsig = new File(dest);
			forig.delete();
			fsig.renameTo(forig);
		} catch (IOException e) {
			throw new IOException(e);
		}

	}

Re: Подпись PDF в Java 1 год назад #4391

  • vasyapupkin
  • Новый участник
  • Постов: 2
  • Репутация: 0
up
  • Страница:
  • 1
FaLang translation system by Faboba