Example usage for org.apache.poi.hpsf SummaryInformation getEditTime

List of usage examples for org.apache.poi.hpsf SummaryInformation getEditTime

Introduction

In this page you can find the example usage for org.apache.poi.hpsf SummaryInformation getEditTime.

Prototype

public long getEditTime() 

Source Link

Document

Returns the total time spent in editing the document (or 0 ).

Usage

From source file:com.flexive.extractor.FxSummaryInformation.java

License:Open Source License

/**
 * Constructor./*from  w  ww.jav a 2 s. c  o m*/
 *
 * @param si the summary information
 */
public FxSummaryInformation(SummaryInformation si) {
    author = si.getAuthor();
    applicationName = si.getApplicationName();
    charCount = si.getCharCount();
    comments = si.getComments();
    createdAt = si.getCreateDateTime();
    editTime = new Date(si.getEditTime());
    keywords = si.getKeywords();
    lastModifiedBy = si.getLastAuthor();
    lastPrintedAt = si.getLastPrinted();
    title = si.getTitle();
    lastModifiedAt = si.getLastSaveDateTime();
    pageCount = si.getPageCount();
    revNumber = si.getRevNumber();
    wordCount = si.getWordCount();
    encrypted = false;
}

From source file:com.openkm.util.metadata.MetadataExtractor.java

License:Open Source License

/**
 * Extract metadata from Office Word//from w w  w . j av a  2 s . c o m
 */
public static OfficeMetadata officeExtractor(InputStream is, String mimeType) throws IOException {
    POIFSFileSystem fs = new POIFSFileSystem(is);
    OfficeMetadata md = new OfficeMetadata();
    SummaryInformation si = null;

    if (MimeTypeConfig.MIME_MS_WORD.equals(mimeType)) {
        si = new WordExtractor(fs).getSummaryInformation();
    } else if (MimeTypeConfig.MIME_MS_EXCEL.equals(mimeType)) {
        si = new ExcelExtractor(fs).getSummaryInformation();
    } else if (MimeTypeConfig.MIME_MS_POWERPOINT.equals(mimeType)) {
        si = new PowerPointExtractor(fs).getSummaryInformation();
    }

    if (si != null) {
        md.setTitle(si.getTitle());
        md.setSubject(si.getSubject());
        md.setAuthor(si.getAuthor());
        md.setLastAuthor(si.getLastAuthor());
        md.setKeywords(si.getKeywords());
        md.setComments(si.getComments());
        md.setTemplate(si.getTemplate());
        md.setRevNumber(si.getRevNumber());
        md.setApplicationName(si.getApplicationName());
        md.setEditTime(si.getEditTime());
        md.setPageCount(si.getPageCount());
        md.setWordCount(si.getWordCount());
        md.setCharCount(si.getCharCount());
        md.setSecurity(si.getSecurity());

        Calendar createDateTime = Calendar.getInstance();
        createDateTime.setTime(si.getCreateDateTime());
        md.setCreateDateTime(createDateTime);

        Calendar lastSaveDateTime = Calendar.getInstance();
        lastSaveDateTime.setTime(si.getLastSaveDateTime());
        md.setLastSaveDateTime(lastSaveDateTime);

        Calendar lastPrinted = Calendar.getInstance();
        lastPrinted.setTime(si.getLastPrinted());
        md.setLastPrinted(lastPrinted);
    }

    log.info("officeExtractor: {}", md);
    return md;
}

From source file:com.pnf.plugin.ole.parser.StreamReader.java

License:Apache License

private List<INode> readSummaryInfoStream(ByteBuffer stream) {
    List<INode> roots = new LinkedList<>();
    String propType = "Property";

    try {//w ww . j  a  v  a  2s . co m
        SummaryInformation sInfo = new SummaryInformation(new PropertySet(stream.array()));

        StreamEntry cInfo = new StreamEntry("Creation Information");
        cInfo.addChild(new StreamEntry("Application Name", propType, sInfo.getApplicationName()));
        cInfo.addChild(new StreamEntry("Creation", "Time",
                sInfo.getCreateDateTime() != null ? sInfo.getCreateDateTime().toString() : null));
        cInfo.addChild(new StreamEntry("Author", propType, sInfo.getAuthor()));
        cInfo.addChild(new StreamEntry("Last Author", propType, sInfo.getLastAuthor()));
        cInfo.addChild(new StreamEntry("Template", propType, sInfo.getTemplate()));
        roots.add(cInfo);

        propType = "Time";
        StreamEntry timeInfo = new StreamEntry("Times");
        timeInfo.addChild(new StreamEntry("Total Edit Time", propType, String.valueOf(sInfo.getEditTime())));
        timeInfo.addChild(new StreamEntry("Last Saved", propType,
                sInfo.getLastSaveDateTime() != null ? sInfo.getLastSaveDateTime().toString() : null));
        timeInfo.addChild(new StreamEntry("Last Printed", propType,
                sInfo.getLastPrinted() != null ? sInfo.getLastPrinted().toString() : null));
        roots.add(timeInfo);

        propType = "Misc";
        StreamEntry misc = new StreamEntry("Miscellaneous");
        misc.addChild(new StreamEntry("OS Version", "int", String.valueOf(sInfo.getOSVersion())));
        misc.addChild(new StreamEntry("Revision Number", "int", sInfo.getRevNumber()));
        misc.addChild(new StreamEntry("Page Count", "int", String.valueOf(sInfo.getPageCount())));
        misc.addChild(new StreamEntry("Word Count", "int", String.valueOf(sInfo.getWordCount())));

        int secVal = sInfo.getSecurity();
        String security = null;

        if (!sInfo.wasNull()) { // Set description according to POI documentation
            switch (secVal) {
            case 0:
                security = "No security";
                break;
            case 1:
                security = "Password protected";
                break;
            case 2:
                security = "Read-only recommended";
                break;
            case 4:
                security = "Read-only enforced";
                break;
            case 8:
                security = "Locked for annotations";
                break;
            default:
                break;
            }

            security += " (code " + secVal + ")";
        } else {
            security = "Field not set";
        }

        misc.addChild(new StreamEntry("Document Security", "int", security));
        misc.addChild(new StreamEntry("Subject", propType, sInfo.getSubject()));
        misc.addChild(new StreamEntry("Keywords", propType, sInfo.getKeywords()));
        roots.add(misc);
    } catch (Throwable t) {
        addMessage("Attempted to read " + SUMM_INFO + " stream but no property sets were found.", null,
                Message.CORRUPT);
    }

    return roots;
}

From source file:lucee.runtime.poi.Excel.java

License:Open Source License

private void info(Struct sct, SummaryInformation summary) {
    if (summary == null)
        return;//from  w w w.j  a  va  2 s.  com
    set(sct, "AUTHOR", summary.getAuthor());
    set(sct, "APPLICATIONNAME", summary.getApplicationName());
    set(sct, "COMMENTS", summary.getComments());
    set(sct, "CREATIONDATE", summary.getCreateDateTime());
    set(sct, "KEYWORDS", summary.getKeywords());
    set(sct, "LASTAUTHOR", summary.getLastAuthor());
    set(sct, "LASTEDITED", summary.getEditTime());
    set(sct, "LASTSAVED", summary.getLastSaveDateTime());
    set(sct, "REVNUMBER", summary.getRevNumber());
    set(sct, "SUBJECT", summary.getSubject());
    set(sct, "TITLE", summary.getTitle());
    set(sct, "TEMPLATE", summary.getTemplate());
}

From source file:mj.ocraptor.extraction.tika.parser.microsoft.SummaryExtractor.java

License:Apache License

