Example usage for com.lowagie.text.pdf PdfReader selectPages

List of usage examples for com.lowagie.text.pdf PdfReader selectPages

Introduction

In this page you can find the example usage for com.lowagie.text.pdf PdfReader selectPages.

Prototype

public void selectPages(List pagesToKeep) 

Source Link

Document

Selects the pages to keep in the document.

Usage

From source file:it.pdfsam.console.tools.pdf.PdfConcat.java

License:Open Source License

/**
 * Execute the concat command. On error an exception is thrown.
 * @throws ConcatException//from w ww .j a v a2  s. c o m
 */
public void execute() throws ConcatException {
    try {
        percentageChanged(0, 0);
        out_message = "";
        String file_name;
        int pageOffset = 0;
        ArrayList master = new ArrayList();
        int f = 0;
        Document pdf_document = null;
        PdfConcatenator pdf_writer = null;
        int total_processed_pages = 0;
        String[] page_selection = u_string.split(":");
        File tmp_o_file = TmpFileNameGenerator.generateTmpFile(o_file.getParent());
        PdfReader pdf_reader;
        for (Iterator f_list_itr = f_list.iterator(); f_list_itr.hasNext();) {
            String current_p_selection;
            //get page selection. If arrayoutofbounds default behaviour is "all" 
            try {
                current_p_selection = page_selection[f].toLowerCase();
                if (current_p_selection.equals(""))
                    current_p_selection = "all";
            } catch (Exception e) {
                current_p_selection = "all";
            }
            //validation
            if (!(Pattern.compile("([0-9]+[-][0-9]+)|(all)", Pattern.CASE_INSENSITIVE)
                    .matcher(current_p_selection).matches())) {
                String errorMsg = "";
                try {
                    tmp_o_file.delete();
                } catch (Exception e) {
                    errorMsg = " Unable to delete temporary file.";
                }
                throw new ConcatException(
                        "ValidationError: Syntax error on " + current_p_selection + "." + errorMsg);
            }
            file_name = f_list_itr.next().toString();
            //reader creation
            pdf_reader = new PdfReader(new RandomAccessFileOrArray(file_name), null);
            pdf_reader.consolidateNamedDestinations();
            int pdf_number_of_pages = pdf_reader.getNumberOfPages();
            //default behaviour
            int start = 0;
            int end_page = pdf_number_of_pages;
            if (!(current_p_selection.equals("all"))) {
                boolean valid = true;
                String exceptionMsg = "";
                String[] limits = current_p_selection.split("-");
                try {
                    start = Integer.parseInt(limits[0]);
                    end_page = Integer.parseInt(limits[1]);
                } catch (Exception ex) {
                    valid = false;
                    exceptionMsg += "ValidationError: Syntax error on " + current_p_selection + ".";
                    try {
                        tmp_o_file.delete();
                    } catch (Exception e) {
                        exceptionMsg += " Unable to delete temporary file.";
                    }
                }
                if (valid) {
                    //validation
                    if (start < 0) {
                        valid = false;
                        exceptionMsg = "ValidationError: Syntax error. " + (start) + " must be positive in "
                                + current_p_selection + ".";
                        try {
                            tmp_o_file.delete();
                        } catch (Exception e) {
                            exceptionMsg += " Unable to delete temporary file.";
                        }
                    } else if (end_page > pdf_number_of_pages) {
                        valid = false;
                        exceptionMsg = "ValidationError: Cannot merge at page " + end_page + ". No such page.";
                        try {
                            tmp_o_file.delete();
                        } catch (Exception e) {
                            exceptionMsg += " Unable to delete temporary file.";
                        }
                    } else if (start > end_page) {
                        valid = false;
                        exceptionMsg = "ValidationError: Syntax error. " + (start) + " is bigger than "
                                + end_page + " in " + current_p_selection + ".";
                        try {
                            tmp_o_file.delete();
                        } catch (Exception e) {
                            exceptionMsg += " Unable to delete temporary file.";
                        }
                    }
                }
                if (!valid) {
                    throw new ConcatException(exceptionMsg);
                }
            }
            List bookmarks = SimpleBookmark.getBookmark(pdf_reader);
            if (bookmarks != null) {
                //if the end page is not the end of the doc, delete bookmarks after it
                if (end_page < pdf_number_of_pages) {
                    SimpleBookmark.eliminatePages(bookmarks, new int[] { end_page + 1, pdf_number_of_pages });
                }
                // if start page isn't the first page of the document, delete bookmarks before it
                if (start > 0) {
                    SimpleBookmark.eliminatePages(bookmarks, new int[] { 1, start });
                    //bookmarks references must be taken back
                    SimpleBookmark.shiftPageNumbers(bookmarks, -start, null);
                }
                if (pageOffset != 0) {
                    SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, null);
                }
                master.addAll(bookmarks);
            }
            pageOffset += (end_page - start);
            out_message += LogFormatter.formatMessage(file_name + ": " + end_page + " pages-\n");
            if (f == 0) {
                if (copyfields_boolean) {
                    // step 1: we create a writer 
                    pdf_writer = new PdfCopyFieldsConcatenator(new FileOutputStream(tmp_o_file),
                            compressed_boolean);
                    HashMap meta = pdf_reader.getInfo();
                    meta.put("Creator", MainConsole.CREATOR);
                } else {
                    // step 1: creation of a document-object
                    pdf_document = new Document(pdf_reader.getPageSizeWithRotation(1));
                    // step 2: we create a writer that listens to the document
                    pdf_writer = new PdfSimpleConcatenator(pdf_document, new FileOutputStream(tmp_o_file),
                            compressed_boolean);
                    // step 3: we open the document
                    MainConsole.setDocumentCreator(pdf_document);
                    pdf_document.open();
                }
                out_message += LogFormatter.formatMessage("Temporary file created-\n");
            }
            // step 4: we add content
            pdf_reader.selectPages(start + "-" + end_page);
            pdf_writer.addDocument(pdf_reader);
            //fix 03/07
            //pdf_reader = null;
            pdf_reader.close();
            pdf_writer.freeReader(pdf_reader);
            total_processed_pages += end_page - start + 1;
            out_message += LogFormatter.formatMessage((end_page - start) + " pages processed correctly-\n");
            f++;
            try {
                percentageChanged((f * 100) / f_list.size(), (end_page - start));
            } catch (RuntimeException re) {
                out_message += LogFormatter.formatMessage("RuntimeException: " + re.getMessage() + "\n");
            }
        }
        if (master.size() > 0) {
            pdf_writer.setOutlines(master);
        }
        out_message += LogFormatter.formatMessage("Total processed pages: " + total_processed_pages + "-\n");
        // step 5: we close the document
        if (pdf_document != null) {
            pdf_document.close();
        }
        pdf_writer.close();
        // step 6: temporary buffer moved to output file
        renameTemporaryFile(tmp_o_file, o_file, overwrite_boolean);
    } catch (Exception e) {
        throw new ConcatException(e);
    } finally {
        workCompleted();
    }
}

