Как программно напечатать файлы и веб-страницы в PDF через «Microsoft print to PDF»? - PullRequest
2 голосов
/ 25 октября 2019

Я работаю над приложением UWP, написанным на c #, и мне нужно конвертировать в pdf: - офисные документы (doc, docx, xls, xlsx, ppt, pptx) - изображения - веб-страницы

Приложение должно работать в архитектурах x86, x64, ARM, ARM64.

Я знаю, что на рынке есть сторонние библиотеки конвертеров, но только некоторые из них работают в контексте ARM64 или в UWP.

Моя идея состоит в том, чтобы использовать (в Windows 10) «принтер Microsoft PDF», который позволяет пользователям сохранять большинство форматов файлов в PDF.

Я нашел много постов, задающих тот же вопрос, нона самом деле ни один из них не содержит полезного ответа.

Код, который я нашел и протестировал, следующий:

PrintDocument doc = new PrintDocument()
{
//DocumentName = safeDir + fileName,
    PrinterSettings = new PrinterSettings()
    {
        // set the printer to 'Microsoft Print to PDF'
        PrinterName = "Microsoft Print to PDF",

        // tell the object this document will print to file
        PrintToFile = true,


        // set the filename to whatever you like (full path)
        PrintFileName = safeDir + fileName,
    }
};
doc.Print();

Приведенный выше код генерирует действительный, но пустой PDF-файл. Как установить исходное содержимое файла?

Например, если у меня есть файл Word с именем myreport.docx , нужно ли преобразовать его в байтовый массив и установить где-нибудь?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

В UWP мы используем PrintDocument для печати UIElement. И это официальный учебник . И это код образец .

Как печатать веб-страницы

Нам нужно получить WebViewBrush перед печатью. Пожалуйста, укажите этот случай ответ , чтобы получить веб-контент. Затем просмотрите приведенный выше пример кода, чтобы распечатать WebViewBrush в pdf. И я ответил на аналогичный случай, что вы могли бы сослаться .

Как напечатать файл

UWP PrintDocument просто поддерживать печать UIElement, поэтому нам нужно отобразить содержимое файла с контролем uwp, а затем распечатать. Подробные инструкции см. В официальном примере сценария 4.

0 голосов
/ 25 октября 2019

При использовании класса PrintDocument вы должны прочитать файл, который вы пытаетесь распечатать, в поток файлов, как показано в следующем примере: https://docs.microsoft.com/en-us/dotnet/api/system.drawing.printing.printdocument?view=netframework-4.8

Я лично предпочитаю использовать библиотеки Microsoft.Office.Interop дляWord и Excel для печати. Для этого вам просто нужно загрузить документ, установить принтер в «Adobe PDF» и сохранить документ.

...