Я пишу веб-приложение, которое, помимо прочего, создаст список файлов PDF:

public JsonResult BulkPrintExemptions()
        {
            List<FileContentResult> retValues = new List<FileContentResult>();
            var results = db.Permits.Where(m => m.Year == DateTime.Now.Year).Where(e => e.RecordDeleted == false).ToList();
            foreach (var result in results)
            {
                retValues.Add(GetPDF(result, "Exemption"));
            }
            return Json(retValues, JsonRequestBehavior.AllowGet);
        }

В списке будет как минимум около 400 PDF-документов, и пользователь хочет автоматически распечатать их без какого-либо вмешательства со своей стороны.

Как только я возвращаю этот список FileContentResult, как я могу автоматически отправить его на принтер по умолчанию для пользователя?

Я совершенно уверен, что мне просто нужно пройтись по списку и вызвать Acrobat Reader для каждого; Я просто в растерянности относительно того, как сделать это через JavaScript.

Как мне это сделать? Или, альтернативно, я открыт для лучших вариантов.

Полное раскрытие, чтобы помочь с вариантами:

Это приложение MVC в C #. У конечного пользователя установлен Adobe Acrobat Reader (по крайней мере), так как он используется по умолчанию для образа «Office Desktop».

Изменить, чтобы добавить: PDF-файлы поступают из SSRS, если это имеет какое-либо значение.

1
Carthax 18 Дек 2019 в 20:37

2 ответа

Существуют строгие ограничения в отношении того, что ваша веб-страница может делать на / на компьютере, на котором отображается веб-страница. Раньше мы были более слабыми. Это было оскорблено. Так что это было исправлено. Но я сомневаюсь, что кто-то был настолько безумен, что позволял JavaScript отправлять заказы на печать.

Это, как говорится, должно быть возможно, используя Progamm или, возможно, даже Addon / Extension, установленный на стороне клиента.

Ты можешь регистрировать программы с конкретными протоколами Точно так же, как и в случае с расширениями файлов. Действительно, именно так работают эти ссылки Steam на рабочем столе - это URL-адреса с пользовательским «steam:» Protocoll. И все браузеры регистрируют как общие имена файлов, так и общие протоколы.

Это лучший ответ, который я могу дать вам с таким широким вопросом.

0
Christopher 18 Дек 2019 в 18:01

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

Во-вторых, это возможно. Это ТАК вопрос есть некоторые варианты в списке, и это выглядит как Print.js это, вероятно, ваш лучший выбор. В некоторых комментариях говорилось, что он не открыл диалоговое окно печати, поэтому может не потребовать взаимодействия со стороны вашего пользователя; но я искренне надеюсь, что это так, потому что предоставление веб-сайту неограниченного доступа к принтеру без взаимодействия с пользователем звучит как ужасная идея.

Кроме того, если он запрашивает каждый из этих 400+ PDF-файлов, если вы можете объединить их в один 400-страничный документ, то у вас будет только один диалог печати. Тем не менее, вероятно, замедлить / заблокировать ее компьютер во время обработки этого запроса.

1
Nathan Miller 18 Дек 2019 в 18:31