Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение количества строк при печати 
:(
    Опции темы
Digo
Дата 12.4.2012, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 30.9.2004
Где: Ростов на Дону

Репутация: нет
Всего: нет



Здравствуйте,

столкнулся с проблемой есть 5 потенциально возможных текстовых полей в которых может быть как одна строка так и несколько, нужно так вывести на печать(она из браузера происходит ), чтобы не одно поле не разрывалось(т.е. если не влазиет на прошлый а5 чтобы с самого начала переносилась на новый), формат А5. Т.е.  нужно как то анализировать высоту текста в полях, как это определить непонятно можно примерно считать сколько символов в строке (в среднем) но строки могут быть с принудительным переходом на новую (например пару слов) или вообще пустые, а могут быть наоборот длинные. Может кто подскажет что можно сделать с этим?, буду очень признателен)
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс )
PM MAIL WWW ICQ   Вверх
Sentox
Дата 12.4.2012, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Мне кажется пусть этим занимается сама ОС (всмысле отдавать текст для печати, а сама ОС уже определит драйвер который и будет заниматься комплектацией строк), если я правильно понял smile
http://ruseller.com/lessons.php?rub=32&id=925

Это сообщение отредактировал(а) Sentox - 12.4.2012, 19:47
PM MAIL   Вверх
skyboy
Дата 12.4.2012, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



хм. page-break-inside только опера поддерживает :(
обидно.
и в любом случае, тут на стороне сервера не решить: клиент и масштаб отображение изменить может, и другой размер бумаги для печати выбрать
PM MAIL   Вверх
Digo
Дата 13.4.2012, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 30.9.2004
Где: Ростов на Дону

Репутация: нет
Всего: нет



спасибо за ценные мысли! ситуация немного упростилась, получается может менятся только одно поле в котором может быть текст,  размер его фиксирован по ширине, можно как то определить число символов в тексте и число переноса строк? Длину строки понятно как определять а с текстом работать как с массивом строк, как оптимальнее это реализовать можно?

Код

$newtext = explode("\n", $txt);

 - заполняется все из админки в инете никаких редакторов обычное поле, далее хранится в базе и выводится, проблема с символом переноса на новую строку.

или лучше так?
Код

$newtext = preg_split('/\\r\\n?|\\n/', $text);


или может можно посчитать число символов не разбивая на строки и не обходя их в цикле как-то?

--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс )
PM MAIL WWW ICQ   Вверх
ksnk
Дата 13.4.2012, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Можно вычислить высоту поля на клиенте. Просто посчитать ее на javascript и быстро-быстро переформатировать документ. Хотя может ли такой финт сработать при выводе на принтер - не пробовал.  smile Хотя, ничего не мешает на JS сначала умело посчитать размеры, а потом  с помощью window.open и document.write сформировать "страничку для печати" с переносами страниц в нужных местах.

Каким образом посчитать размер текстового куска, выведенного каким-нибудь шрифтом на сервере, вероятно знает только  imagettfbbox. Нужно только угадать с размером-типом шрифта и окружающих полей-размеров. Понятно, что точно угадать будет сложно, однако приблизительный вариант, imho, тоже подойдет для решения задачи.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Digo
Дата 13.4.2012, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 30.9.2004
Где: Ростов на Дону

Репутация: нет
Всего: нет



дело в том что я знаю длину строки стиль шрифта и его размер он всегда один и тот же, идея такая в среднем посчитать сколько символов в строке полностью заполненой (когда она без обрыва на конце) и посчитать количество строк если есть обрыв, таким образом я получу расчетное среднее количество строк если они просто перенеслись не поместившись в размеры поля и число строк если вконце пользователь поставил побрыв(для исключения коротких строк), если обрывов будет больше, тогда принемаем число строк по обрывам, если меньше по среднему расчету символов в строке. Далее я знаю что при постоянных условиях печати 1 стока скажем 0,5см и знаю поле оставшееся 8 см (можно с запасом сделать) и тогда сможно примерно раскидывать, как вы думаете такой алгоритм пойдет? и для этого мне нужно знать как лучше реализовать все эти подсчеты...
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс )
PM MAIL WWW ICQ   Вверх
ksnk
Дата 13.4.2012, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Digo, Тонкость в том, что латинская l занимает места существенно меньше, чем латинская w. И привязываться к количеству символов в строке просто неправильно. Единственный вариант, если, конечно, не писать собственный графический рендерер шрифтов, позволить какому-то готовому рендереру посчитать нужные габариты, что я и предлагаю. Точнее всего получится посчитать у Javascript'а.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Digo
Дата 13.4.2012, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 30.9.2004
Где: Ростов на Дону

Репутация: нет
Всего: нет