private void parse(SummaryInformation summary) {
    set(TikaCoreProperties.TITLE, summary.getTitle());
    set(TikaCoreProperties.CREATOR, summary.getAuthor());
    set(TikaCoreProperties.KEYWORDS, summary.getKeywords());
    // TODO Move to OO subject in Tika 2.0
    set(TikaCoreProperties.TRANSITION_SUBJECT_TO_OO_SUBJECT, summary.getSubject());
    set(TikaCoreProperties.MODIFIER, summary.getLastAuthor());
    set(TikaCoreProperties.COMMENTS, summary.getComments());
    set(OfficeOpenXMLExtended.TEMPLATE, summary.getTemplate());
    set(OfficeOpenXMLExtended.APPLICATION, summary.getApplicationName());
    set(OfficeOpenXMLCore.REVISION, summary.getRevNumber());
    set(TikaCoreProperties.CREATED, summary.getCreateDateTime());
    set(TikaCoreProperties.MODIFIED, summary.getLastSaveDateTime());
    set(TikaCoreProperties.PRINT_DATE, summary.getLastPrinted());
    set(Metadata.EDIT_TIME, summary.getEditTime());
    set(OfficeOpenXMLExtended.DOC_SECURITY, summary.getSecurity());

    // New style counts
    set(Office.WORD_COUNT, summary.getWordCount());
    set(Office.CHARACTER_COUNT, summary.getCharCount());
    set(Office.PAGE_COUNT, summary.getPageCount());
    if (summary.getPageCount() > 0) {
        metadata.set(PagedText.N_PAGES, summary.getPageCount());
    }//w  ww.ja v a2 s .  co m

    // Old style, Tika 1.0 properties
    // TODO Remove these in Tika 2.0
    set(Metadata.TEMPLATE, summary.getTemplate());
    set(Metadata.APPLICATION_NAME, summary.getApplicationName());
    set(Metadata.REVISION_NUMBER, summary.getRevNumber());
    set(Metadata.SECURITY, summary.getSecurity());
    set(MSOffice.WORD_COUNT, summary.getWordCount());
    set(MSOffice.CHARACTER_COUNT, summary.getCharCount());
    set(MSOffice.PAGE_COUNT, summary.getPageCount());
}

From source file:net.sf.mpxj.mpp.ProjectPropertiesReader.java

License:Open Source License

/**
 * The main entry point for processing project properties.
 * //from w w  w  .j  a v  a 2 s. c o  m
 * @param file parent project file
 * @param props properties data
 * @param rootDir Root of the POI file system.
 */
