XDocReport / FreeMarker (FTL): вставка значений в шаблон в шаблон - PullRequest
0 голосов
/ 03 июля 2019

Мне нужно создать PDF-файл из файла соглашения docx, используя XDocReport.

В файле docx у меня есть несколько шаблонов, которые я заполняю через запрос, который получит мой API Мой вариант использования заключается в том, что мне нужно вставить любой из двух следующих текстов в файл PDF, который я сгенерирую на основе типа запроса, который я получу

1.) (В случае) собственности / партнерства, имеющего офис по адресу $ {address}], представленный Mr./Ms. [$ {authoriged_signatory_partner}, как авторизованный подписант 2.) (Или в случае) публичной / частной компании с ограниченной ответственностью, зарегистрированной и зарегистрированной в соответствии с положениями Закона о компаниях [1956/2013] и имеющей свой зарегистрированный офис по адресу $ {address}, представленный Mr./Ms. $ {authoriged_signatory_partner}, авторизованный подписант («Партнер API»).

Я подумал о теге шаблона $ {partner_or_company_content}, в который я вставлю любую из двух альтернатив в зависимости от того, является ли полученный запрос партнерством или компанией (запрос будет содержать пару ключ-значение, например, например: "isPartner": "Да")

Как мне вставить значения в $ {authoriged_signatory_partner} и $ {address}, тогда как тогда это будет шаблон внутри шаблона?

Вот метод, который заполняет данные на карте, из которой я заполняю шаблоны

public void fillData(Map<String, Object> nonImageVariableMap, FileConvertRequest request) {
    // TODO Auto-generated method stub
    Parameters parameter = request.getParameters();

    if (parameter.getName() != null && parameter.getName().trim().length() > 0) {
        nonImageVariableMap.put("name", parameter.getName());
    }

    if (parameter.getCellnumber() != null && parameter.getCellnumber().trim().length() > 0) {
        nonImageVariableMap.put("cell_number", parameter.getCellnumber());
    }

    if (parameter.getAadhaarNumber() != null && parameter.getAadhaarNumber().trim().length() > 0) {
        nonImageVariableMap.put("aadhaar_number", parameter.getAadhaarNumber());
    }
    if (parameter.getAddress() != null && parameter.getAddress().trim().length() > 0) {
        nonImageVariableMap.put("address", parameter.getAddress());
    }
    if (parameter.getAuthorigedSignatoryPartner() != null
            && parameter.getAuthorigedSignatoryPartner().trim().length() > 0) {
        nonImageVariableMap.put("authoriged_signatory_partner", parameter.getAuthorigedSignatoryPartner());
    }
    if (parameter.getCellnumber() != null && parameter.getCellnumber().trim().length() > 0) {
        nonImageVariableMap.put("name", parameter.getName());
    }
    if (parameter.getEffectiveDate() != null && parameter.getEffectiveDate().trim().length() > 0) {
        nonImageVariableMap.put("effective_date", parameter.getEffectiveDate());
    }
    if (parameter.getEmail() != null && parameter.getEmail().trim().length() > 0) {
        nonImageVariableMap.put("email", parameter.getEmail());
    }
    if (parameter.getMerchantCode() != null && parameter.getMerchantCode().trim().length() > 0) {
        nonImageVariableMap.put("merchant_code", parameter.getMerchantCode());
    }
    if (parameter.getPanNumber() != null && parameter.getPanNumber().trim().length() > 0) {
        nonImageVariableMap.put("pan_number", parameter.getPanNumber());
    }
    if (parameter.getPlace() != null && parameter.getPlace().trim().length() > 0) {
        nonImageVariableMap.put("place", parameter.getPlace());
    }
    if (parameter.getMerchantName() != null && parameter.getMerchantName().trim().length() > 0) {
        nonImageVariableMap.put("merchant_name", parameter.getMerchantName());
    }
    if(parameter.getSignatory() !=null && parameter.getSignatory().trim().length() > 0) {
        nonImageVariableMap.put("signatory", parameter.getSignatory());
    }
    if(parameter.getOrignalAgreementSignedDate() !=null && parameter.getOrignalAgreementSignedDate().trim().length() > 0) {
        nonImageVariableMap.put("orignal_agreement_signed_date", parameter.getOrignalAgreementSignedDate());
    }

}

Вот запрос класса

package com.eko.dconverter.requestobj;

import javax.xml.bind.annotation.XmlRootElement;

import com.fasterxml.jackson.annotation.JsonProperty;

