Нажатие кнопки ASP.NET вызывается после загрузки главной страницы при попытке создать сеанс

В iText5 элементы и информация об их позиции / размере были немного смешаны вместе, что позволило вам называть calculateWidths на элементе PdfPTable.

В iText7 эта функция отделена, который позволяет различную гибкость для элементов рендеринга / компоновки.

Таким образом, элементы модели, примером которых является экземпляр Table, ничего не знают об их позиции или размере. Вызов table.getHeight приводит к null, потому что у table не было ранее установленного свойства HEIGHT.

Чтобы вычислить высоту таблицы, нужно было бы использовать функциональность рендеринга.

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

PdfDocument pdfDoc = ...
Document doc = ...

Table table = new Table(2)
            .addCell(new Cell().add(new Paragraph("cell 1, 1")))
            .addCell(new Cell().add(new Paragraph("cell 1, 2")));
LayoutResult result = table.createRendererSubTree().setParent(doc.getRenderer()).layout(
            new LayoutContext(new LayoutArea(1, new Rectangle(0, 0, 400, 1e4f))));

System.out.println(result.getOccupiedArea().getBBox().getHeight());

Вышеприведенный код печатает 22.982422O для меня, но результаты могут меняться в зависимости от конфигурации и свойств элементов.

Я хотел бы указать две важные части кода:

  1. Пропускаем 1e4f как высота LayoutArea, учитывая, что этого будет достаточно, чтобы поместить всю таблицу. Обратите внимание: если таблица не может быть помещена на эту высоту, результат никогда не будет превышать эту заданную высоту, и, следовательно, она не будет корректной для вашей usecase (знайте общую высоту таблицы). Поэтому обязательно пропустите высоту, которая будет достаточной для размещения всей таблицы.
  2. .setParent(doc.getRenderer()) часть важна здесь и используется для извлечения наследуемых свойств. Обратите внимание, что мы не задали много свойств для элемента table, даже шрифта, но эта информация необходима, чтобы знать область, в которой этот элемент будет занимать. Таким образом, эта информация будет наследоваться от родительской цепочки во время layout. Вы можете проверить это, изменив шрифт документа: document.setFont(newFont); или размер шрифта: document.setFontSize(24); и просмотрев результирующее изменение высоты
0
задан John Doe 26 March 2019 в 19:59
поделиться

2 ответа

Вы можете просто использовать FindControl на Master

LinkButton lb = Master.FindControl("LinkButton1") as LinkButton;
lb.Text = "LinkButton Master";
0
ответ дан VDWWD 26 March 2019 в 19:59
поделиться

Вы можете попытаться переместить код в событии Page_Load главной страницы в событие, которое вызывается после события button_click. Таким образом, изменения в сеансе происходят до обновления главной страницы. Вы можете попробовать событие Page_LoadComplete. Пожалуйста, проверьте документацию «жизненного цикла страницы asp.net» для последовательности, в которой вызываются различные события страницы.

0
ответ дан Volkmar Rigo 26 March 2019 в 19:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: