Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как распечатать Canvas? 
:(
    Опции темы
kuksha
Дата 14.2.2015, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

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



Есть страница, в которой JavaSvript рисует в Canvas некий рисунок.
Кроме этого рисунка на странице много что понаписано на PHP.
Нужно распечатать только рисунок, без остального мусора на странице.
Как это сделать?
PM MAIL   Вверх
ksnk
Дата 15.2.2015, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Alt-PrtSc, вставить в фотошоп, вырезать ненужное, распечатать?

Страница, которая преднаначена для печати, обычно, специально формируется. Если хозяин страницы не пожелал делать такую опцию - остается фотошоп


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


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



В принципе, если речь идет о яваскрипт-решении и страница загружена в браузер, то можно написать букмарклет, вроде такого
Код

javascript: (function ()
{
    var newwin = open("about:blank");
    var cl = document.querySelectorAll("canvas");
    newwin.addEventListener("load", function ()
    {
        var doc = newwin.document;
        for (var i = 0; i < cl.length; i++)
        {
            var img = doc.createElement("img");
            img.src = cl[i].toDataURL();
            doc.body.appendChild(img);
        }
    }, false)
})();
Он откроет новую страницу и вставит изображения с канвасов как картинки, ну а картинки уже можно сохранить штатными инструментами браузера.

ЗЫ
Код проверял только в файрфоксе. На вот этой странице работает
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...revision=726957
То на ней все заработает как следует.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Aliance
Дата 16.2.2015, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Так пробовали?
Код

@media print {
    * { display: none; }
    body, canvas { display: block; }
}

PM MAIL WWW ICQ Skype   Вверх
kuksha
Дата 16.2.2015, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

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



Cтраница на моём сайте - могу всё что угодно делать.
В идеале хотелось бы кнопку с вызовом функции JavaScript, чтобы выскакивало что-то вроде диалога как при вызове window.print()

ksnk, принтскрин уже предлагал, но народ ленивый...

diadiavova, да, вариант, спасибо. Но, многовато действий + в новом окне не каждый догадается зайти в меню для распечатывания. Как бы без промежуточного окна обойтись...

Aliance, не осилил... можно поподробнее что это такое и что с этим делать?


Может быть есть способ сохранить содержимое канвы в каком-то контейнере (в области памяти, в файле...) и потом вызвать печать этого контейнера?
PM MAIL   Вверх
diadiavova
Дата 16.2.2015, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(kuksha @  16.2.2015,  22:08 Найти цитируемый пост)
diadiavova, да, вариант, спасибо. Но, многовато действий + в новом окне не каждый догадается зайти в меню для распечатывания. Как бы без промежуточного окна обойтись...

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

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <canvas id="canvas1"></canvas>
    <button id="btn1">Нарисовать</button>
    <img src="#" alt="Картинка копируется сюда" id="img1" />
    <script>
        var canvas1 = document.getElementById("canvas1");
        var img1 = document.getElementById("img1");
        document.getElementById("btn1").addEventListener("click", function ()
        {
            img1.src = canvas1.toDataURL();
        });
        var ctx = canvas1.getContext("2d");
        
        canvas1.width = 320;
        canvas1.height = 320;
        ctx.strokeRect(15, 15, 266, 266);
        ctx.strokeRect(18, 18, 260, 260);
        ctx.fillRect(20, 20, 256, 256);
        for (i = 0; i < 8; i += 2)
            for (j = 0; j < 8; j += 2)
            {
                ctx.clearRect(20 + i * 32, 20 + j * 32, 32, 32);
                ctx.clearRect(20 + (i + 1) * 32, 20 + (j + 1) * 32, 32, 32);
            }
    </script>
</body>
</html>

Правда пока проверял, заметил, что в лисе канвас можно сохранить как изображение, просто в контекстном меню есть пункт "Сохранить изображение как...", а еще можно открыть изображение и тогда оно в новой вкладке откроется. В хроме и опере тоже есть возможность сохранить, так что такой код может понадобиться только для ИЕ


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
kuksha
Дата 16.2.2015, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

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



Ого... никогда не замечал, что можно канву сразу в картинку сохранять...

Приведённый код конечно приколен, но мне печать на принтере нужна, а не копирование. 
Либо я чего-то не вижу.

Это сообщение отредактировал(а) kuksha - 16.2.2015, 23:09
PM MAIL   Вверх
diadiavova
Дата 16.2.2015, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(kuksha @  16.2.2015,  23:08 Найти цитируемый пост)
Либо я чего-то не вижу. 

Я подумал, что проблема в канвасе, а с изображением проблем нет. Просто о печати мне ничего не известно smile Но сохранить ведь изображение можно, а потом отпечатать - тоже не проблема. Да и открытие в отдельной вкладке вроде вполне решает проблему. Засунул туда изображение и печатай сколько влезет, не? : smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
kuksha
Дата 16.2.2015, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

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



нет, это не то, я уже писал почему.

Ещё раз:
Нужна кнопка с привязанным скриптом печати на принтер содержимого канваса с данной страницы.
Aliance, поясните пожалуйста ваш способ - не понимаю...
PM MAIL   Вверх
diadiavova
Дата 17.2.2015, 12:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(kuksha @  16.2.2015,  23:21 Найти цитируемый пост)
Нужна кнопка с привязанным скриптом печати на принтер содержимого канваса с данной страницы.

Ну тогда вариант, предложенный Aliance, только с некоторыми изменениями. Если блоки схлопнуты с помощью display:none, то открыть канвас не получится из-за того, что скрыты родительские элементы. Надо сделать так
Код

@media print{
            body {visibility:hidden;}
            canvas{visibility:visible; position:absolute; top:0;left:0; }
        }

Ну и добавить кнопку
Код

       <button onclick="print();">Печатать</button>



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Aliance
Дата 17.2.2015, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Цитата(kuksha @  16.2.2015,  23:08 Найти цитируемый пост)
в новом окне не каждый догадается зайти в меню для распечатывания. Как бы без промежуточного окна обойтись...

Так а что мешает при открытии окна вызвать window.print()?

Цитата(kuksha @  17.2.2015,  00:21 Найти цитируемый пост)
Aliance, поясните пожалуйста ваш способ - не понимаю... 

Вы пробовали его? Ну или гуглили, что такое @media print?

Вы, мне кажется, не до конца уточнили детали задачи - кто должен печатать и при какиХ обстоятельствах? Если нужна кнопка, нажимая на которую пользователям предлагается вывести страницу на печать, где будет только канвас - то вот: http://jsfiddle.net/9f4msqej/ , стили можете взять выше, они более правильные.
PM MAIL WWW ICQ Skype   Вверх
kuksha
Дата 17.2.2015, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

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



Да я вроде подробно написал:
У меня есть сайт, на сайте страничка с ТЕКСТОМ и РИСУНКОМ который сделан сриптом JavaScript в Canvas.
Нужна кнопка на этой страничке, чтобы печатался только РИСУНОК, без ТЕКСТА, через вызов диалога печати.

Цитата(Aliance @  17.2.2015,  12:14 Найти цитируемый пост)
 Если нужна кнопка, нажимая на которую пользователям предлагается вывести страницу на печать, где будет только канвас - то вот: http://jsfiddle.net/9f4msqej/

Да, так и нужно, но что-то там не так прописано: 
Нажал на кнопку в этом примере - вызвался диалог печати, но в предварительном просмотре печати написано "Произошла ошибка предварительного просмотра печати".

Кстати, у меня не текстовый див:
Код

<div id="canvas">допустим, что этот блок - это ваш печатуемые канвас.</div>

а рисунок:
Код

<div id="canvas-frame" style="position:relative;width:650px;height:650px;overflow:visible">
<canvas id="karta" width="650" height="650"></canvas>
</div>

ну и далее в этот канвас "karta" всё рисуется скриптом... надеюсь это не помешает печати?

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

Это сообщение отредактировал(а) kuksha - 17.2.2015, 13:05
PM MAIL   Вверх
kuksha
Дата 17.2.2015, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

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



Всё получилось!
Спасибо всем помогавшим! smile

Вот только неприятность маленькая:
Вместе с рисунком на печать выводится реклама Гугл, которая вызывается гугловским же скриптом.
Как бы рекламу убрать?

CSS сделано так:
Код

@media print {
    body {visibility:hidden;}
    #canvas-frame {visibility:visible; }
}

А рабочий черновик посмотреть можно здесь:
http://kosmoved.ru/nebo_segodnya_geo_14.php

Это сообщение отредактировал(а) kuksha - 17.2.2015, 14:14
PM MAIL   Вверх
ksnk
Дата 17.2.2015, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



kuksha, Для печати звездного неба лучше белый фон. Так что в этом случае - правильнее специальный канвас вставлять с картой и белым фоном. Из основного можно только центр и зум забрать


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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

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



ksnk,  для печати в карте есть Ч/Б режим.
А вот как всё-же Гугл-рекламу убрать?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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