Как добавить оглавление на титульную страницу в itext7 с помощью С#?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как добавить оглавление на титульную страницу в itext7 с помощью С#?

Сообщение Anonymous »


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

Я генерирую титульную страницу, включая Cell tocArea в GenerateTitlePage(), заполняю список toc в GenerateContentPages()< /code>, а затем попытайтесь заполнить tocArea в FillTOC().
пространство имен ProductTest { внутренний класс ProductDocument { // переменные класса опущены List toc = new List(); публичная недействительность CreatePdf() { // общая настройка строка имя файла = "ProductTest.pdf"; PdfDocument bgPdf = новый PdfDocument (новый PdfReader (templateLocation)); PdfPage bgPage = bgPdf.GetPage(1); Размер страницыРазмер страницы = Размер страницы.A4.Поворот(); PdfDocument pdf = новый PdfDocument (новый PdfWriter (имя файла)); pdf.AddEventHandler(PdfDocumentEvent.END_PAGE, новый HeaderFooterEventHandler(pdf)); Документ док = новый документ (pdf, pageSize, false); Средство рендеринга DocumentRenderer = новый DocumentRenderer (doc, false); doc.SetRenderer(рендерер); doc.SetMargins(40, 6, 30, 6); Ячейка tocArea = новая ячейка().SetBorder(null); CreateTitlePage(doc, pageSize, bgPage, tocArea); CreateContentPages(doc, pageSize); FillTOC (док, tocArea); бгПдф.Закрыть(); документ.Закрыть(); Process.Start (новый ProcessStartInfo (имя файла) { UseShellExecute = true }); } Private void CreateContentPages (Document doc, PageSize pageSize) { PDFDocument pdf = doc.GetPdfDocument(); Страница PdfPage = pdf.AddNewPage(pageSize); // устанавливаем столбцы плавающее горизонтальное смещение = 20; плавать по вертикалиOffset = 60; плавающий зазор = 50; float columnsWidth = (pageSize.GetWidth() - 2 * HorizontalOffset - пробел) / 2; float columnsHeight = pageSize.GetHeight() - 2 *вертикальноеСмещение; Столбцы Rectangle[] = новый Rectangle[] { новый прямоугольник (horizontalOffset,verticalOffset,columnWidth,columnHeight), новый прямоугольник (horizontalOffset + ColumnWidth + пробел,вертикальныйOffset, ColumnWidth, ColumnHeight) }; doc.SetRenderer(новый ColumnDocumentRenderer(doc, false, columns)); doc.Add(new AreaBreak(AreaBreakType.LAST_PAGE)); // Здесь создается контент и заполняется его содержание // опущено для краткости } Private void CreateTitlePage (Document doc, PageSize pageSize, PdfPage bgPage, Cell tocArea) { PDFDocument pdf = doc.GetPdfDocument(); Страница PdfPage = pdf.AddNewPage(pageSize); Прямоугольник orig = bgPage.GetPageSizeWithRotation(); doc.SetRenderer(новый DocumentRenderer(doc)); doc.Add(new AreaBreak(AreaBreakType.LAST_PAGE)); // копируем шаблон фона PdfCanvas холст = новый PdfCanvas (страница); TransformationMatrix AffineTransform = AffineTransform.GetScaleInstance(page.GetPageSize().GetWidth() / orig.GetWidth(), page.GetPageSize().GetHeight() / orig.GetHeight()); холст.ConcatMatrix(transformationMatrix); PdfFormXObject pageCopy = bgPage.CopyAsFormXObject(pdf); холст.AddXObjectAt(pageCopy, 0, 0); // макет титульного листа плавающий infBoxWidth = 184; float titleContentWidth = page.GetPageSize().GetWidth() - doc.GetLeftMargin() - doc.GetRightMargin() - infBoxWidth; Макет таблицы = новая таблица (новый float [] { titleContentWidth, infBoxWidth }); макет.SetWidth(UnitValue.CreatePercentValue(100)) .AddCell(новая ячейка()) .AddCell(новая ячейка()) .SetMargins(24, 0, 0, 0); // левый столбец // опущено для краткости headingText = "Содержание/Приложение"; контур = CreateOutline (контур, PDF, заголовокТекст, заголовокТекст); leftColumn.Add(новый абзац(headingText).AddStyle(heading2).SetDestination(headingText)); // Я добавляю сюда свою ячейку-заполнитель Таблица таблицы = новая таблица (1).SetWidth(UnitValue.CreatePercentValue(100)).SetMarginLeft(20).AddCell(tocArea); leftColumn.Add(таблица); // информационное окно в правом столбце // опущено для краткости документ.Добавить(макет); } // Здесь я пытаюсь заполнить оглавление данными. Я не получаю никаких ошибок, ячейка просто пуста в обработанном PDF-файле. частная пустота FillTOC (документ документа, ячейка tocArea) { // создаем оглавление интервал счетчика = 0; List tabStops = новый List(); DottedLine dottedLine = новая DottedLine(1, 3); dottedLine.SetColor(ColorConstants.BLUE); tabStops.Add(new TabStop(600, TabAlignment.RIGHT, dottedLine)); foreach (KeyValuePair запись в оглавлении) { KeyValuePair text = вход.Значение; Абзац абзаца = новый абзац() .SetFont(ариал) .SetFontSize(9) .SetFontColor(ColorConstants.BLUE) .SetTextAlignment(TextAlignment.JUSTIFIED) .AddTabStops(tabStops) .Add($"{++counter:d2} " + text.Key) .Добавить(новая вкладка()) .Добавить(текст.Значение.ToString()) .SetAction(PdfAction.CreateGoTo(entry.Key)); tocArea.Add(абзац); } } //добавляем закладки в документ частный PdfOutline CreateOutline (структура PdfOutline, PdfDocument pdf, заголовок строки, имя строки) { // опущено для краткости } // добавляет заголовок и номер страницы на страницы частный класс HeaderFooterEventHandler: IEventHandler { // опущено для краткости } } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как добавить содержимое на титульную страницу в itext7 с помощью С#?
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как добавить кнопки в оглавление (TOC) или под оглавление в Docusaurus?
    Anonymous » » в форуме Javascript
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Оглавление Python ReportLab Проблема с нумерацией страниц
    Anonymous » » в форуме Python
    1 Ответы
    40 Просмотры
    Последнее сообщение 111
  • Перебирать оглавление в docx, используя python-docx
    Anonymous » » в форуме Python
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Как создать оглавление с метаданными для набора страниц в mkdocs?
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»