2017-08-08 18 views
1

私はhtmlからpdfを生成し、その中に署名ブロックを持っています。 htmlはどんな形式でも構いませんが、1ページになることもあれば、50ページになることもあります。署名はページ上の唯一の入力になります。 htmlの例が可能です。ItextSharp htmlから署名付きのpdf

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

どのようにすればいいですか?私は現在、PDFを生成するためにItextSharpを使用しています。

+0

Wh正確にあなたは* "署名ブロック" *を意味しますか?デジタル署名用の署名フォームフィールドまたは他の電子署名? – mkl

+0

はい、署名フォームフィールド – Nate

答えて

1

テクニックの組み合わせによって、必要な結果が得られます。

  1. あなたはこれらのタグのためのカスタムタグとハンドラを追加することができますPDF
  2. にHTML(HTML5 + CSS3)に変換し、使用pdfHTML(iText7アドオン)。 pdfHTMLの

    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); 
    } 
    

    ショート例:

    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(); 
        } 
    } 
    
    あなたは
  3. 使用iTextのはデジタルでPDF文書に電子署名の

ショート例に署名する FORMFIELD署名を注入1を作ることができます

詳細情報はhttp://itextpdf.com/itext7/pdfHTML

関連する問題