From source file:it.pdfsam.console.tools.pdf.writers.PdfCopyFieldsConcatenator.java

License:Open Source License

public void addDocument(PdfReader reader, String ranges) throws Exception {
    if (reader != null) {
        reader.selectPages(ranges);
        writer.addDocument(reader);/*from  ww w.j av  a 2 s .  co  m*/
    } else {
        throw new DocumentException("Reader is null");
    }
}

From source file:it.pdfsam.console.tools.pdf.writers.PdfSimpleConcatenator.java

License:Open Source License

public void addDocument(PdfReader reader, String ranges) throws Exception {
    if (reader != null) {
        reader.selectPages(ranges);
        addDocument(reader);/*from w ww  . ja  v a 2  s . c om*/
    } else {
        throw new DocumentException("Reader is null");
    }
}

From source file:org.fenixedu.idcards.ui.candidacydocfiller.BPIPdfFiller.java

License:Open Source License

private ByteArrayOutputStream getFilledPdfBPIPersonalInformation(Person person)
        throws IOException, DocumentException {
    InputStream istream = getClass().getResourceAsStream(BPI_PERSONAL_INFORMATION_PDF_PATH);
    PdfReader reader = new PdfReader(istream);
    reader.getAcroForm().remove(PdfName.SIGFLAGS);
    reader.selectPages("1,2");
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    PdfStamper stamper = new PdfStamper(reader, output);
    form = stamper.getAcroFields();/*from w  w w  .  java 2s  .co  m*/

    setField("NomeCompleto_1", person.getName());

    if (person.isFemale()) {
        setField("Sexo_F", "Yes"); // female
    } else {
        setField("Sexo_M", "Yes"); // male
    }

    setField("NIF", person.getSocialSecurityNumber());
    setField("Numero", person.getDocumentIdNumber());

    setField("Nacionalidade", person.getCountryOfBirth().getCountryNationality().toString());
    setField("Naturalidade", person.getCountryOfBirth().getName());

    setField("Distrito", person.getDistrictOfBirth());
    setField("Concelho", person.getDistrictSubdivisionOfBirth());
    setField("Freguesia", person.getParishOfBirth());
    setField("NomedoPai", person.getNameOfFather());
    setField("NomedaMae", person.getNameOfMother());

    switch (person.getMaritalStatus()) {
    case CIVIL_UNION:
        setField("EstadoCivil_UniaodeFacto", "Yes");
        break;
    case DIVORCED:
        setField("EstadoCivil_Divorciado", "Yes");
        break;
    case MARRIED:
        setField("EstadoCivil_Casado", "Yes");
        break;
    case SEPARATED:
        setField("EstadoCivil_Separado Judicialmente", "Yes");
        break;
    case SINGLE:
        setField("EstadoCivil_Solteiro", "Yes");
        break;
    case WIDOWER:
        setField("EstadoCivil_Viuvo", "Yes");
        break;
    }

    setField("MoradadeResidenciaPermanente_1", person.getAddress());
    setField("MoradadeResidenciaPermanente_Localidade", person.getAreaOfAreaCode());
    setField("MoradadeResidenciaPermanente_DesignacaoPostal", person.getAreaOfAreaCode());
    setField("MoradadeResidenciaPermanente_Pais", person.getCountryOfResidence().getName());

    String postalCode = person.getPostalCode();
    int dashIndex = postalCode.indexOf('-');
    setField("CodigoPostal_1_1", postalCode.substring(0, 4));
    String last3Numbers = postalCode.substring(dashIndex + 1, dashIndex + 4);
    setField("CodigoPostal_1_2", last3Numbers);
    setField("Contactos_Movel_Pessoal", person.getDefaultMobilePhoneNumber());
    setField("Contactos_Email", getMail(person));

    YearMonthDay emissionDate = person.getEmissionDateOfDocumentIdYearMonthDay();
    if (emissionDate != null) {
        setField("DataEmissao_1", String.format("%02d", emissionDate.getDayOfMonth()));
        setField("DataEmissao_2", String.format("%02d", emissionDate.getMonthOfYear()));
        setField("DataEmissao_3", String.valueOf(emissionDate.getYear()));
    }

    YearMonthDay expirationDate = person.getExpirationDateOfDocumentIdYearMonthDay();
    setField("Valido_1", String.format("%02d", expirationDate.getDayOfMonth()));
    setField("Valido_2", String.format("%02d", expirationDate.getMonthOfYear()));
    setField("Valido_3", String.valueOf(expirationDate.getYear()));

    YearMonthDay birthdayDate = person.getDateOfBirthYearMonthDay();
    setField("DataNascimento_1", String.format("%02d", birthdayDate.getDayOfMonth()));
    setField("DataNascimento_2", String.format("%02d", birthdayDate.getMonthOfYear()));
    setField("DataNascimento_3", String.valueOf(birthdayDate.getYear()));

    stamper.setFormFlattening(true);
    stamper.close();
    return output;
}