public void process(ProjectFile file, Props props, DirectoryEntry rootDir) throws MPXJException {
    try {
        //MPPUtility.fileDump("c:\\temp\\props.txt", props.toString().getBytes());
        ProjectProperties ph = file.getProjectProperties();
        ph.setStartDate(props.getTimestamp(Props.PROJECT_START_DATE));
        ph.setFinishDate(props.getTimestamp(Props.PROJECT_FINISH_DATE));
        ph.setScheduleFrom(ScheduleFrom.getInstance(1 - props.getShort(Props.SCHEDULE_FROM)));
        ph.setDefaultCalendarName(props.getUnicodeString(Props.DEFAULT_CALENDAR_NAME));
        ph.setDefaultStartTime(props.getTime(Props.START_TIME));
        ph.setDefaultEndTime(props.getTime(Props.END_TIME));
        ph.setStatusDate(props.getTimestamp(Props.STATUS_DATE));
        ph.setHyperlinkBase(props.getUnicodeString(Props.HYPERLINK_BASE));

        //ph.setDefaultDurationIsFixed();
        ph.setDefaultDurationUnits(MPPUtility.getDurationTimeUnits(props.getShort(Props.DURATION_UNITS)));
        ph.setMinutesPerDay(Integer.valueOf(props.getInt(Props.MINUTES_PER_DAY)));
        ph.setMinutesPerWeek(Integer.valueOf(props.getInt(Props.MINUTES_PER_WEEK)));
        ph.setDefaultOvertimeRate(new Rate(props.getDouble(Props.OVERTIME_RATE), TimeUnit.HOURS));
        ph.setDefaultStandardRate(new Rate(props.getDouble(Props.STANDARD_RATE), TimeUnit.HOURS));
        ph.setDefaultWorkUnits(MPPUtility.getWorkTimeUnits(props.getShort(Props.WORK_UNITS)));
        ph.setSplitInProgressTasks(props.getBoolean(Props.SPLIT_TASKS));
        ph.setUpdatingTaskStatusUpdatesResourceStatus(props.getBoolean(Props.TASK_UPDATES_RESOURCE));

        ph.setCurrencyDigits(Integer.valueOf(props.getShort(Props.CURRENCY_DIGITS)));
        ph.setCurrencySymbol(props.getUnicodeString(Props.CURRENCY_SYMBOL));
        ph.setCurrencyCode(props.getUnicodeString(Props.CURRENCY_CODE));
        //ph.setDecimalSeparator();
        ph.setSymbolPosition(MPPUtility.getSymbolPosition(props.getShort(Props.CURRENCY_PLACEMENT)));
        //ph.setThousandsSeparator();
        ph.setWeekStartDay(Day.getInstance(props.getShort(Props.WEEK_START_DAY) + 1));
        ph.setFiscalYearStartMonth(Integer.valueOf(props.getShort(Props.FISCAL_YEAR_START_MONTH)));
        ph.setFiscalYearStart(props.getShort(Props.FISCAL_YEAR_START) == 1);
        ph.setDaysPerMonth(Integer.valueOf(props.getShort(Props.DAYS_PER_MONTH)));
        ph.setEditableActualCosts(props.getBoolean(Props.EDITABLE_ACTUAL_COSTS));
        ph.setHonorConstraints(!props.getBoolean(Props.HONOR_CONSTRAINTS));

        PropertySet ps = new PropertySet(new DocumentInputStream(
                ((DocumentEntry) rootDir.getEntry(SummaryInformation.DEFAULT_STREAM_NAME))));
        SummaryInformation summaryInformation = new SummaryInformation(ps);
        ph.setProjectTitle(summaryInformation.getTitle());
        ph.setSubject(summaryInformation.getSubject());
        ph.setAuthor(summaryInformation.getAuthor());
        ph.setKeywords(summaryInformation.getKeywords());
        ph.setComments(summaryInformation.getComments());
        ph.setTemplate(summaryInformation.getTemplate());
        ph.setLastAuthor(summaryInformation.getLastAuthor());
        ph.setRevision(NumberHelper.parseInteger(summaryInformation.getRevNumber()));
        ph.setCreationDate(summaryInformation.getCreateDateTime());
        ph.setLastSaved(summaryInformation.getLastSaveDateTime());
        ph.setShortApplicationName(summaryInformation.getApplicationName());
        ph.setEditingTime(Integer.valueOf((int) summaryInformation.getEditTime()));
        ph.setLastPrinted(summaryInformation.getLastPrinted());

        ps = new PropertySet(new DocumentInputStream(
                ((DocumentEntry) rootDir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME))));
        ExtendedDocumentSummaryInformation documentSummaryInformation = new ExtendedDocumentSummaryInformation(
                ps);
        ph.setCategory(documentSummaryInformation.getCategory());
        ph.setPresentationFormat(documentSummaryInformation.getPresentationFormat());
        ph.setManager(documentSummaryInformation.getManager());
        ph.setCompany(documentSummaryInformation.getCompany());
        ph.setContentType(documentSummaryInformation.getContentType());
        ph.setContentStatus(documentSummaryInformation.getContentStatus());
        ph.setLanguage(documentSummaryInformation.getLanguage());
        ph.setDocumentVersion(documentSummaryInformation.getDocumentVersion());

        Map<String, Object> customPropertiesMap = new HashMap<String, Object>();
        CustomProperties customProperties = documentSummaryInformation.getCustomProperties();
        if (customProperties != null) {
            for (CustomProperty property : customProperties.values()) {
                customPropertiesMap.put(property.getName(), property.getValue());
            }
        }
        ph.setCustomProperties(customPropertiesMap);

        ph.setCalculateMultipleCriticalPaths(props.getBoolean(Props.CALCULATE_MULTIPLE_CRITICAL_PATHS));

        ph.setBaselineDate(props.getTimestamp(Props.BASELINE_DATE));
        ph.setBaselineDate(1, props.getTimestamp(Props.BASELINE1_DATE));
        ph.setBaselineDate(2, props.getTimestamp(Props.BASELINE2_DATE));
        ph.setBaselineDate(3, props.getTimestamp(Props.BASELINE3_DATE));
        ph.setBaselineDate(4, props.getTimestamp(Props.BASELINE4_DATE));
        ph.setBaselineDate(5, props.getTimestamp(Props.BASELINE5_DATE));
        ph.setBaselineDate(6, props.getTimestamp(Props.BASELINE6_DATE));
        ph.setBaselineDate(7, props.getTimestamp(Props.BASELINE7_DATE));
        ph.setBaselineDate(8, props.getTimestamp(Props.BASELINE8_DATE));
        ph.setBaselineDate(9, props.getTimestamp(Props.BASELINE9_DATE));
        ph.setBaselineDate(10, props.getTimestamp(Props.BASELINE10_DATE));
    }

    catch (Exception ex) {
        throw new MPXJException(MPXJException.READ_ERROR, ex);
    }
}

From source file:org.apache.tika.parser.microsoft.SummaryExtractor.java

License:Apache License

private void parse(SummaryInformation summary) {
    set(TikaCoreProperties.TITLE, summary.getTitle());
    addMulti(metadata, TikaCoreProperties.CREATOR, summary.getAuthor());
    set(TikaCoreProperties.KEYWORDS, summary.getKeywords());
    // TODO Move to OO subject in Tika 2.0
    set(TikaCoreProperties.TRANSITION_SUBJECT_TO_OO_SUBJECT, summary.getSubject());
    set(TikaCoreProperties.MODIFIER, summary.getLastAuthor());
    set(TikaCoreProperties.COMMENTS, summary.getComments());
    set(OfficeOpenXMLExtended.TEMPLATE, summary.getTemplate());
    set(OfficeOpenXMLExtended.APPLICATION, summary.getApplicationName());
    set(OfficeOpenXMLCore.REVISION, summary.getRevNumber());
    set(TikaCoreProperties.CREATED, summary.getCreateDateTime());
    set(TikaCoreProperties.MODIFIED, summary.getLastSaveDateTime());
    set(TikaCoreProperties.PRINT_DATE, summary.getLastPrinted());
    set(Metadata.EDIT_TIME, summary.getEditTime());
    set(OfficeOpenXMLExtended.DOC_SECURITY, summary.getSecurity());

    // New style counts
    set(Office.WORD_COUNT, summary.getWordCount());
    set(Office.CHARACTER_COUNT, summary.getCharCount());
    set(Office.PAGE_COUNT, summary.getPageCount());
    if (summary.getPageCount() > 0) {
        metadata.set(PagedText.N_PAGES, summary.getPageCount());
    }//  www .  ja v a2  s  .com

    // Old style, Tika 1.0 properties
    // TODO Remove these in Tika 2.0
    set(Metadata.TEMPLATE, summary.getTemplate());
    set(Metadata.APPLICATION_NAME, summary.getApplicationName());
    set(Metadata.REVISION_NUMBER, summary.getRevNumber());
    set(Metadata.SECURITY, summary.getSecurity());
    set(MSOffice.WORD_COUNT, summary.getWordCount());
    set(MSOffice.CHARACTER_COUNT, summary.getCharCount());
    set(MSOffice.PAGE_COUNT, summary.getPageCount());
}

From source file:org.modeshape.sequencer.msoffice.MSOfficeMetadata.java

License:Apache License

public void setSummaryInformation(SummaryInformation si) {
    title = si.getTitle();//from   w w w  . ja  v  a2s  .  c o m
    subject = si.getSubject();
    author = si.getAuthor();
    keywords = si.getKeywords();
    comment = si.getComments();
    template = si.getTemplate();
    lastSaved = si.getLastSaveDateTime();
    revision = si.getRevNumber();
    totalEditingTime = si.getEditTime();
    lastPrinted = si.getLastPrinted();
    created = si.getCreateDateTime();
    pages = si.getPageCount();
    words = si.getWordCount();
    characters = si.getCharCount();
    creatingApplication = si.getApplicationName();
    thumbnail = si.getThumbnail();
}

From source file:org.paxle.parser.msoffice.impl.AMsOfficeParser.java

License:Open Source License

