2017-08-08 3 views
1

Ich möchte eine pdf von HTML generieren und Unterschrift Blöcke darin haben. Das HTML kann in jedem Format sein, aber manchmal wird es 1 Seite sein und manchmal 50 Seiten. Die Signaturen werden die einzigen Eingaben auf der Seite sein. Ein Beispiel für das HTML könnte sein.ItextSharp html zu pdf mit Unterschrift

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

Hat jemand eine Idee, wie man das macht? Ich verwende derzeit ItextSharp, um das PDF zu generieren.

+0

Wh bei genau meinen Sie mit * "Signaturblöcken" *? Signatur-Formularfelder für digitale Signaturen? Oder eine andere elektronische Signatur? – mkl

+0

Ja, Signaturformularfelder – Nate

Antwort

1

Eine Kombination von Techniken ergibt das gewünschte Ergebnis.

  1. Verwendung pdfHTML (iText7 Add-on), die konvertiert HTML (HTML5 + CSS3) PDF
  2. Sie benutzerdefinierte Tags und Handler für diese Tags hinzufügen können. Sie könnten machen, die eine Signatur injiziert Formfield
  3. Verwendung iText digital das PDF-Dokument zu unterzeichnen

kurzes Beispiel der digitalen Signatur:

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

Kurz Beispiel 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(); 
    } 
} 

Weitere Informationen unter http://itextpdf.com/itext7/pdfHTML