![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Digo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Здравствуйте,
столкнулся с проблемой есть 5 потенциально возможных текстовых полей в которых может быть как одна строка так и несколько, нужно так вывести на печать(она из браузера происходит ), чтобы не одно поле не разрывалось(т.е. если не влазиет на прошлый а5 чтобы с самого начала переносилась на новый), формат А5. Т.е. нужно как то анализировать высоту текста в полях, как это определить непонятно можно примерно считать сколько символов в строке (в среднем) но строки могут быть с принудительным переходом на новую (например пару слов) или вообще пустые, а могут быть наоборот длинные. Может кто подскажет что можно сделать с этим?, буду очень признателен) --------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
| Sentox |
|
|||
|
как то так ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: 7 Всего: 7 |
Мне кажется пусть этим занимается сама ОС (всмысле отдавать текст для печати, а сама ОС уже определит драйвер который и будет заниматься комплектацией строк), если я правильно понял
http://ruseller.com/lessons.php?rub=32&id=925 Это сообщение отредактировал(а) Sentox - 12.4.2012, 19:47 |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
хм. page-break-inside только опера поддерживает :(
обидно. и в любом случае, тут на стороне сервера не решить: клиент и масштаб отображение изменить может, и другой размер бумаги для печати выбрать |
|||
|
||||
| Digo |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
спасибо за ценные мысли! ситуация немного упростилась, получается может менятся только одно поле в котором может быть текст, размер его фиксирован по ширине, можно как то определить число символов в тексте и число переноса строк? Длину строки понятно как определять а с текстом работать как с массивом строк, как оптимальнее это реализовать можно?
- заполняется все из админки в инете никаких редакторов обычное поле, далее хранится в базе и выводится, проблема с символом переноса на новую строку. или лучше так?
или может можно посчитать число символов не разбивая на строки и не обходя их в цикле как-то? --------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
||||
|
|||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Можно вычислить высоту поля на клиенте. Просто посчитать ее на javascript и быстро-быстро переформатировать документ. Хотя может ли такой финт сработать при выводе на принтер - не пробовал.
Каким образом посчитать размер текстового куска, выведенного каким-нибудь шрифтом на сервере, вероятно знает только imagettfbbox. Нужно только угадать с размером-типом шрифта и окружающих полей-размеров. Понятно, что точно угадать будет сложно, однако приблизительный вариант, imho, тоже подойдет для решения задачи. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Digo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
дело в том что я знаю длину строки стиль шрифта и его размер он всегда один и тот же, идея такая в среднем посчитать сколько символов в строке полностью заполненой (когда она без обрыва на конце) и посчитать количество строк если есть обрыв, таким образом я получу расчетное среднее количество строк если они просто перенеслись не поместившись в размеры поля и число строк если вконце пользователь поставил побрыв(для исключения коротких строк), если обрывов будет больше, тогда принемаем число строк по обрывам, если меньше по среднему расчету символов в строке. Далее я знаю что при постоянных условиях печати 1 стока скажем 0,5см и знаю поле оставшееся 8 см (можно с запасом сделать) и тогда сможно примерно раскидывать, как вы думаете такой алгоритм пойдет? и для этого мне нужно знать как лучше реализовать все эти подсчеты...
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Digo, Тонкость в том, что латинская l занимает места существенно меньше, чем латинская w. И привязываться к количеству символов в строке просто неправильно. Единственный вариант, если, конечно, не писать собственный графический рендерер шрифтов, позволить какому-то готовому рендереру посчитать нужные габариты, что я и предлагаю. Точнее всего получится посчитать у Javascript'а.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Digo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
не совсем понял что есть js рендерер чесно говоря я не особо в js силен..
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Просто вставить нужный текст в div со все ми нужными стилями и стилем vizibility:hidden и через небольшой таймаут узнать его размеры. Сам броузер, который и будет в последствии печатать странички, правильно посчитает размеры. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Digo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
звучит интересно! Чесно говоря я не совсем понимаю... каким образом узнать размеры? и зачем нужен таймаут? это все через javascript на стороне клиента как понимаю?
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Нужно
что-то вроде этого -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Sentox |
|
|||
|
как то так ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: 7 Всего: 7 |
ммммм ..... может я чего то не понял, а зачем если можно это всё распарсить страницу (это раз), сделать дополнительный запрос к серверу (фоновый), если уже на то пошло это два. То есть непойму для чего этот див выводить заранннее, впринципе не нагрузка для современных каналов, но и всё же. Кстати, а почему в абсолютной позиции. Это сообщение отредактировал(а) Sentox - 16.4.2012, 04:03 |
|||
|
||||
| Digo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
я так подумал если вернутся к прошлым моим мыслям и поставить в этом поле шрифт с одинаковым размером и считать кол символов в строке? т.е. формировать (возможно с запасом) все через php с учетом того что меняется только одно поле и оно может быть только одним шрифтом и одним размером, два вопроса только как можно посчитать длину текста через цикл по строкам или можно сразу определить? и соответственно как лучше разбить на строки (определить /r /n)
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Распарсить страницу нет необходимости. ее автор сам собирает.
Я тоже не пойму при чем тут запрос к серверу. Проблема в том, что сильно заполненное текстом поле не влезает на страницу и приходится его выводит в 2-3-X приемов, расставляя в нужных местах теги превода страницы, чтобы оформление не убегало. Нужно просто вычислить высоту поля, после вставки в него некоего текста с TTF шрифтом ( моноширинный шрифт - это неспортивно и некрасиво -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Digo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
т.е. определяем через js высоту и потом опять загоняем данные в php чтобы он перестроил данные, там просто если не влазиет должны быть на каждой новой странице прописана шапка с различным текстом который генерирует php
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |