2009-10-19 2 views
3

Эти браузеры (версии Windows) правильно напечатать веб-страницу, которая имеет брезентовый наложение злоумышленником IMG тега изображения:Проблемные печать содержимое Canvas тега (Chrome, Opera)

IE6, IE7, IE8, Firefox, Safari

Но Chrome (уточненный как я печатаю это в версии 3.0.195.27) и Opera (уточненный как я печатаю эту версию 10.0 билд 1750) нет. Chrome полностью игнорирует рендеринг холста. Opera отображает весь холст в виде белого прямоугольника, затеняя изображение за ним.

Я знаю, что тэг canvas является довольно новым, и что веб-страницы печати всегда игральные. Как я должен справиться с этим? Есть ли какие-то настройки, которые мне не хватает, чтобы сделать эту работу? Есть ли событие «о печати», которое я могу уловить из JavaScript, чтобы, по крайней мере, предупредить пользователя?


Обновление: Это даже странно, чем кажется. Комбинированное изображение (холст, накладываемый на img) правильно печатается на моем лазерном принтере Brother, но не на моем струйном принтере hp).

Итак, текущая ситуация заключается в том, что большинство браузеров правильно печатают мою струйную печать, но Chrome этого не делает. Opera нажимает на оба принтера.

Все ли связано с драйверами принтеров и как различные браузеры общаются с ними?


Обновление: Я заметил, что Документы Google создают PDF-документ для печати.

+1

http://www.twiddla.com/test/ChromeCanvas.html тестовая страница, может быть, помогает разобраться в проблеме !? – powtac

+0

@powtac ... Вы сделали проблему более интересной. В Chrome эта страница, которую вы правильно связали с печатными изданиями на моем b & w laserjet, но красная рамка слева не печатает на моем цветном чернильнице (но две красные цифры справа - это растровые изображения). – Nosredna

+0

См. «Обновление» выше. – Nosredna

ответ

0

Я бы предложил сохранить страницу в формате PDF и попробовать печать. PDF-документ для печати должен быть WYSIWYG. Если PDF-рендеринг прав, любой принтер должен печатать его в порядке.

+0

Итак, как мне сохранить страницу в формате PDF? Могу ли я сделать это программно? – Nosredna

+0

Извините, если я предполагаю, что у вас есть mac. Всякий раз, когда вы пытаетесь распечатать из браузера в Mac, вы увидите меню PDF внизу слева. Вы можете сохранить как PDF, используя один из вариантов. –

+0

В большинстве дистрибутивов Linux, таких как Ubuntu, вы можете печатать и в PDF. Я думаю, что Adobe Acrobat Reader на Windows также поставляется с этим вариантом, но я не уверен. – richard

1

Интересно, если вместо рендеринга в <canvas> элемента: он может печатать правильно, если вы должны были вынести на объект холст от документа и установить стиль CSS на <div> иметь background-image набор для "url("+myCanvasObject.toDataUrl()+")".

Кроме того, вы можете просто установить атрибут src нового элемента <img /> тому же myCanvasObject.toDataUrl(). Это должно быть обработано лучше, чем метод, упомянутый выше.

+0

Интересная идея. :-) Я уверен, что IE, по крайней мере, не будет есть это. Возможно, Chrome и Opera. – Nosredna

+0

Возможно, вы, вероятно, прав насчет IE, возможно, стоит того же сделать! – JasonWyatt

+0

Я добавил еще одно возможное решение, это может быть более точным/полезным. – JasonWyatt

2

Для создания PDF-файла вы можете использовать PHP's PDF functions. Это очень просто!

Чтобы создать новый PDF:

$pdf = pdf_new(); 

Открыть файл:

pdf_open_file($pdf, "pdfName.pdf"); 

Вы можете установить некоторые переменные, такие как автор:

pdf_set_info($pdf, "Title", "pdf Title here"); 

Теперь вы будете нуждаться для использования функции pdf_begin_page():

pdf_begin_page($pdf, 595, 842); 

это размеры для A4.

содержание

и закройте файл:

pdf_end_page($pdf); 
pdf_close($pdf); 

Для полной ссылки, посмотрите на PHP's PDF manual.

+2

Это круто. Предполагается, что я, конечно, получаю всю информацию на сервере, включая историю всех операций с холстами (которые я должен каким-то образом имитировать на сервере). – Nosredna

Смежные вопросы