В настоящее время я пытаюсь добавить ссылку в верхний колонтитул PDF-документа, однако библиотека выдает следующую ошибку System.IndexOutOfRangeException: 'Запрошенная страница № 0 выходит за границы.' при добавленииссылка на заголовок с использованием библиотеки IText7 .
Добавление одного и того же объекта в тело страницы работает нормально.Окружение кода попыткой перехвата приводит к следующему: ![Image of pdf output](https://i.stack.imgur.com/eCEX0.png)
Я не смог найти в Интернете никаких примеров кода, касающихся этой проблемы, в IText7 , решения в ITextSharp больше не применимы.
Мой вопрос: как добавить ссылку на внешний сайт в заголовок PDF?Является ли текущее поведение ошибкой в библиотеке или предназначено?
Я использую следующий код:
Основной метод, загрузка HTML, инициализация документа и добавление объекта взаголовок и главная страница.
public void Convert()
{
// Initialize template
IList<IElement> templateElements = HtmlConverter.ConvertToElements(File.ReadAllText("FooterTest.html"));
// Initialize document
PdfWriter pdfWriter = new PdfWriter("Output.pdf");
PdfDocument pdfDocument = new PdfDocument(pdfWriter);
Document document = new Document(pdfDocument);
document.SetTopMargin(100);
// Adding the header object to the header and the main body
pdfDocument.AddEventHandler(PdfDocumentEvent.START_PAGE, new PdfHeader((IBlockElement)templateElements[0], document));
document.Add((IBlockElement)templateElements[0]);
document.Close();
}
Класс обработчика событий, отвечающий за добавление объекта в заголовок.Код дает вышеупомянутую ошибку в try-catch
public class PdfHeader : IEventHandler
{
private readonly IBlockElement footer;
private readonly Document doc;
public PdfHeader(IBlockElement footer, Document doc)
{
this.doc = doc;
this.footer = footer;
}
public void HandleEvent(Event headerEvent)
{
PdfDocumentEvent docEvent = (PdfDocumentEvent)headerEvent;
PdfDocument pdf = docEvent.GetDocument();
PdfPage page = docEvent.GetPage();
Rectangle pageSize = page.GetPageSize();
PdfCanvas pdfCanvas = new PdfCanvas(page.GetLastContentStream(), page.GetResources(), pdf);
Rectangle rectangle = new Rectangle(
pdf.GetDefaultPageSize().GetX() + doc.GetLeftMargin(),
pdf.GetDefaultPageSize().GetTop() - 80,
page.GetPageSize().GetWidth() - doc.GetLeftMargin() - doc.GetRightMargin(),
50);
//Below is the code where the error is produced.
try
{
new Canvas(pdfCanvas, pdf, rectangle).Add(footer);
}
catch { }
}
}
HTML-файл, содержащий объект заголовка (FooterTest.html, загруженный в метод Convert ())
<html>
<body>
<table>
<tr>
<td>
This is a some text not containing a link.
</td>
</tr>
<tr>
<td>
This text contains a link to <a href="https://www.google.com">Google</a> to demonstrate the issue.
</td>
</tr>
</table>
</body>
</html>
Это мой первый вопрос о переполнении стека, поэтому любые отзывы о самом вопросе также приветствуются.