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

Вопрос или проблема

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

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

С помощью 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 файлах.

Код ниже показывает, как построить структуру Search в вашем примере:

// Создать новый документ.
PdfFixedDocument document = new PdfFixedDocument();
// Или загрузить существующий документ.
// PdfFixedDocument document = new PdfFixedDocument("sample.pdf");

// Заполнить информацию о документе.
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";

// Создать структуру /Search
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 Inspector

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

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

Код опубликован здесь: https://stackoverflow.com/questions/51127552/how-to-associate-search-catalog-file-pdx-with-pdf-document/51177573#51177573

.

Ответ или решение

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

Существует несколько подходящих библиотек, которые могут помочь вам в этой задаче:

  1. PDFNet: Эта библиотека предоставляет функции для редактирования и вставки PDF, и она поддерживает манипуляцию COS-структурами документа. Примеры и документацию можно найти по следующим ссылкам:

    PDFNet также предлагает версии для мобильных устройств через Universal Windows Platform и Xamarin:

  2. XFINIUM.PDF: Эта библиотека предлагает API для работы с COS, что позволяет создавать пользовательские структуры в PDF-документах. Пример кода для создания структуры поиска в документе:

// Создание нового документа.
PdfFixedDocument document = new PdfFixedDocument();
// Или загрузка существующего документа.
// PdfFixedDocument document = new PdfFixedDocument("sample.pdf");

// Заполнение информации о документе.
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";

// Создание структуры /Search
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");

Изображение полученной структуры можно найти здесь. Обратите внимание: я являюсь сотрудником компании, которая разрабатывает эту библиотеку.

  1. PdfSharp: Это еще один вариант для .NET программирования. Один из пользователей смог решить задачу, используя эту библиотеку. Подробности можно посмотреть на StackOverflow.

Эти библиотеки предоставляют необходимые инструменты для создания и манипуляции PDF-документами на низком уровне, что позволит вам интегрировать PDX файл каталога поиска в ваш PDF-документ.

Оцените материал
Добавить комментарий

Капча загружается...