protected void extractMetadata(POIFSFileSystem fs, IParserDocument parserDoc) throws ParserException {
    DocumentInputStream docIn = null;//from w w  w  . j  a  v a2  s . c o  m
    try {
        // read the summary info
        DirectoryEntry dir = fs.getRoot();
        DocumentEntry siEntry = (DocumentEntry) dir.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
        docIn = new DocumentInputStream(siEntry);

        // get properties
        PropertySet props = new PropertySet(docIn);
        docIn.close();

        // extract info
        SummaryInformation summary = new SummaryInformation(props);

        // doc title
        String title = summary.getTitle();
        if (title != null && title.length() > 0) {
            parserDoc.setTitle(title);
            this.logger.debug(String.format("Document title is: %s", title));
        }

        // doc author
        String author = summary.getAuthor();
        if (author != null && author.length() > 0) {
            parserDoc.setAuthor(author);
            this.logger.debug(String.format("Document author is: %s", author));
        }

        // subject
        String subject = summary.getSubject();
        if (subject != null && subject.length() > 0) {
            parserDoc.setSummary(subject);
            this.logger.debug(String.format("Document summary is: %s", subject));
        }

        // doc keywords
        String keywords = summary.getKeywords();
        if (keywords != null && keywords.length() > 0) {
            String[] keywordArray = keywords.split("[,;\\s]");
            if (keywordArray != null && keywordArray.length > 0) {
                ArrayList<String> keywordsList = new ArrayList<String>(keywordArray.length);
                for (String keyword : keywordArray) {
                    keyword = keyword.trim();
                    if (keyword.length() > 0) {
                        keywordsList.add(keyword);
                    }
                }
                parserDoc.setKeywords(keywordsList);
                this.logger.debug(String.format("Document keywords are: %s", keywordsList.toString()));
            }
        }

        // last modification date
        if (summary.getEditTime() > 0) {
            Date editTime = new Date(summary.getEditTime());
            parserDoc.setLastChanged(editTime);
            this.logger.debug(String.format("Document last-changed-date is: %s", editTime.toString()));
        } else if (summary.getCreateDateTime() != null) {
            Date creationDate = summary.getCreateDateTime();
            parserDoc.setLastChanged(creationDate);
            this.logger.debug(String.format("Document creation-date is: %s", creationDate.toString()));
        } else if (summary.getLastSaveDateTime() != null) {
            Date lastSaveDate = summary.getLastSaveDateTime();
            parserDoc.setLastChanged(lastSaveDate);
            this.logger.debug(String.format("Document last-save-date is: %s", lastSaveDate.toString()));
        }

    } catch (Exception e) {
        String errorMsg = String.format("Unexpected '%s' while extracting metadata: %s", e.getClass().getName(),
                e.getMessage());
        logger.error(errorMsg, e);
        throw new ParserException(errorMsg);
    } finally {
        if (docIn != null)
            try {
                docIn.close();
            } catch (Exception e) {
                /* ignore this */}
    }
}

From source file:poi.poifs.poibrowser.PropertySetDescriptorRenderer.java

License:Apache License

public Component getTreeCellRendererComponent(final JTree tree, final Object value, final boolean selected,
        final boolean expanded, final boolean leaf, final int row, final boolean hasFocus) {
    final PropertySetDescriptor d = (PropertySetDescriptor) ((DefaultMutableTreeNode) value).getUserObject();
    final PropertySet ps = d.getPropertySet();
    final JPanel p = new JPanel();
    final JTextArea text = new JTextArea();
    text.setBackground(new Color(200, 255, 200));
    text.setFont(new Font("Monospaced", Font.PLAIN, 10));
    text.append(renderAsString(d));/*  w  w  w  . j av a2  s  . c om*/
    text.append("\nByte order: " + Codec.hexEncode((short) ps.getByteOrder()));
    text.append("\nFormat: " + Codec.hexEncode((short) ps.getFormat()));
    text.append("\nOS version: " + Codec.hexEncode(ps.getOSVersion()));
    text.append("\nClass ID: " + Codec.hexEncode(ps.getClassID()));
    text.append("\nSection count: " + ps.getSectionCount());
    text.append(sectionsToString(ps.getSections()));
    p.add(text);

    if (ps instanceof SummaryInformation) {
        /* Use the convenience methods. */
        final SummaryInformation si = (SummaryInformation) ps;
        text.append("\n");
        text.append("\nTitle:               " + si.getTitle());
        text.append("\nSubject:             " + si.getSubject());
        text.append("\nAuthor:              " + si.getAuthor());
        text.append("\nKeywords:            " + si.getKeywords());
        text.append("\nComments:            " + si.getComments());
        text.append("\nTemplate:            " + si.getTemplate());
        text.append("\nLast Author:         " + si.getLastAuthor());
        text.append("\nRev. Number:         " + si.getRevNumber());
        text.append("\nEdit Time:           " + si.getEditTime());
        text.append("\nLast Printed:        " + si.getLastPrinted());
        text.append("\nCreate Date/Time:    " + si.getCreateDateTime());
        text.append("\nLast Save Date/Time: " + si.getLastSaveDateTime());
        text.append("\nPage Count:          " + si.getPageCount());
        text.append("\nWord Count:          " + si.getWordCount());
        text.append("\nChar Count:          " + si.getCharCount());
        // text.append("\nThumbnail:           " + si.getThumbnail());
        text.append("\nApplication Name:    " + si.getApplicationName());
        text.append("\nSecurity:            " + si.getSecurity());
    }

    if (selected)
        Util.invert(text);
    return p;
}