From source file:org.fenixedu.idcards.ui.candidacydocfiller.BPIPdfFiller.java

License:Open Source License

private ByteArrayOutputStream getFilledPdfBPIProductsandServices(Person person)
        throws IOException, DocumentException {
    InputStream istream = getClass().getResourceAsStream(BPI_PRODUCTS_SERVICES_PDF_PATH);
    PdfReader reader = new PdfReader(istream);
    reader.getAcroForm().remove(PdfName.SIGFLAGS);
    reader.selectPages("1");
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    PdfStamper stamper = new PdfStamper(reader, output);
    form = stamper.getAcroFields();//  w ww  . ja  v  a 2 s  . c o m

    setField("IdentificacaoIntervenientes_1Titular", person.getName());
    stamper.setFormFlattening(true);
    stamper.close();
    return output;
}

From source file:org.fenixedu.idcards.ui.candidacydocfiller.CGDPdfFiller.java

License:Open Source License

private ByteArrayOutputStream getFilledPdfCGDPersonalInformation(Person person)
        throws IOException, DocumentException {
    InputStream istream = getClass().getResourceAsStream(CGD_PERSONAL_INFORMATION_PDF_PATH);
    PdfReader reader = new PdfReader(istream);
    reader.getAcroForm().remove(PdfName.SIGFLAGS);
    reader.selectPages("1");
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    PdfStamper stamper = new PdfStamper(reader, output);
    form = stamper.getAcroFields();/*w ww.  j a  v a  2  s. c o  m*/

    setField("T_NomeComp", person.getName());
    setField("T_Email", getMail(person));

    if (person.isFemale()) {
        setField("CB_0_1", "Yes"); // female
    } else {
        setField("CB_0_0", "Yes"); // male
    }

    setField("Cod_data_1",
            person.getDateOfBirthYearMonthDay().toString(DateTimeFormat.forPattern("yyyy/MM/dd")));

    setField("NIF1", person.getSocialSecurityNumber());
    setField("T_DocIdent", person.getDocumentIdNumber());

    switch (person.getMaritalStatus()) {
    case CIVIL_UNION:
        setField("CB_EstCivil01", MARITAL_STATUS_CIVIL_UNION);
        break;
    case DIVORCED:
        setField("CB_EstCivil01", MARITAL_STATUS_DIVORCED);
        break;
    case MARRIED:
        setField("CB_EstCivil01", "");
        break;
    case SEPARATED:
        setField("CB_EstCivil01", MARITAL_STATUS_SEPARATED);
        break;
    case SINGLE:
        setField("CB_EstCivil01", MARITAL_STATUS_SINGLE);
        break;
    case WIDOWER:
        setField("CB_EstCivil01", MARITAL_STATUS_WIDOWER);
        break;
    }
    YearMonthDay emissionDate = person.getEmissionDateOfDocumentIdYearMonthDay();
    if (emissionDate != null) {
        setField("Cod_data_2", emissionDate.toString(DateTimeFormat.forPattern("yyyy/MM/dd")));
    }

    YearMonthDay expirationDate = person.getExpirationDateOfDocumentIdYearMonthDay();
    if (expirationDate != null) {
        setField("Cod_data_3", expirationDate.toString(DateTimeFormat.forPattern("yyyy/MM/dd")));
    }

    setField("T_NomePai", person.getNameOfFather());
    setField("T_NomeMae", person.getNameOfMother());

    setField("T_NatPais", person.getCountryOfBirth().getName());
    setField("T_Naturali", person.getDistrictOfBirth());
    setField("T_NatConc", person.getDistrictSubdivisionOfBirth());
    setField("T_NatFreg", person.getParishOfBirth());
    setField("T_PaisRes", person.getCountryOfBirth().getCountryNationality().toString());

    setField("T_Morada01", person.getAddress());
    setField("T_Localid01", person.getAreaOfAreaCode());
    setField("T_Telef", person.getDefaultMobilePhoneNumber());

    String postalCode = person.getPostalCode();
    int dashIndex = postalCode.indexOf('-');
    setField("T_CodPos01", postalCode.substring(0, 4));
    String last3Numbers = postalCode.substring(dashIndex + 1, dashIndex + 4);
    setField("T_CodPos03_1", last3Numbers);
    setField("T_Localid02_1", person.getAreaOfAreaCode());

    setField("T_Distrito", person.getDistrictOfResidence());
    setField("T_Conc", person.getDistrictSubdivisionOfResidence());
    setField("T_Freguesia", person.getParishOfResidence());
    setField("T_PaisResid", person.getCountryOfResidence().getName());

    stamper.setFormFlattening(true);
    stamper.close();
    return output;
}

From source file:org.fenixedu.idcards.ui.candidacydocfiller.SantanderPdfFiller.java

License:Open Source License

private ByteArrayOutputStream getFilledPdfSantanderApplication(Person person)
        throws IOException, DocumentException {
    InputStream istream = getClass().getResourceAsStream(SANTANDER_APPLICATION_PDF_PATH);
    PdfReader reader = new PdfReader(istream);
    reader.getAcroForm().remove(PdfName.SIGFLAGS);
    reader.selectPages("1,2");
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    PdfStamper stamper = new PdfStamper(reader, output);
    form = stamper.getAcroFields();//w ww  .  j a  v a2 s .c o m

    setField("topmostSubform[0].Page1[0].Nomecompleto[0]", person.getName());
    String documentIdNumber = person.getDocumentIdNumber();
    if (person.getIdDocumentType().equals(IDDocumentType.CITIZEN_CARD)
            || person.getIdDocumentType().equals(IDDocumentType.IDENTITY_CARD)) {
        setField("topmostSubform[0].Page1[0].NumBICartaoCidadaooutro[0]", documentIdNumber);
        setField("topmostSubform[0].Page1[0].Checkdigit[0]",
                person.getIdentificationDocumentSeriesNumberValue());
    } else {
        setField("topmostSubform[0].Page1[0].Outrotipodocidentificacao[0]", documentIdNumber);
    }

    YearMonthDay emissionDate = person.getEmissionDateOfDocumentIdYearMonthDay();
    if (emissionDate != null) {
        setField("topmostSubform[0].Page1[0].Dataemissao[0]",
                emissionDate.toString(DateTimeFormat.forPattern("dd/MM/yyyy")));
    }
    setField("topmostSubform[0].Page1[0].Datavalidade[0]", person.getExpirationDateOfDocumentIdYearMonthDay()
            .toString(DateTimeFormat.forPattern("dd/MM/yyyy")));
    setField("topmostSubform[0].Page1[0].NIF[0]", person.getSocialSecurityNumber());
    setField("topmostSubform[0].Page1[0].Datanascimento[0]",
            person.getDateOfBirthYearMonthDay().toString(DateTimeFormat.forPattern("dd/MM/yyyy")));
    YearMonthDay dateOfBirthYearMonthDay = person.getDateOfBirthYearMonthDay();
    Period periodBetween = new Period(dateOfBirthYearMonthDay, new YearMonthDay());
    setField("topmostSubform[0].Page1[0].Idadeactual[0]",
            String.valueOf(periodBetween.get(DurationFieldType.years())));
    if (person.isFemale()) {
        setField("topmostSubform[0].Page1[0].Sexo[0]", "F"); // female
    } else if (person.isMale()) {
        setField("topmostSubform[0].Page1[0].Sexo[0]", "M"); // male
    }

    switch (person.getMaritalStatus()) {
    case CIVIL_UNION:
        setField("topmostSubform[0].Page1[0].Uniaofacto[0]", "1");
        break;
    case DIVORCED:
        setField("topmostSubform[0].Page1[0].Divorciado[0]", "1");
        break;
    case MARRIED:
        setField("topmostSubform[0].Page1[0].Casado[0]", "1");
        break;
    case SEPARATED:
        setField("topmostSubform[0].Page1[0].Separado[0]", "1");
        break;
    case SINGLE:
        setField("topmostSubform[0].Page1[0].Solteiro[0]", "1");
        break;
    case WIDOWER:
        setField("topmostSubform[0].Page1[0].Viuvo[0]", "1");
        break;
    }
    setField("topmostSubform[0].Page1[0].Telemovel[0]", person.getDefaultMobilePhoneNumber());
    setField("topmostSubform[0].Page1[0].E-mail[0]", getMail(person));

    setField("topmostSubform[0].Page1[0].Moradaresidenciapermanente[0]", person.getAddress());
    setField("topmostSubform[0].Page1[0].localidade[0]", person.getAreaOfAreaCode());
    String postalCode = person.getPostalCode();
    int dashIndex = postalCode.indexOf('-');
    setField("topmostSubform[0].Page1[0].CodPostal[0]", postalCode.substring(0, 4));
    String last3Numbers = person.getPostalCode().substring(dashIndex + 1, dashIndex + 4);
    setField("topmostSubform[0].Page1[0].ExtensaoCodPostal[0]", last3Numbers);

    setField("topmostSubform[0].Page1[0].Paisnacionalidade",
            person.getCountry().getCountryNationality().getPreferedContent());
    setField("topmostSubform[0].Page1[0].Paisnascimento", person.getCountryOfBirth().getName());
    setField("topmostSubform[0].Page1[0].Paisresidencia", person.getCountryOfResidence().getName());

    setField("topmostSubform[0].Page2[0].InstituioEnsinoSuperior[0]",
            UniversityUnit.getInstitutionsUniversityUnit().getName());
    setField("topmostSubform[0].Page2[0].FaculdadeEscola[0]",
            Bennu.getInstance().getInstitutionUnit().getName());
    Registration registration = getRegistration(person);
    if (registration != null) {
        setField("topmostSubform[0].Page2[0].Curso[0]", registration.getDegree().getSigla());
        setField("topmostSubform[0].Page2[0].AnoIncioCurso[0]",
                String.valueOf(registration.getStartDate().getYear()));
    }

    stamper.setFormFlattening(true);
    stamper.close();
    return output;
}

