У меня немного странное задание.Мы собираемся закрыть довольно большое внутреннее решение и хотим выполнить одноразовый экспорт данных, которые в нем хранятся.
Решение генерирует отчеты в формате PDF.Эти PDF-файлы в основном содержат текст, но также содержат изображения.Изображения - это ссылки, которые при активации открывают браузер и указывают на полноразмерную версию изображения.
Поскольку мы собираемся закрыть базовую систему, внешние ссылки на полноразмерные изображениятакже перестанет работать.
По ряду странных причин мы имеем ограниченный контроль над самой генерацией отчетов, поэтому мы в основном ограничены выполнением последующей обработки отчетов.
План, который я разработал до сих пор, состоит в том, чтобы генерировать все необходимые отчеты из системы и обрабатывать их через iTextSharp.«Все», что я пытаюсь добиться - это обработать каждый PDF-файл и:
- Поиск внешних ссылок
- Загрузить полноразмерное изображение, на которое указывает ссылка, и прикрепитьэто в PDF как встроенный файл
- Удалите исходную внешнюю ссылку и замените ее ссылкой на соответствующий встроенный ресурс
Я не знаком с базовой структурой PDF-файловтак что я пытаюсь работать с iTextSharp.Однако до сих пор мне удалось (1) и (2) разобраться.Но я борюсь с (3):
Я в основном использую этот в качестве подтверждающего документа, но я не совсем достигаю своей цели.
Этомой код, где я обрабатываю каждую аннотациюКак примечание, я использую iTextSharp версии 5.5.13:
if (AnnotationDictionary.Get(PdfName.A) != null)
{
var annotActionObject = AnnotationDictionary.Get(PdfName.A);
var AnnotationAction = (PdfDictionary)(annotActionObject.IsIndirect() ? PdfReader.GetPdfObject(annotActionObject) : annotActionObject);
var type = AnnotationAction.Get(PdfName.S);
//Test if it is a URI action
if (type.Equals(PdfName.URI))
{
//Attach the downloaded file
PdfFileSpecification pfs = PdfFileSpecification.FileEmbedded(writer, embFile.Path, embFile.Description, null);
pfs.AddDescription(embFile.Description, false);
writer.AddFileAttachment(pfs);
//Removing old annotation
AnnotationAction.Remove(PdfName.A);
AnnotationDictionary.Remove(PdfName.A);
PdfDestination destination = new PdfDestination(PdfDestination.FIT);
destination.AddFirst(new PdfNumber(1));
var target = new PdfTargetDictionary(true);
target.EmbeddedFileName = embFile.Name;
PdfAction action = PdfAction.GotoEmbedded(null, target, destination, true);
AnnotationDictionary.Put(PdfName.D, action.Get(PdfName.D));
AnnotationAction.Put(PdfName.D, action.Get(PdfName.D));
}
}
Для некоторых это, скорее всего, довольно очевидно, почему он не работает:)
Сейчас все работаетпросто отлично, и он выплевывает PDF на другом конце.Как уже упоминалось, изображения в PDF больше не имеют активной ссылки, и все вложенные файлы встраиваются, как и ожидалось.Тем не менее, ссылка на встроенный ресурс не работает, и нигде нет указаний на это.
Все отзывы приветствуются.Спасибо.