2011-01-31 1 views
17

Я разрабатываю внутреннее расширение Google Chrome, для которого требуется начать печать текущей страницы на принтер. Я не хочу, чтобы диалоговое окно Print по умолчанию появилось (так что javascript: window.print() не может быть и речи).Расширение Google Chrome: распечатайте страницу бесшумно

Насколько я понимаю, это невозможно с помощью JS + HTML-плагина, поэтому я также открыт для использования плагина NPAPI (с фиктивным типом mime). И я беспокоюсь только о платформе Windows.

Я также открыт для различных хаков/обходных путей, если это возможно, хотя стандартное решение было бы приятным.

Если вы считаете, что это невозможно, сообщите мне, знаете ли вы, что какой-либо запрос функции зарегистрирован для него?

Любые предложения/уточнения приветствуются ..

+1

Вы когда-нибудь заканчивали расширение? Это именно то, что я ищу ... –

+0

Нет, я ничего не мог сделать для тихой печати. :( –

ответ

0

Есть различные расширения, которые принимают снимки текущей веб-страницы (например, this one); вы можете адаптировать его для отправки изображения на принтер через плагин NPAPI.

+0

Есть ли какой-либо другой способ, о котором вы знаете или думаете без использования скриншота? Также, можете ли вы предоставить мне информацию/ссылку о том, как «отправить изображение на принтер» в Windows? –

+0

Я ничего не говорил о скриншоты, посмотрите на подключенный к нему плагин. Фактически он отображает страницу (включая части, прокрученные вне поля зрения) на изображение, она не снимает скриншот. – smorgan

+0

Если вам нужно научиться писать собственный код печати на Windows, я бы предложил опубликовать новый вопрос, полностью касаясь расширений Chrome и NPAPI. – smorgan

1

Поскольку NPAPI позволяет создавать собственные плагины C++, с которыми вы можете взаимодействовать с помощью тега объекта (который вы можете использовать с расширением), вероятно, это будет способ сделать это.

Сложный бит заключается в том, что я не знаю, как получить бит для печати страницы. Единственный, кого я знаю о том, кто сделал что-то похожее на это, получил обработчик окна для браузера (доступный через NPAPI) и очистил биты от него, чтобы напечатать этот путь, но это не будет учитывать таблицы стилей печати или что-то еще , Вы также можете попробовать использовать события автоматизации, чтобы попытаться управлять диалогом печати, но я понятия не имею, будет ли это работать или нет.

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

Во всяком случае, если вы найти способ сделать это с помощью C++, вы можете использовать FireBreath, чтобы облегчить создание плагина NPAPI.

+1

«Трудный бит в том, что я не знаю, как получить бит для печати страницы». <- Эта часть может быть сделан уровень расширения, а не уровень плагина. – smorgan

16

В хром (v18 +) у нас есть переключатели --kiosk --kiosk-printing. Можно распечатать автоматически принтер по умолчанию без подтверждения печати.

Вы можете увидеть из этого видео http://www.youtube.com/watch?v=D6UHjuvI7IE

+0

Возможно из командной строки? – dfrankow

+0

Будут ли доступны эти опции в хром: // флаги? Или они только в командной строке? –

+0

Хром не работает с нашим принтером этикеток. Если бы у IE был подобный переключатель, это было бы здорово! –

0

Я недавно искал подобную способность, и, кажется, это было бы вполне возможно, используя новый Native API обмена сообщений Chrome.

https://developer.chrome.com/extensions/nativeMessaging

Есть много примеров этого с C#, но вот один быстрый пример поиска неисправностей Chrome нативных сообщений с приложением основного C#

Native messaging from chrome extension to native host written in C#

я понимаю, что это может быть день поздно и короткий доллар, но в случае, если кто-то еще сталкивается с этим вопросом, это решение, которое сработало для меня. Изнутри приложения C# вы можете напрямую печатать на установленных принтерах с использованием класса PrintDocument. Если вы выяснили способ получить изображение страницы, это будет намного проще, чем использование firebreath или NPAPI.