Печать существующего файла pdf непосредственно на принтер клиента по умолчанию [дубликат]

Другим случаем, когда NullReferenceExceptions может случиться, является (неправильное) использование оператора as :

class Book {
    public string Name { get; set; }
}
class Car { }

Car mycar = new Car();
Book mybook = mycar as Book;   // Incompatible conversion --> mybook = null

Console.WriteLine(mybook.Name);   // NullReferenceException

Здесь Book и Car являются несовместимыми типами; a Car не может быть преобразован / передан в Book. Когда этот сбой завершается неудачно, as возвращает null. Используя mybook после этого, вы вызываете NullReferenceException.

В общем случае вы должны использовать cast или as, как показано ниже:

Если вы ожидаете преобразования типа в всегда преуспевает (т. е. вы знаете, какой объект должен быть впереди времени), тогда вы должны использовать cast:

ComicBook cb = (ComicBook)specificBook;

Если вы не уверены в типе, но хотите попробовать , чтобы использовать его как определенный тип, затем используйте as:

ComicBook cb = specificBook as ComicBook;
if (cb != null) {
   // ...
}

11
задан DevinB 3 June 2009 в 17:25
поделиться

9 ответов

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

Вот как это сделать в JavaScript.

window.onload = function() {
  var img = window.open("me-smiling.png");
  img.print();
}

И вот как это сделать в css / javascript / html (при условии, что ваша фотография имеет id «меня улыбающийся»): CSS:

@media print {
   * {
     display:none;
   }
   img#me-smiling {
     display:block;
   }
}

Javascript:

 window.onload = function() { window.print() }
8
ответ дан tj111 1 September 2018 в 04:15
поделиться
  • 1
    Есть ли способ для этого иметь два больших пальца вверх? – DevinB 3 June 2009 в 17:36
  • 2
    Нет, браузеры не поддерживают печать фотографий с двумя большими пальцами (IE поддерживает один большой палец) – tj111 3 June 2009 в 17:40

Я думаю, что в лучшем случае вам понадобится компонент ActiveX с использованием базового API окон для получения контекста устройства для принтера по умолчанию и попробуйте распечатать встроенное изображение с использованием предполагаемых значений параметров принтера.

1
ответ дан ChrisBD 1 September 2018 в 04:15
поделиться

Чтобы автоматически распечатывать принтер по умолчанию, не видя подсказки диалогового окна печати, я поделился некоторым кодом в следующем вопросе, который работает в IE7, IE8 и IE9:

Обход печатидиалога в IE9

1
ответ дан Community 1 September 2018 в 04:15
поделиться

Единственное решение, чтобы избежать диалогового окна печати, которое я нашел, - это создать переменную в Mozilla Firefox для установки автоматической печати. Возможно, это не лучшее решение, если вам нужно использовать другой браузер, но в моем случае мне нужно только распечатать отчет автоматически, и он работает:

1- Откройте Firefox и введите «about: config» в адресная строка 2- Щелкните правой кнопкой мыши по любому предпочтению и выберите «Создать»> «Логическое». 3. Добавьте переменную с именем «print.always_print_silent» с «истинным» значением. 4 Перезапустите Firefox.

Надеемся помочь вам !

7
ответ дан hobbito 1 September 2018 в 04:15
поделиться

AttendStar создал бесплатное дополнение, которое подавляет диалоговое окно и удаляет все верхние и нижние колонтитулы для большинства версий Firefox.

https://addons.mozilla.org/en-US / firefox / addon / attendprint /

С помощью этой функции вы можете использовать $ ('img'). jqprint (); и jqprint для jquery будет печатать только то, что автоматически вызывается из вашего веб-приложения.

4
ответ дан Jon 1 September 2018 в 04:15
поделиться
  • 1
    Мало того, что это действительно интересно, это показывает, что на самом деле есть бизнес-пример того, о чем я просил. Что-то, о чем я не знал в то время. – DevinB 22 September 2011 в 13:44

Это лучшее решение, которое я нашел для firefox: есть эта потрясающая надстройка Бесшовная печать.

Это работает как прелесть.

0
ответ дан Josiah 1 September 2018 в 04:15
поделиться

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

Чтобы печатать непосредственно на принтере по умолчанию ОС, вы можете использовать:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\tmp --kiosk-printing http://www.contoso.com

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

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\tmp --disable-print-preview http://www.contoso.com

Обратите внимание, что window.print() и / или Ctrl-P ведут соответственно указанные настройки.

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

Для Firefox я рекомендую Бесшовные печати Addon

1
ответ дан Oliver Hager 1 September 2018 в 04:15
поделиться

Из множества поисков за последние несколько дней я нашел наилучшее решение. До сих пор Chrome не поддерживает прямую печать с javascript. Он запустил USB и последовательный API, которые могут помочь.

Но в настоящее время я использую решение JavaApplet, которое является открытым исходным кодом. https://github.com/qzind/qz-print - build Пока я получаю ошибку при его создании. Я предпочел готовое приложение Prebuilt - QZ Print Plugin 1.9.3, которое отлично работает.

Загрузите его здесь: https://qz.io/download/

Пример кода:

/***************************************************************************
 * Prototype function for printing an HTML screenshot of the existing page
 * Usage: (identical to appendImage(), but uses html2canvas for png rendering)
 *    qz.setPaperSize("8.5in", "11.0in");  // US Letter
 *    qz.setAutoSize(true);
 *    qz.appendImage($("canvas")[0].toDataURL('image/png'));
 ***************************************************************************/
function printHTML5Page() {
    $("#qz-status").html2canvas({
        canvas: hidden_screenshot,
        onrendered: function() {
            if (notReady()) { return; }
            // Optional, set up custom page size.  These only work for PostScript printing.
            // setPaperSize() must be called before setAutoSize(), setOrientation(), etc.
            qz.setPaperSize("8.5in", "11.0in");  // US Letter
            qz.setAutoSize(true);
            qz.appendImage($("canvas")[0].toDataURL('image/png'));

            //qz.setCopies(3);
            qz.setCopies(parseInt(document.getElementById("copies").value));

            // Automatically gets called when "qz.appendFile()" is finished.
            window['qzDoneAppending'] = function() {
                // Tell the applet to print.
                qz.printPS();

                // Remove reference to this function
                window['qzDoneAppending'] = null;
            };
        }
    });
}

Полный пример можно найти здесь: https://gist.github.com/bkrajendra/c80de17b627e59287f7c

0
ответ дан Rajendra 1 September 2018 в 04:15
поделиться

Вы не можете обойти диалоговое окно печати, насколько я знаю. Это было бы довольно очевидным недостатком безопасности, если бы браузер разрешил это. Но вы можете открыть диалог печати с помощью «window.print ()».

1
ответ дан Rob H 1 September 2018 в 04:15
поделиться
  • 1
    Просто потому, что это будет «недостатком безопасности», это не значит, что он еще не является недостатком безопасности. – DevinB 3 June 2009 в 17:33
  • 2
    Раньше я сталкивался с этим требованием. Это было автоматически печатать заказы на еду в службе доставки горячих блюд из онлайн-заказов. Они просто хотели, чтобы приказ вышел на бумаге и не нужно было признавать. Новый диапазон «облачных принтеров» что я вижу недавно, также предоставляет этот бизнес-объект, но обходит браузер. – Jason 25 June 2012 в 11:01
Другие вопросы по тегам:

Похожие вопросы: