2017-08-08 155 views
1

我想从html生成pdf并在其中签名块。 html可以是任何格式,但它有时可能是1页,有时可能是50页。签名将是页面上唯一的输入。一个html的例子可能是。ItextSharp html带签名的pdf

<div> 
    <input type="text" /> 
</div> 

有没有人有任何想法如何做到这一点?我目前使用ItextSharp来生成pdf。

+0

Wh在你的意思是*“签名块”*?数字签名的签名表单字段?或者其他一些电子签名? – mkl

+0

是的,签名表单域 – Nate

回答

1

技术的组合将产生你想要的结果。

  1. 使用pdfHTML(iText7附加),其将HTML(HTML5 + CSS3),以PDF
  2. 您可以添加自定义标记和处理这些标记。你可以做一个注入formfield签名
  3. 使用iText的以数字化的数字签名的

短例如签署PDF文档:

public void sign(String src, String dest, 
      Certificate[] chain, 
      PrivateKey pk, String digestAlgorithm, String provider, 
      PdfSigner.CryptoStandard subfilter, 
      String reason, String location) 
    throws GeneralSecurityException, IOException { 
// Creating the reader and the signer 
PdfReader reader = new PdfReader(src); 
PdfSigner signer = new PdfSigner(reader, new FileOutputStream(dest), false); 
// Creating the appearance 
PdfSignatureAppearance appearance = signer.getSignatureAppearance() 
     .setReason(reason) 
     .setLocation(location) 
     .setReuseAppearance(false); 
Rectangle rect = new Rectangle(36, 648, 200, 100); 
appearance 
     .setPageRect(rect) 
     .setPageNumber(1); 
signer.setFieldName("sig"); 
// Creating the signature 
IExternalSignature pks = new PrivateKeySignature(pk, digestAlgorithm, provider); 
IExternalDigest digest = new BouncyCastleDigest(); 
signer.signDetached(digest, pks, chain, null, null, null, 0, subfilter); 
} 

pdfHTML短的例子:

public void createPdf(String src, String dest, String resources) throws IOException { 
    try { 
     FileOutputStream outputStream = new FileOutputStream(dest); 

     WriterProperties writerProperties = new WriterProperties(); 
     //Add metadata 
     writerProperties.addXmpMetadata(); 

     PdfWriter pdfWriter = new PdfWriter(outputStream, writerProperties); 

     PdfDocument pdfDoc = new PdfDocument(pdfWriter); 
     pdfDoc.getCatalog().setLang(new PdfString("en-US")); 
     //Set the document to be tagged 
     pdfDoc.setTagged(); 
     pdfDoc.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true)); 

     //Set meta tags 
     PdfDocumentInfo pdfMetaData = pdfDoc.getDocumentInfo(); 
     pdfMetaData.setAuthor("Samuel Huylebroeck"); 
     pdfMetaData.addCreationDate(); 
     pdfMetaData.getProducer(); 
     pdfMetaData.setCreator("iText Software"); 
     pdfMetaData.setKeywords("example, accessibility"); 
     pdfMetaData.setSubject("PDF accessibility"); 
     //Title is derived from html 

     // pdf conversion 
     ConverterProperties props = new ConverterProperties(); 
     FontProvider fp = new FontProvider(); 
     fp.addStandardPdfFonts(); 
     fp.addDirectory(resources);//The noto-nashk font file (.ttf extension) is placed in the resources 

     props.setFontProvider(fp); 
     props.setBaseUri(resources); 
     //Setup custom tagworker factory for better tagging of headers 
     DefaultTagWorkerFactory tagWorkerFactory = new AccessibilityTagWorkerFactory(); 
     props.setTagWorkerFactory(tagWorkerFactory); 

     HtmlConverter.convertToPdf(new FileInputStream(src), pdfDoc, props); 
     pdfDoc.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

更多信息请登录http://itextpdf.com/itext7/pdfHTML