在itext7中,如何按添加时间更改附件显示顺序
In itext7,how to change attach files display order by added time
我想更改我创建的 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 时,无法更改附件显示的顺序。
我该怎么办?
只要您只添加附件,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 测试 testAttachLikeGeologistedWithCollection
)
实际上,您甚至可以使用 PdfCollectionField.TEXT
、PdfCollectionField.DATE
或 PdfCollectionField.NUMBER
类型来定义自定义字段,并将其作为排序依据。您可以通过 setCollectionItem
方法在 PdfFileSpec
上设置此类自定义字段的值。
我想更改我创建的 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 时,无法更改附件显示的顺序。
我该怎么办?
只要您只添加附件,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 测试 testAttachLikeGeologistedWithCollection
)
实际上,您甚至可以使用 PdfCollectionField.TEXT
、PdfCollectionField.DATE
或 PdfCollectionField.NUMBER
类型来定义自定义字段,并将其作为排序依据。您可以通过 setCollectionItem
方法在 PdfFileSpec
上设置此类自定义字段的值。