Как я могу подсчитать разрывы страниц CSS для печатного HTML?

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

Моя проблема заключается в следующем: я хотел бы пронумеровать страницы раздела более крупного динамического HTML в формате «страница x из n». Однако, если я позволю принтеру сделать это, он увидит документ (правильно) как единый документ и пронумерует весь документ.

Можно ли каким-либо образом определить, когда произойдет разрыв страницы CSS, чтобы я мог подсчитать их для раздела перед печатью и ввести свою собственную нумерацию (например, элемент HTML) для разделов в длинном сингле документ?

Похоже, у меня должен быть способ сделать это, но за последние несколько дней решение ускользнуло от меня, поэтому я подумал, что пингую Stackoverflow.

ОБНОВЛЕНИЕ: Что я в итоге сделал:

Я принял ответ Кристофера, потому что, хотя я не использовал его в точности, он указал мне правильное направление.

В итоге я провел вычисления с содержимым с помощью jQuery, исходя из размера бумаги, на которой печатается, полей, размера шрифта и т. Д. а затем добавление элементов для разрывов страниц с CSS для разрыва страниц. Я отслеживаю, сколько div'ов разрыва страницы добавлено, а затем обновляю html-информацию «страница x из n» в каждом div разрыва страницы после обработки всего содержимого. Это позволило мне избежать необходимости знать, сколько страниц будет в начале (спасибо jQuery .each).

Очевидно, с этим решением есть некоторые проблемы:

  1. Элементы "page x of n" не отображаются как настоящие нижние колонтитулы, а скорее внизу контента на каждой странице. В моей ситуации это приемлемый компромисс.

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

  3. Расчеты зависят от предположений о размере отпечатанной бумаги, полях, размере шрифта и т. Д. В моей ситуации, когда я работаю во внутренней сети, это снова приемлемый компромисс, потому что я могу контролировать эти параметры. Дополнительный код может быть добавлен для обработки некоторых изменений в будущем (например, размер бумаги).

Это решение, хотя и не идеальное и немного «хрупкое», решает мою проблему, позволяет мне печатать несколько отчетов одновременно, избегая использования принтера спулинг тайм-аутов, отслеживает и перезапускает нумерацию страниц и избегает создания PDF-файлов в качестве промежуточного шага для печати. ​​

Я нашел это странно крепким орешком, поэтому я все равно буду признателен за мнения и комментарии по решению.

Спасибо!

ОБНОВЛЕНИЕ 2: Окончательное решение ... Избегайте головной боли самостоятельно:

Хотя я, возможно, пошел дальше, чем следовало бы, с этим подходом, с некоторыми небольшими успехами, в конце концов решение действительно оказалось не таким, потому что оно оказалось слишком «хрупким» для изменений. Любое изменение формата отчета, добавление нового содержания к существующим отчетам, размера бумаги и т. Д. Нарушало вычисления и просто приводило к невероятному количеству дополнительной работы!

Итак, окончательное решение? «Сопротивление бесполезно!» Просто делайте отчеты в формате PDF . Если хотите, можете начать припев «мы вам это сказали», я могу принять это ;-)

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

Итак, если вы пытаетесь сделать что-то подобное, я бы порекомендовал вам перейти к делу, не беспокоиться о отчетах типа HTML / CSS и создавать PDF-файлы.

9
задан Carvell Fenton 24 February 2012 в 19:10
поделиться