не совсем понял что есть js рендерер чесно говоря я не особо в js силен..
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс )
PM MAIL WWW ICQ   Вверх
ksnk
Дата 13.4.2012, 16:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(Digo @  13.4.2012,  15:53 Найти цитируемый пост)
не совсем понял что есть js рендерер чесно говоря я не особо в js силен..

Просто вставить нужный текст в div со все ми нужными стилями и стилем vizibility:hidden и через небольшой таймаут узнать его размеры. Сам броузер, который и будет в последствии печатать странички, правильно посчитает размеры.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Digo
Дата 14.4.2012, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 30.9.2004
Где: Ростов на Дону

Репутация: нет
Всего: нет



звучит интересно! Чесно говоря я не совсем понимаю... каким образом узнать размеры? и зачем нужен таймаут? это все через javascript на стороне клиента как понимаю?
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс )
PM MAIL WWW ICQ   Вверх
ksnk
Дата 15.4.2012, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Нужно
  •  организовать тестовый div в абсолютной позиции и правилом visibility:hidden
  •  обеспечить наследование всех правил css от дива, размер которого нужно регулировать этим дивом. для простоты - узнать  реальные значения css свойств и вручную присвоить их тестовому диву.
  •  вставить в тестовый див нужны текст
  •  выставить маленький таймаут. Во многих (всех?) броузерах перерисовка экрана происходит на парралельно с javascript, а после прекращения его работы. Таймаут и вызывает это самое прекращение.
  •  после таймаута можно получить значение высоты тестового дива. (width)
  •  Если нужно точнее подогнать нужный размер текста к нужной высоте - можно методом двоичного деления (пропорционального ;) ) подгонять размер текста, пока не наступит полное удовлетворение.

что-то вроде этого


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sentox
Дата 16.4.2012, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Цитата(ksnk @ 15.4.2012,  22:16)
Нужно


  •  организовать тестовый div в абсолютной позиции и правилом visibility:hidden

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

  •  вставить в тестовый див нужны текст

  •  выставить маленький таймаут. Во многих (всех?) броузерах перерисовка экрана происходит на парралельно с javascript, а после прекращения его работы. Таймаут и вызывает это самое прекращение.

  •  после таймаута можно получить значение высоты тестового дива. (width)

  •  Если нужно точнее подогнать нужный размер текста к нужной высоте - можно методом двоичного деления (пропорционального ;) ) подгонять размер текста, пока не наступит полное удовлетворение.


что-то вроде этого

ммммм ..... может я чего то не понял, а зачем если можно это всё распарсить страницу (это раз), сделать дополнительный запрос к серверу (фоновый), если уже на то пошло это два. То есть непойму для чего этот див выводить заранннее, впринципе не нагрузка для современных каналов, но и всё же.

Кстати, а почему в абсолютной позиции.

Это сообщение отредактировал(а) Sentox - 16.4.2012, 04:03
PM MAIL   Вверх
Digo
Дата 16.4.2012, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 30.9.2004
Где: Ростов на Дону

Репутация: нет
Всего: нет



я так подумал если вернутся к прошлым моим мыслям и поставить в этом поле шрифт  с одинаковым размером и считать кол символов в строке? т.е. формировать (возможно с запасом) все через php с учетом того что меняется только одно поле и оно может быть только одним шрифтом и одним размером, два вопроса только как можно посчитать длину текста через цикл по строкам или можно сразу определить? и соответственно как лучше разбить на строки (определить /r /n)
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс )
PM MAIL WWW ICQ   Вверх
ksnk
Дата 16.4.2012, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(Sentox @  16.4.2012,  04:02 Найти цитируемый пост)
 это всё распарсить страницу (это раз)

Распарсить страницу нет необходимости. ее автор сам собирает.
Цитата(Sentox @  16.4.2012,  04:02 Найти цитируемый пост)
сделать дополнительный запрос к серверу (фоновый), если уже на то пошло это два

Я тоже не пойму при чем тут запрос к серверу.  smile 

Проблема в том, что сильно заполненное текстом поле не влезает на страницу и приходится его выводит в 2-3-X приемов, расставляя в нужных местах теги превода страницы, чтобы оформление не убегало. Нужно просто вычислить высоту поля, после вставки в него некоего текста с TTF шрифтом ( моноширинный шрифт - это неспортивно и некрасиво  smile  ) Метод вычисления высоты поля с определенной шириной и неопределенным наполнением я и предлагаю.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Digo
Дата 16.4.2012, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 30.9.2004
Где: Ростов на Дону

Репутация: нет
Всего: нет



т.е.  определяем через js высоту и потом опять загоняем данные в php чтобы он перестроил данные, там просто если не влазиет должны быть на каждой новой странице прописана шапка с различным текстом который генерирует php
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс )
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.