Добавление нескольких закладок с использованием ItextSharp - PullRequest
0 голосов
/ 27 октября 2019

Я хочу добавить несколько закладок на основе штрих-кода в формате PDF. Считывание штрих-кода хорошо. С этим проблем нет. Но, пытаясь добавить закладки, я провел небольшое исследование и нашел ответы ниже.

Добавьте закладку на определенную страницу с помощью iTextSharp 4.1.6

Добавьте закладки страницы всуществующий PDF с использованием iTextSharp с использованием кода C #

Эти коды довольно полезны. Но проблема в том, что эти коды - всего лишь одна закладка. Я не могу добавить несколько закладок в цикле. Вы можете найти соответствующий код, который я сделал для нескольких закладок ниже

Dictionary<string, object> bm = new Dictionary<string, object>();
List<Dictionary<string, object>> bookmarks = new List<Dictionary<string, object>>();

foreach (var barcode in barcodes)
{

string title = barcode.Text.Substring(11, barcode.Text.Length - 11);
bm.Add("Title", title);
bm.Add("Action", "GoTo");
bm.Add("Page", barcode.Page.ToString() + " XYZ 0 0 0");

}

PdfStamper stamp = new PdfStamper(source, output);

stamp.Outlines = bookmarks;

stamp.Close();

проблема здесь PdfStamper.Outline (stamp.Outlines) с использованием коллекции List<Dictionary<string, object>>. Но ключевым значением словаря является «строка». Поэтому я не могу добавить закладки в список, потому что значение ключа не может повторяться. Возникает исключение: «System.ArgumentException:« Элемент с таким же ключом уже добавлен ».

Но я не могу найти никаких других документов для имплантации закладки в pdf с помощью itextsharp.

Я уверен, что этот код работает только для закладки. Вы можете найти пример ниже.

Dictionary<string, object> bm = new Dictionary<string, object>();
List<Dictionary<string, object>> bookmarks = new List<Dictionary<string, object>>();

//foreach (var barcode in barcodes)
//{

string title = barcodes[0].Text.Substring(11, barcodes[0].Text.Length - 11);
bm.Add("Title", title);
bm.Add("Action", "GoTo");
bm.Add("Page", barcodes[0].Page.ToString() + " XYZ 0 0 0");

//}

PdfStamper stamp = new PdfStamper(source, output);

stamp.Outlines = bookmarks;

stamp.Close();

Я думаю, что нет никакого способа с этим кодом для добавления нескольких закладок из-за природы штампа. Есть ли другой способ реализации нескольких закладок в PDF с помощью itextsharp или вы знаете, как исправить этот код?

1 Ответ

0 голосов
/ 27 октября 2019

Так что я упустил легкий момент.

Я определяю Dictionary<string, object> bm = new Dictionary<string, object>(); в цикле, и я пропустил код. Рабочий код ниже


List<Dictionary<string, object>> bookmarks = new List<Dictionary<string, object>>();

foreach (var barcode in barcodes)
{
Dictionary<string, object> bm = new Dictionary<string, object>();
string title = barcode.Text.Substring(11, barcode.Text.Length - 11);
bm.Add("Title", title);
bm.Add("Action", "GoTo");
bm.Add("Page", barcode.Page.ToString() + " XYZ 0 0 0");
bookmarks.Add(bm);
}

PdfStamper stamp = new PdfStamper(source, output);

stamp.Outlines = bookmarks;

stamp.Close();
...