Я успешно извлекая содержимое файла PDF Portfolio, используя код, подобный этому:Порядок встраиваемых файлов в файл портфолио PDF?
internal void ExtractAttachments(string file_name, string folderName) {
PdfDictionary documentNames = null;
PdfDictionary embeddedFiles = null;
PdfDictionary fileArray = null;
PdfDictionary file = null;
PRStream stream = null;
using (PdfReader reader = new PdfReader(file_name)) {
PdfDictionary catalog = reader.Catalog;
documentNames = (PdfDictionary)PdfReader.GetPdfObject(catalog.Get(PdfName.NAMES));
if (documentNames != null) {
embeddedFiles = (PdfDictionary)PdfReader.GetPdfObject(documentNames.Get(PdfName.EMBEDDEDFILES));
if (embeddedFiles != null) {
PdfArray filespecs = embeddedFiles.GetAsArray(PdfName.NAMES);
for (int i = 0; i < filespecs.Size; i++) {
i++;
fileArray = filespecs.GetAsDict(i);
file = fileArray.GetAsDict(PdfName.EF);
foreach (PdfName key in file.Keys) {
stream = (PRStream)PdfReader.GetPdfObject(file.GetAsIndirectObject(key));
string attachedFileName = fileArray.GetAsString(key).ToString();
byte[] attachedFileBytes = PdfReader.GetStreamBytes(stream);
System.IO.File.WriteAllBytes(Path.Combine(folderName, attachedFileName), attachedFileBytes);
}
}
}
}
}
}
Однако я заметил, что эти файлы компонентов извлекаются в порядке, иначе, чем они отображаются в оригинале PDF с использованием Adobe Reader XI. Порядок отображения этих файлов компонентов, по-видимому, представлен в свойстве «Index», который вы можете показать в пользовательском интерфейсе Reader, выбрав для просмотра файла Portfolio в режиме «Файлы» (в отличие от режима макета), щелкнув правой кнопкой мыши любой файл компонента и выбрав «Просмотр»> «Индекс» в контекстном меню.
Мой вопрос: как я могу найти это свойство «index» перед извлечением файлов из файла портфолио PDF?
По-видимому, я не могу редактировать теги по моему собственному вопросу; возможно, кто-то будет достаточно любезен, чтобы удалить тег [itext] и добавить тег [itextsharp]? – Windy
Теги itext и itextsharp являются синонимами, потому что оба они описывают точно тот же API, один реализованный на Java, а другой в C#. –
@AmedeeVanGasse Я понимаю это, но я понял, что, поскольку мой фрагмент кода - это C#, и я действительно ищу .NET-решение, я решил, что itextsharp будет более подходящим тегом для будущих поисковиков. Мне бы очень хотелось увидеть решения Java/iText! – Windy