@XmlRootElement
public class FileConvertRequest {

private String fileName;
private String fileLocation;
private String outputLocation;
private String convertInto;
private boolean isGoogleDrive;
private String merchantCode;
private Parameters parameters;

public String getFileName() {
    return fileName;
}

public void setFileName(String fileName) {
    this.fileName = fileName;
}

public String getFileLocation() {
    return fileLocation;
}

public void setFileLocation(String fileLocation) {
    this.fileLocation = fileLocation;
}

public String getOutputLocation() {
    return outputLocation;
}

public void setOutputLocation(String outputLocation) {
    this.outputLocation = outputLocation;
}

public String getConvertInto() {
    return convertInto;
}

public void setConvertInto(String convertInto) {
    this.convertInto = convertInto;
}

public boolean isGoogleDrive() {
    return isGoogleDrive;
}

public void setGoogleDrive(boolean isGoogleDrive) {
    this.isGoogleDrive = isGoogleDrive;
}


public Parameters getParameters() {
    return parameters;
}

public String getMerchantCode() {
    return merchantCode;
}

public void setMerchantCode(String merchantCode) {
    this.merchantCode = merchantCode;
}

@JsonProperty("parameters")
public void setParameters(Parameters parameters) {
    this.parameters = parameters;
}
}

Вот класс параметров

package com.eko.dconverter.requestobj;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Parameters {

private String name;
private String cellnumber;
private String address;
private String panNumber;
private String aadhaarNumber;
private String merchantName;
private String authorigedSignatoryPartner;
private String effectiveDate;
private String merchantCode;
private String place;
private String email;
private String signatory;
private String orignalAgreementSignedDate;

public String getOrignalAgreementSignedDate() {
    return orignalAgreementSignedDate;
}

public void setOrignalAgreementSignedDate(String orignalAgreementSignedDate) {
    this.orignalAgreementSignedDate = orignalAgreementSignedDate;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getCellnumber() {
    return cellnumber;
}

public void setCellnumber(String cellnumber) {
    this.cellnumber = cellnumber;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getPanNumber() {
    return panNumber;
}

public void setPanNumber(String panNumber) {
    this.panNumber = panNumber;
}

public String getAadhaarNumber() {
    return aadhaarNumber;
}

public void setAadhaarNumber(String aadhaarNumber) {
    this.aadhaarNumber = aadhaarNumber;
}

public String getMerchantName() {
    return merchantName;
}

public void setMerchantName(String merchantName) {
    this.merchantName = merchantName;
}

public String getAuthorigedSignatoryPartner() {
    return authorigedSignatoryPartner;
}

public void setAuthorigedSignatoryPartner(String authorigedSignatoryPartner) {
    this.authorigedSignatoryPartner = authorigedSignatoryPartner;
}

public String getEffectiveDate() {
    return effectiveDate;
}

public void setEffectiveDate(String effectiveDate) {
    this.effectiveDate = effectiveDate;
}

public String getMerchantCode() {
    return merchantCode;
}

public void setMerchantCode(String merchantCode) {
    this.merchantCode = merchantCode;
}

public String getPlace() {
    return place;
}

public void setPlace(String place) {
    this.place = place;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getSignatory() {
    return signatory;
}

public void setSignatory(String signatory) {
    this.signatory = signatory;
}

}

Здесь генерируется PDF (не содержит вспомогательных функций, которые выполняют работу, но дает представление)

public String mergeAndGeneratePDFOutput(String templatePath, TemplateEngineKind templateEngineKind, Map<String, Object> nonImageVariableMap,Map<String, String> imageVariablesWithPathMap, String fileToBeGenerated, String outputFileLocation ) throws IOException, XDocReportException, Docx4JException{

    System.out.println("File path :"+templatePath);
    InputStream inputStream = loadDocumentAsStream(templatePath);
    IXDocReport xdocReport = loadDocumentAsIDocxReport(inputStream,templateEngineKind);
    IContext context = replaceVariabalesInTemplateOtherThanImages(xdocReport,nonImageVariableMap);
    replaceImagesVariabalesInTemplate(xdocReport, imageVariablesWithPathMap, context);
    byte[] mergedOutput = generateMergedOutput(xdocReport, context);

    WordprocessingMLPackage wordprocessingMLPackage=null;

    FileOutputStream os = new FileOutputStream(outputFileLocation+""+fileToBeGenerated);

    wordprocessingMLPackage = WordprocessingMLPackage.load(new ByteArrayInputStream(mergedOutput));
    Docx4J.toPDF(wordprocessingMLPackage, os);

    return fileToBeGenerated;

}
...