Библиотека PDF для изменения низкоуровневых объектов COS

Я хотел бы связать файл каталога поиска PDX с документом PDF. По-видимому, в настоящее время нет библиотеки, которая поддерживает это из коробки, поэтому мне нужно /Searchнапрямую манипулировать записью в документе. Я почти ничего не знаю о стандарте PDF, поэтому библиотека, к которой я могу получить доступ из кода .NET, которая инкапсулирует для меня большинство деталей, была бы отличной.

Вот как выглядит структура:PDF-структура

Ответы (3)

С PDFNet вы можете легко вставлять/редактировать PDF-файлы так, как вы ищете.

https://www.pdftron.com/documentation/samples/cs/SDFTest?platforms=windows https://www.pdftron.com/pdf-sdk/windows-library

Также доступны версии Universal Windows Platform и Xamarin, если вы хотите сделать это на мобильном устройстве.

https://www.pdftron.com/documentation/uwp/guides https://www.pdftron.com/documentation/xamarin/guides

Библиотека XFINIUM.PDF включает COS API, который позволяет создавать пользовательские структуры в файлах PDF.

В приведенном ниже коде показано, как построить структуру поиска в вашем образце:

// Create a new document.
PdfFixedDocument document = new PdfFixedDocument();
// Or load an existing document.
// PdfFixedDocument document = new PdfFixedDocument("sample.pdf");

// Fill the document information.
document.DocumentInformation = new PdfDocumentInformation();
document.DocumentInformation.Author = "XFINIUM Software";
document.DocumentInformation.CreationDate = DateTime.Now;
document.DocumentInformation.ModifyDate = DateTime.Now;
document.DocumentInformation.Creator = "XFINIUM.PDF COS objects sample";
document.DocumentInformation.Producer = "XFINIUM.PDF Toolkit";
document.DocumentInformation.Title = "XFINIUM.PDF COS objects sample";
document.DocumentInformation.Subject = "XFINIUM.PDF sample code";
document.DocumentInformation.Keywords = "xfinium.pdf, pdf, sample";

// Create the /Search structure
PdfCosDictionaryContainer cosSearchDictionary = new PdfCosDictionaryContainer();
document.CosDictionary["/Search"] = cosSearchDictionary;

PdfCosArray indexesArray = new PdfCosArray();
cosSearchDictionary["/Indexes"] = indexesArray;

PdfCosDictionaryContainer indexDefinitionDictionary = new PdfCosDictionaryContainer();
indexesArray.Add(indexDefinitionDictionary);

indexDefinitionDictionary["/Name"] = new PdfCosName("/PDX");

PdfCosDictionaryContainer indexFileDictionary = new PdfCosDictionaryContainer();
indexDefinitionDictionary["/Index"] = indexFileDictionary;

indexFileDictionary["/Type"] = new PdfCosName("/Filespec");
indexFileDictionary["/F"] = new PdfCosString("c:\\Folder1\\Folder2\\index.pdx");

PdfPage page = document.Pages.Add();

document.Save("D:\\Temp\\Sample_SearchIndex.pdf");

Структуру /Search можно увидеть на изображении ниже:

XFINIUM.PDF Инспектор

Отказ от ответственности: я работаю в компании, которая разрабатывает библиотеку.

Извините, не видел ответов раньше. Я смог решить эту проблему с помощью PdfSharp .

Код размещен здесь: