use of com.lowagie.text.pdf.AcroFields in project dhis2-core by dhis2.
the class PdfDataEntryFormImportUtil method importProgramStage.
// -------------------------------------------------------------------------
// METHODS
// -------------------------------------------------------------------------
@SuppressWarnings("unchecked")
public void importProgramStage(InputStream in, I18nFormat format) throws Exception {
int programStageInstanceId;
ProgramStageInstance programStageInstance;
PdfReader reader = new PdfReader(in, null);
AcroFields form = reader.getAcroFields();
String strOrgID = form.getField(PdfDataEntryFormUtil.LABELCODE_ORGID);
int organisationUnitId = Integer.parseInt(strOrgID);
String strPeriodID = form.getField(PdfDataEntryFormUtil.LABELCODE_PERIODID);
Date executionDateInput = format.parseDate(strPeriodID);
Calendar executeDateCal = Calendar.getInstance();
executeDateCal.setTime(executionDateInput);
int programStageId = Integer.valueOf(form.getField(PdfDataEntryFormUtil.LABELCODE_PROGRAMSTAGEIDTEXTBOX));
ProgramStageInstanceDataManager programStageInstanceDataManager = new ProgramStageInstanceDataManager();
// Loop Through the Fields and get data.
Set<String> fldNames = form.getFields().keySet();
// Create Organized data
for (String fldName : fldNames) {
// If the value in the text field is not empty, proceed to add it.
if (!form.getField(fldName).trim().isEmpty()) {
if (fldName.startsWith(PdfDataEntryFormUtil.LABELCODE_DATADATETEXTFIELD)) {
String[] strArrFldName = fldName.split("_");
int rowNumber = Integer.parseInt(strArrFldName[1]);
programStageInstanceDataManager.addDateData(Integer.parseInt(form.getField(fldName)), rowNumber);
} else if (fldName.startsWith(PdfDataEntryFormUtil.LABELCODE_DATAENTRYTEXTFIELD)) {
String[] strArrFldName = fldName.split("_");
int dataElementId = Integer.parseInt(strArrFldName[1]);
int rowNumber = Integer.parseInt(strArrFldName[2]);
programStageInstanceDataManager.addDataElementData(dataElementId, form.getField(fldName), rowNumber);
}
}
}
// For each row, add new programStageInstance and add data elements to it.
for (Map.Entry<Integer, ProgramStageInstanceStorage> entry : programStageInstanceDataManager.getProgramStageInstanceData().entrySet()) {
ProgramStageInstanceStorage programStageInstanceStorage = entry.getValue();
int date = programStageInstanceStorage.getDate();
executeDateCal.set(Calendar.DATE, date);
Date executionDate = executeDateCal.getTime();
// Step 2. Create Program Stage Instance - If does not exists
// already.
programStageInstanceId = addNewProgramStageInstance(programStageId, organisationUnitId, executionDate);
programStageInstance = programStageInstanceService.getProgramStageInstance(programStageInstanceId);
for (Map.Entry<Integer, String> dataElementsEntry : programStageInstanceStorage.getDataElementsValue().entrySet()) {
Integer dataElementId = dataElementsEntry.getKey();
String value = dataElementsEntry.getValue();
// Step 3. Insert Data
insertValueProgramStageDataElement(programStageInstance, dataElementId, value);
}
}
reader.close();
}
use of com.lowagie.text.pdf.AcroFields in project dhis2-core by dhis2.
the class PdfDataEntryFormUtil method getDataValueSet.
/**
* Creates data value set from Input Stream (PDF) for PDF data import
*/
public static DataValueSet getDataValueSet(InputStream in) {
PdfReader reader = null;
DataValueSet dataValueSet = new DataValueSet();
List<org.hisp.dhis.dxf2.datavalue.DataValue> dataValueList = new ArrayList<>();
try {
reader = new PdfReader(in);
AcroFields form = reader.getAcroFields();
if (form != null) {
// Process OrgUnitUID and PeriodID from the PDF Form
String orgUnitUid = form.getField(PdfDataEntryFormUtil.LABELCODE_ORGID).trim();
String periodId = form.getField(PdfDataEntryFormUtil.LABELCODE_PERIODID).trim();
if (periodId == null || periodId.isEmpty()) {
throw new InvalidIdentifierReferenceException(ERROR_EMPTY_PERIOD);
}
if (orgUnitUid == null || orgUnitUid.isEmpty()) {
throw new InvalidIdentifierReferenceException(ERROR_EMPTY_ORG_UNIT);
}
Period period = PeriodType.getPeriodFromIsoString(periodId);
if (period == null) {
throw new InvalidIdentifierReferenceException(ERROR_INVALID_PERIOD + periodId);
}
// Loop Through the Fields and get data.
@SuppressWarnings("unchecked") Set<String> fldNames = form.getFields().keySet();
for (String fldName : fldNames) {
if (fldName.startsWith(PdfDataEntryFormUtil.LABELCODE_DATAENTRYTEXTFIELD)) {
String[] strArrFldName = fldName.split("_");
org.hisp.dhis.dxf2.datavalue.DataValue dataValue = new org.hisp.dhis.dxf2.datavalue.DataValue();
dataValue.setDataElement(strArrFldName[1]);
dataValue.setCategoryOptionCombo(strArrFldName[2]);
dataValue.setOrgUnit(orgUnitUid);
dataValue.setPeriod(period.getIsoDate());
dataValue.setValue(fieldValueFormat(strArrFldName, form.getField(fldName)));
dataValue.setStoredBy(DATAVALUE_IMPORT_STOREBY);
dataValue.setComment(DATAVALUE_IMPORT_COMMENT);
dataValue.setFollowup(false);
dataValue.setLastUpdated(DateUtils.getMediumDateString());
dataValueList.add(dataValue);
}
}
dataValueSet.setDataValues(dataValueList);
} else {
throw new RuntimeException("Could not generate PDF AcroFields form from input");
}
} catch (Exception ex) {
throw new RuntimeException(ex);
} finally {
if (reader != null) {
reader.close();
}
}
return dataValueSet;
}
Aggregations