| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: для новичков > Как распечатать Canvas? |
| Автор: kuksha 14.2.2015, 23:21 |
| Есть страница, в которой JavaSvript рисует в Canvas некий рисунок. Кроме этого рисунка на странице много что понаписано на PHP. Нужно распечатать только рисунок, без остального мусора на странице. Как это сделать? |
| Автор: ksnk 15.2.2015, 11:40 |
| Alt-PrtSc, вставить в фотошоп, вырезать ненужное, распечатать? Страница, которая преднаначена для печати, обычно, специально формируется. Если хозяин страницы не пожелал делать такую опцию - остается фотошоп |
| Автор: diadiavova 15.2.2015, 12:56 | ||
В принципе, если речь идет о яваскрипт-решении и страница загружена в браузер, то можно написать букмарклет, вроде такого
ЗЫ Код проверял только в файрфоксе. На вот этой странице работает http://www.w3schools.com/html/html5_canvas.asp А вот на этой - не хочет https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API Но здесь канвас оказывается внутри фрейма, так что если открыть саму страницу фрейма https://mdn.mozillademos.org/en-US/docs/Web/API/Canvas_API$samples/Playable_code?revision=726957 То на ней все заработает как следует. |
| Автор: Aliance 16.2.2015, 08:53 | ||
Так пробовали?
|
| Автор: kuksha 16.2.2015, 22:08 |
| Cтраница на моём сайте - могу всё что угодно делать. В идеале хотелось бы кнопку с вызовом функции JavaScript, чтобы выскакивало что-то вроде диалога как при вызове window.print() ksnk, принтскрин уже предлагал, но народ ленивый... diadiavova, да, вариант, спасибо. Но, многовато действий + в новом окне не каждый догадается зайти в меню для распечатывания. Как бы без промежуточного окна обойтись... Aliance, не осилил... можно поподробнее что это такое и что с этим делать? Может быть есть способ сохранить содержимое канвы в каком-то контейнере (в области памяти, в файле...) и потом вызвать печать этого контейнера? |
| Автор: kuksha 16.2.2015, 23:08 |
| Ого... никогда не замечал, что можно канву сразу в картинку сохранять... Приведённый код конечно приколен, но мне печать на принтере нужна, а не копирование. Либо я чего-то не вижу. |
| Автор: diadiavova 16.2.2015, 23:12 |
Я подумал, что проблема в канвасе, а с изображением проблем нет. Просто о печати мне ничего не известно |
| Автор: kuksha 16.2.2015, 23:21 |
| нет, это не то, я уже писал почему. Ещё раз: Нужна кнопка с привязанным скриптом печати на принтер содержимого канваса с данной страницы. Aliance, поясните пожалуйста ваш способ - не понимаю... |
| Автор: diadiavova 17.2.2015, 12:10 | ||||||
Ну тогда вариант, предложенный Aliance, только с некоторыми изменениями. Если блоки схлопнуты с помощью display:none, то открыть канвас не получится из-за того, что скрыты родительские элементы. Надо сделать так
Ну и добавить кнопку
|
| Автор: Aliance 17.2.2015, 12:14 | ||
Так а что мешает при открытии окна вызвать window.print()? Вы пробовали его? Ну или гуглили, что такое @media print? Вы, мне кажется, не до конца уточнили детали задачи - кто должен печатать и при какиХ обстоятельствах? Если нужна кнопка, нажимая на которую пользователям предлагается вывести страницу на печать, где будет только канвас - то вот: http://jsfiddle.net/9f4msqej/ , стили можете взять выше, они более правильные. |
| Автор: kuksha 17.2.2015, 13:00 | ||||||
| Да я вроде подробно написал: У меня есть сайт, на сайте страничка с ТЕКСТОМ и РИСУНКОМ который сделан сриптом JavaScript в Canvas. Нужна кнопка на этой страничке, чтобы печатался только РИСУНОК, без ТЕКСТА, через вызов диалога печати.
Да, так и нужно, но что-то там не так прописано: Нажал на кнопку в этом примере - вызвался диалог печати, но в предварительном просмотре печати написано "Произошла ошибка предварительного просмотра печати". Кстати, у меня не текстовый див:
а рисунок:
ну и далее в этот канвас "karta" всё рисуется скриптом... надеюсь это не помешает печати? ПС: сейчас попробовать не могу, только вечером, но хотелось бы сейчас понять что в примере не так - вроде всё прозрачно, но что за ошибка... |
| Автор: kuksha 17.2.2015, 14:13 | ||
| Всё получилось! Спасибо всем помогавшим! Вот только неприятность маленькая: Вместе с рисунком на печать выводится реклама Гугл, которая вызывается гугловским же скриптом. Как бы рекламу убрать? CSS сделано так:
А рабочий черновик посмотреть можно здесь: http://kosmoved.ru/nebo_segodnya_geo_14.php |
| Автор: ksnk 17.2.2015, 14:28 |
| kuksha, Для печати звездного неба лучше белый фон. Так что в этом случае - правильнее специальный канвас вставлять с картой и белым фоном. Из основного можно только центр и зум забрать |
| Автор: kuksha 17.2.2015, 14:34 |
| ksnk, для печати в карте есть Ч/Б режим. А вот как всё-же Гугл-рекламу убрать? |
| Автор: diadiavova 17.2.2015, 14:45 |
| kuksha, а вот у меня отпечатался белый лист. Скорей всего из-за того, что в стиле прописан див, а не канвас и на канвас распространяется общее правило, заданное для тела. Пробовал в файрфоксе. Но заменил селектор #canvas-frame на #canvas-frame canvas и все заработало как надо. |
| Автор: kuksha 17.2.2015, 14:55 | ||
| diadiavova, очень странно, я смотрел в Хроме - несколько карт напечатал... Но, послушался Вас и заменил сейчас CSS на:
Изменений не увидел - на предпросмотре всё точно как и было, но может быть в Фаерфоксе что-то изменилось? и ещё эта реклама Гугловская... у кого есть соображения как её убрать? |
| Автор: diadiavova 17.2.2015, 15:04 | ||
Сейчас нормально. Перед тем, как писать, я сначала сам заменил селектор в файрбаге.
В файрфоксе нет никакой рекламы, но хром может и выдает, это ж гугловский браузер Добавлено через 8 минут и 27 секунд div#adunit{display:none} не срабатывает что ли? Это насчет рекламы. |
| Автор: kuksha 17.2.2015, 16:00 | ||
| Понятно, спасибо. А рекламу я сам туда поставил, вот только непонятно откуда на печати она взялась... Поставил так:
- всё равно реклама лезет... |
| Автор: diadiavova 17.2.2015, 16:24 |
Я в первый раз не заметил, но эта реклама во фрейме находится и из-за этого на нее не распространяются правила. Фрейм скрывать надо #google-adds-frame1{display:none} display:none работает так же, как visibility:collapsed, так что в данном случае правила противоречат друг другу. Выполнится какое-то одно, хотя в данном случае это вряд ли имеет значение. |
| Автор: kuksha 17.2.2015, 16:38 |
| Оба правила я поставил уже напоследок - пробовал их поочереди... Заменил сейчас это правило на #google-adds-frame1{display:none} не помогает... #aswift_0_expand{display:none} тоже не срабатывает |
| Автор: diadiavova 17.2.2015, 17:03 |
Там на самом деле ид google_ads_frame1, я просто написал с ошибкой. |
| Автор: kuksha 17.2.2015, 17:23 |
| Не, я до написания копировал имя фрейма напрямую со страницы (а здесь из топика скопировал..) - не работает... |
| Автор: diadiavova 17.2.2015, 18:36 |
| kuksha, короче, первый вариант, который я предложил, содержал селектор body *, потом я отредактировал пост и заменил просто на body, но судя по всему с рекламой поможет справиться именно тот вариант. |
| Автор: kuksha 17.2.2015, 19:05 | ||
| УРА!!! Действительно, дело в звёздочке...
У меня правда почему-то 4 страницы для печати, хотя рисунок только на первой, но так видимо получается на основе общей высоты страницы. Ладно - пусть юзвери сами смотрят и редактируют... Спасибо огромное!!! |
| Автор: diadiavova 17.2.2015, 20:01 |
Там же в диалоге печати можно установить какие страницы надо на печать выводить. |