From source file:org.fenixedu.ulisboa.specifications.ui.firstTimeCandidacy.util.CGDPdfFiller.java

License:Open Source License

private ByteArrayOutputStream getFilledPdfCGDPersonalInformation(Person person, InputStream pdfTemplateStream)
        throws IOException, DocumentException {
    PdfReader reader = new PdfReader(pdfTemplateStream);
    reader.getAcroForm().remove(PdfName.SIGFLAGS);
    reader.selectPages("1,3,4"); // The template we are using has a blank page after the front sheet.
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    PdfStamper stamper = new PdfStamper(reader, output);
    form = stamper.getAcroFields();//from w w w  .j  a v  a2  s.c  om

    setField("T_NomeComp", person.getName());
    setField("T_Email", getMail(person));

    if (person.isFemale()) {
        setField("CB_0_1", "Yes"); // female
    } else {
        setField("CB_0_0", "Yes"); // male
    }

    if (person.getDateOfBirthYearMonthDay() != null) {
        setField("Cod_data_1",
                person.getDateOfBirthYearMonthDay().toString(DateTimeFormat.forPattern("yyyy/MM/dd")));
    }

    setField("NIF1", person.getSocialSecurityNumber());
    setField("T_DocIdent", person.getDocumentIdNumber());

    switch (person.getMaritalStatus()) {
    case CIVIL_UNION:
        setField("CB_EstCivil01", MARITAL_STATUS_CIVIL_UNION);
        break;
    case DIVORCED:
        setField("CB_EstCivil01", MARITAL_STATUS_DIVORCED);
        break;
    case MARRIED:
        setField("CB_EstCivil01", "");
        break;
    case SEPARATED:
        setField("CB_EstCivil01", MARITAL_STATUS_SEPARATED);
        break;
    case SINGLE:
        setField("CB_EstCivil01", MARITAL_STATUS_SINGLE);
        break;
    case WIDOWER:
        setField("CB_EstCivil01", MARITAL_STATUS_WIDOWER);
        break;
    }
    YearMonthDay emissionDate = person.getEmissionDateOfDocumentIdYearMonthDay();
    if (emissionDate != null) {
        setField("Cod_data_2", emissionDate.toString(DateTimeFormat.forPattern("yyyy/MM/dd")));
    }

    YearMonthDay expirationDate = person.getExpirationDateOfDocumentIdYearMonthDay();
    if (expirationDate != null) {
        setField("Cod_data_3", expirationDate.toString(DateTimeFormat.forPattern("yyyy/MM/dd")));
    }

    setField("T_NomePai", person.getNameOfFather());
    setField("T_NomeMae", person.getNameOfMother());

    if (person.getCountryOfBirth() != null) {
        setField("T_NatPais", person.getCountryOfBirth().getName());
        setField("T_Naturali", person.getDistrictOfBirth());
        setField("T_NatConc", person.getDistrictSubdivisionOfBirth());
        setField("T_NatFreg", person.getParishOfBirth());
        setField("T_PaisRes", person.getCountryOfBirth().getCountryNationality().toString());
    }

    setField("T_Morada01", person.getAddress());
    setField("T_Localid01", person.getAreaOfAreaCode());
    setField("T_Telef", person.getDefaultMobilePhoneNumber());

    String postalCode = person.getPostalCode();
    int dashIndex = postalCode.indexOf('-');
    if (postalCode != null && postalCode.length() >= dashIndex + 4) {
        setField("T_CodPos01", postalCode.substring(0, 4));
        String last3Numbers = postalCode.substring(dashIndex + 1, dashIndex + 4);
        setField("T_CodPos03_1", last3Numbers);
        setField("T_Localid02_1", person.getAreaOfAreaCode());
    }

    if (person.getCountryOfResidence() != null) {
        setField("T_Distrito", person.getDistrictOfResidence());
        setField("T_Conc", person.getDistrictSubdivisionOfResidence());
        setField("T_Freguesia", person.getParishOfResidence());
        setField("T_PaisResid", person.getCountryOfResidence().getName());
    }

    stamper.setFormFlattening(true);
    stamper.close();
    return output;
}