java gerar certificado personalizado Imagem 2 - o modelo da palavra para modificar o conteúdo de conteúdo personalizado

A próxima geração de dados personalizados para completar o quadro do certificado Parte II: Substituir formato os campos do modelo docx para dados personalizados

 

Exemplos específicos do código e aqui  https://github.com/xuhaojin/certificate-generator

 

Código é a seguinte:

empacotar com.x.certificate.doc; 


importação java.io.File;
importação java.io.FileInputStream;
importação java.io.FileOutputStream;
importação Java.io.IOException;
importação java.util.List;
importação java.util.Set; 


importação org.apache.commons.lang3.StringUtils;
importação org.apache.poi.xwpf.usermodel.IRunBody;
importação org.apache.poi.xwpf.usermodel.XWPFDocument;
importação org.apache.poi.xwpf.usermodel.XWPFParagraph;
importação org.apache.poi.xwpf.usermodel.XWPFRun;
importação org.apache.xmlbeans.XmlCursor;
importarorg.apache.xmlbeans.XmlException;
 Import org.apache.xmlbeans.XmlObject;
 Import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; 


Import com.google.common.collect.Lists;
 Import com.x.certificate. doc.domain.CertificateData;
 Import com.x.certificate.doc.domain.CertificateField; 


/ ** 
* copiar o arquivo de modelo de certificado doc e modificar o conteúdo de um dados personalizados 
* @author xuhaojin 
* @version [número da versão de 2020 15 março]
 * / 
público  classe DocOperator { 


    pública  estática toCumstomDoc Arquivo (string templatePath, string OutputPath, certificateData certificateData)
            lança IOException, XmlException { 
        XWPFDocument documento = novo XWPFDocument ( novo FilelnputStream (templatePath)); 


        Set <string> chaves = certificateData.getKeys (); 


        para (XWPFParagraph parágrafo: document.getParagraphs ()) { 
            XmlCursor cursor = . paragraph.getCTP () newCursor (); 
            cursor.selectPath (
                     "namespace declarar w = 'http: //schemas.openxmlformats.org/wordprocessingml/2006/main' .//*/w:txbxContent/w:p/w:r" ); 


            Lista <XmlObject> XML Objects = toXmlObjects (cursor); 


            para  (XmlObject xmlObject: XML Objects) {
                CTR ctr =CTR.Factory.parse (xmlObject.xmlText ()); 
                XWPFRun bufferrun = novo (CTR, (IRunBody) n) XWPFRun; 
                String text = bufferrun.getText (0 ); 
                Cordas conformingKey = containsKey (texto, teclas);
                se (conformingKey =! nula ) { 
                    CertificateField fieldInfo = certificateData.getValue (conformingKey); 
                    text = text.replace (toTemplateKey (conformingKey), fieldInfo.getContent ()); 
                    bufferrun.setFontSize (fieldInfo.getFontSize ());
                    bufferrun.setFontFamily (fieldInfo.getFontFamily ()); 
                    bufferrun.setText (texto, 0 ); 
                    bufferrun.setBold (fieldInfo.getIsBold ()); 
                } 


                XmlObject.set (bufferrun.getCTR ()); 
            } 
        } 


        FileOutputStream fora = novo FileOutputStream (OutputPath); 
        document.write (a); 


        out.close (); 
        DOCUMENT.CLOSE (); 


        voltar  novo arquivo (OutputPath); 
    } 


    Público  static List <XmlObject> toXmlObjects (XmlCursor docXmlCursor) { 
        Lista <XmlObject> XML Objects = Lists.newArrayList (); 


        enquanto (docXmlCursor.hasNextSelection ()) { 
            docXmlCursor.toNextSelection (); 
            xmlObjects.add (docXmlCursor.getObject ()); 
        } 


        Retornar XML Objects; 
    } 


    Pública  estática Cordas containsKey (texto String, Set <String> keys) { 
        Cadeia conformando = nulo ; 


        se (StringUtils.isEmpty (texto)) {
             retornar conformidade; 
        } 


        Para (String chave: chaves) {
             se (text.contains (chave)) { 
                conformidade =chave;
                quebrar  ;
            } 
        } 


        retornar conformidade; 
    } 


    Pública  estática Cordas toTemplateKey (String chave) {
         se (StringUtils.isEmpty (chave)) {
             return  nulo ; 
        } 


        Return "$ {" + chave + "}" ; 
    } 


    Pública  estática Cordas addBlankSpace (String text) { 
        StringBuffer sb = new StringBuffer (); 


        se (texto == nulo ) {
             return  nulo ; 
        } 


        carvão [] = caracteres text.toCharArray ();


        Seqüência de regex = "[\ u4E00- \ u9FA5] {1}" ;
        para ( carvão animal Acar: caracteres) { 
            Cadeia str = Acar + "" ;
            se (StringUtils.isBlank (str)) {
                 continue ; 
            } 


            Sb.append (Acar); 


            se (str.matches (regex)) { 
                sb.append ( "" ); 
            } 
        } 


        Retornar sb.ToString (); 
    } 


    Pública  estática  vazios principais (String [] args) throws IOException, XmlException { 
        Cadeia o templatePath = "C: \\ a1579 os utilizadores \\ \\ \\ Template.docx área de trabalho" ; 
        Cadeia OutputPath = "C: \\ a1579 os utilizadores \\ \\ \\ custom.docx área de trabalho" ; 
        CertificateData Dados = new new CertificateData (); 
        data.put ( nova nova CertificateField ( "titular", addBlankSpace ( "Joe Smith"), 34 )); 
        data.put ( nova nova CertificateField ( "certificado de informação chinesa", "Parabéns pela conclusão \" . helicóptero qualificações profissionais piloto \ "formação licenças de curso especial emitido isso!", 18 )); 
        data.put ( nova nova CertificateField ( "informações do certificado em Inglês" ,
                 "Parabéns pela conclusão do programa de treinamento de \ "Helicopter Pilot Qualificação \"", 15));
        data.put ( novo novo CertificateField ( "No. Certificado", "100 224 512", 18 )); 
        data.put ( novo novo CertificateField ( "assinatura de certificado", addBlankSpace ( "John Doe"), 25 )); 
        data.put ( novo novo CertificateField ( "data de certificado", "2020 21 de março", 15 )); 
        toCumstomDoc (a templatePath, OutputPath, o data); 
    } 


}

 

Em que a embalagem primária poi frasco referência, citada abaixo:

           < Dependência > 
                < groupId > org.apache.poi </ groupId > 
                < artifactId > poi-OOXML </ artifactId > 
                < versão > 3,17 </ versão > 
           </ dependência > 
           < dependência > 
                < groupId > org.apache.commons </ groupId > 
                < artifactId > commons-lang3 </ artifactId > 
                < versão > 3.7 </versão > 
           </ dependência > 
           < dependência > 
                < groupId > com.google.guava </ groupId > 
                < artifactId > goiaba </ artifactId > 
                < versão > 25.1-jre </ versão > 
           </ dependência >

 

Docx modelo de certificado é:

 

Gerado pelo Certificado certificado como um docx personalizado:

 

formato docx com tais certificados de dados personalizados para gerar boa

 

Acho que você gosta

Origin www.cnblogs.com/xhj123/p/12539642.html
Recomendado
Clasificación