Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Заменить Sumatra PDF прямой работой с принтером #47

Open
mrerro opened this issue Mar 30, 2023 · 5 comments
Labels
good first issue 👶 Задача подходит для новичков new feature 🆕 Новая фича или запрос на нее

Comments

@mrerro
Copy link
Member

mrerro commented Mar 30, 2023

Функционал

  1. Передача параметров печати.
    • Односторонняя/Двусторонняя
    • Страницы к печати.
    • Количество копий
    • Тип бумаги (A4, A5)
  2. Получения возможных статусных данных печати.
@mrerro mrerro added new feature 🆕 Новая фича или запрос на нее good first issue 👶 Задача подходит для новичков labels Mar 30, 2023
@mrerro mrerro moved this to Todo in Viribus Team Mar 31, 2023
@JR000
Copy link
Contributor

JR000 commented Apr 25, 2023

Отправку на принтер можно сделать, например, через GDI (https://learn.microsoft.com/ru-ru/windows/win32/gdiplus/-gdiplus-sending-gdi-output-to-a-printer-use).

Надо только понять как в pdf рендерить страницы.

Если делать через GDI, то в перспективе можно будет поддержку разных форматов добавить (docx, например)

@mrerro
Copy link
Member Author

mrerro commented Apr 26, 2023

А почему не использовать заложенные классы в NET для работы с принтером? https://learn.microsoft.com/ru-ru/dotnet/api/system.printing?view=windowsdesktop-7.0 Я почитаю про GDI тоже.

@JR000
Copy link
Contributor

JR000 commented May 4, 2023

Итак.
Насколько я понял, проблема состоит из двух частей:

  1. Получение из файла изображений
  2. Отрисовка изображений на принтере

System.Printing (который, вероятно, является оберткой gdi) позволяет взаимодействовать с железом и "рисовать" на нем. И только. Поэтому картинки для печати нужно будет получать как-то еще.

Для рендеринга страниц pdf можно использовать MuPdf (https://mupdf.com/) через MuPdfCore (https://www.nuget.org/packages/MuPDFCore). Однако, раз уж мы отдельно читаем документы и отдельно рисуем, можно добавить другие доступные для печати форматы. В первую очередь, OOXML (т.е. doc/docx). И вот тут сложнее: ничего бесплатного подобного MuPdf я для OOXML не нашел.

P.S. : можно, конечно, пойти и другим путем. Например, якобы можно создавать для файла процесс на печать. Но такой вариант предполагает наличие промежуточной программы, которая под капотом будет делать вышеперечисленное. У нас это по сути делала SumatraPdf - может делать какой-нибудь условный MS Word. Поэтому делать так (через программу) - все равно, что оставить суматру...

@dyakovri
Copy link
Member

dyakovri commented May 5, 2023

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

@mrerro
Copy link
Member Author

mrerro commented May 5, 2023

Да если отталкиваться от того что бэк будет нам отдавать уже готовый (PostScript или XPS) то пункт Передача параметров печати можно опустить ибо уже все данные будут внутри.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue 👶 Задача подходит для новичков new feature 🆕 Новая фича или запрос на нее
Projects
Status: Backlog
Development

No branches or pull requests

4 participants