Как добавить оглавление на титульную страницу в itext7 с помощью С#? ⇐ C#
Как добавить оглавление на титульную страницу в itext7 с помощью С#?
Я хочу вставить оглавление в Ячейку на титульной странице. Сначала мне нужно сгенерировать контент, прежде чем я узнаю, каковы данные оглавления. Но когда я добавляю содержимое в ячейку, в обработанном 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 { // опущено для краткости } } }
Я хочу вставить оглавление в Ячейку на титульной странице. Сначала мне нужно сгенерировать контент, прежде чем я узнаю, каковы данные оглавления. Но когда я добавляю содержимое в ячейку, в обработанном 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 { // опущено для краткости } } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как добавить кнопки в оглавление (TOC) или под оглавление в Docusaurus?
Anonymous » » в форуме Javascript - 0 Ответы
- 37 Просмотры
-
Последнее сообщение Anonymous
-