В itext7, как изменить порядок отображения вложенных файлов по добавленному времени - PullRequest
0 голосов
/ 14 мая 2018

Я хочу изменить порядок файлов вложений в созданном pdf, вложения отображаются по умолчанию по имени, как изменить их, отображаемые по времени добавления?

это мой метод навесного оборудования:

@Override
public boolean attachFile(String src, String dest, List<SysItemfile> attachmentpaths) {
    try {
        PdfName name = new PdfName(src);
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
        List<String> descs = new ArrayList<String>();
        int i = 0;
        int j = 1;
        for (SysItemfile attachmentpath : attachmentpaths) {
            String filename = attachmentpath.getFilename();
            //test for the file name
            System.out.println("filename:"+filename);

            if (descs.contains(attachmentpath.getFilename())) {
                //get the file suffix 
                String suffix = filename.substring(filename.lastIndexOf(".") + 1);
                String realname = filename.substring(0,filename.lastIndexOf("."));
                filename = realname+i+"."+suffix;
                i++;
            } else {
                descs.add(attachmentpath.getFilename());
            }
            PdfFileSpec spec = PdfFileSpec.createEmbeddedFileSpec(pdfDoc, attachmentpath.getFileurl(),
                    filename, filename, name, name);
            // the first parameter is discription
            pdfDoc.addFileAttachment(filename, spec);

        }
        pdfDoc.close();
    } catch (IOException e) {
        logger.error("attachFile unsuccess!");
        logger.error(e.getLocalizedMessage());
        return false;
    }
    return true;
}

После этого, когда я добавляю вложение в свой pdf, невозможно изменить порядок отображения вложений.
что мне делать

1 Ответ

0 голосов
/ 17 мая 2018

Пока вы добавляете только вложения, стандарт PDF не позволяет предписывать порядок сортировки, который программа просмотра PDF использует при отображении вложений.

Если, с другой стороны, вы делаете PDF Переносимая коллекция (он же Портфолио), вы можете назначить схему (т.е. поля в подробном списке) и порядок сортировки (по одному или комбинации этих полей).

Вы можетедовольно легко превратить ваш PDF с вложениями в переносимую коллекцию с именем и датой изменения, отсортированными по последним, например:

try (   PdfReader reader = new PdfReader(...);
        PdfWriter writer = new PdfWriter(...);
        PdfDocument document = new PdfDocument(reader, writer)) {
    PdfCollection collection = new PdfCollection();
    document.getCatalog().setCollection(collection);
    PdfCollectionSchema schema = new PdfCollectionSchema();
    PdfCollectionField field = new PdfCollectionField("File Name", PdfCollectionField.FILENAME);
    field.setOrder(0);
    schema.addField("Name", field);
    field = new PdfCollectionField("Modification Date", PdfCollectionField.MODDATE);
    field.setOrder(1);
    schema.addField("Modified", field);
    collection.setSchema(schema);
    PdfCollectionSort sort = new PdfCollectionSort("Modified");
    collection.setSort(sort);
}

( SortAttachments test testAttachLikeGeologistedWithCollection)

Вы даже можете определить пользовательское поле, используя тип PdfCollectionField.TEXT, PdfCollectionField.DATE или PdfCollectionField.NUMBER, по которому производится сортировка.Вы можете установить значение такого настраиваемого поля для PdfFileSpec с помощью метода setCollectionItem.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...