Я создаю отчеты, используя HTML, и я использую CSS для управления разрывами страниц, используя разрыва страниц и т. Д. Я дал пользователю возможность печатать несколько отчетов одновременно, которые я создаю как разделы одногодинамически генерируемый документ HTML.Создание единого документа позволяет сделать это одним заданием на печать, чтобы избежать проблем с печатью.
Моя проблема заключается в следующем: я хотел бы пронумеровать страницы раздела большего динамического HTML в формате «страница x из n».Однако, если я позволю принтеру сделать это, он увидит документ (справедливо) как один документ и пронумерует весь документ.
Можно ли как-то определить, когда произойдут разрывы страниц CSS, чтобы я мог посчитать их для раздела перед печатью и указать собственную нумерацию (например, HTML-элемент) для разделов вдлинный единственный документ?
Кажется, у меня должен быть способ сделать это, но за последние несколько дней решение ускользнуло от меня, поэтому я подумал, что пингую Stackoverflow.
ОБНОВЛЕНИЕ: То, что я закончил делать:
Я принял ответ Кристофера, потому что, хотя я не использовал его точно, он указал мне правильное направление.
В итоге я выполнил вычисления для содержимого с помощью jQuery, основываясь на размере печатаемой бумаги, полях, размере шрифта и т. Д., А затем добавил элементы для разрывов страниц, которые имеют CSS для разрыва страниц.Я отслеживаю, сколько добавленных разделителей страниц добавляется, и затем обновляю html-информацию "page x of n" в каждом элементе разбиения страниц после обработки всего содержимого.Это позволило мне избежать необходимости знать, сколько страниц будет в начале (спасибо jQuery .each).
Очевидно, есть некоторые проблемы с этим решением:
Элементы "страница x из n" отображаются не как настоящие нижние колонтитулы, а в нижней части содержимого на каждой странице.В моей ситуации это приемлемый компромисс.
Разделение элементов содержимого, которые сами по себе были больше страницы, особенно учитывая, что большая часть содержимого генерируется php, стало немного сложным.Я заставил его работать, но опять же, он требует допущений, которые могут нарушать варианты печати.
Расчеты зависят от предположений о размере отпечатанной бумаги, полях, размере шрифта и т. Д. В моемСитуация в интрасети - это снова приемлемый компромисс, потому что я могу контролировать эти параметры.Можно добавить дополнительный код для обработки некоторого количества изменений в будущем (например, размер бумаги).
Это решение, хотя и не идеальное и немного «хрупкое», решает мою проблему, позволяетпечатать несколько отчетов одновременно, избегая таймаутов спулинга принтера, отслеживая и перезапуская нумерацию страниц и избегая генерации PDF-файлов в качестве промежуточного шага для печати.
Мне показалось, что это странно крепкий орешек, поэтомупо-прежнему ценю мнения и отзывы о решении.
Спасибо!
ОБНОВЛЕНИЕ 2: Окончательное решение ... Избегайте головных болей самостоятельно:
Хотя япошли, возможно, дальше, чем я должен был с этим подходом, с некоторыми небольшими успехами, в конце концов, решение действительно не было таким, потому что оно просто оказалось слишком «хрупким» для изменений.Любые изменения в формате отчета, добавление нового контента к существующим отчетам, размер бумаги и т. Д. Нарушали расчеты и заканчивались смехотворной дополнительной работой!
Итак, конечное решение? "Сопротивление бесполезно!"Просто делайте отчеты в формате PDF .Вы можете начать припев «мы вам так сказали», если хотите, я могу его взять ;-)
Я пошел с библиотекой TCPDF , которая была превосходной, хотя и немного трудной для начала. Примеры очень полезны. Теперь у меня есть полная настройка отчета, и все генерируется так, как должно. Множественные отчеты легко создаются в виде одного PDF-файла (исключая проблему спулинга печати) с группами страниц, что позволяет нумерации работать именно так, как мне нужно.
Итак, если вы пытаетесь сделать что-то подобное, я бы порекомендовал вам перейти к поиску, пропустить разочарование отчетами типа HTML / CSS и создавать PDF-файлы.