Задать вопрос

Как распечатать .PDF?

Требуется распечатать документ в формате .pdf.

Ранее я осуществлял печать через Adobe Reader при помощи iTextSharp таким образом:

public void PrintPdfFile()
        {
            RegistryKey adobe = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe");

            if(adobe != null)
            {
                string path = adobe.GetValue("").ToString();
                Process process = new Process();

                process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
                process.StartInfo.Verb = "print"; 

                string pdfFileName = Application.StartupPath + @"\\Source\\PDF\\2.pdf";

                process.StartInfo.FileName = path;
                process.StartInfo.Arguments = @"/p /h " + pdfFileName;
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.CreateNoWindow = true;

                process.Start();
                process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                if (process.HasExited == false)
                {
                    if (!process.WaitForExit(5000))
                        process.Kill();
                }
                process.EnableRaisingEvents = true;
                process.Close();
            }
        }


Этот метод не совсем подходит, так как во-первых для его работы требуется предустановленный Adobe Reader и он отправляет на печать через раз (до сих пор не пойму с чем это связано, но в коде всё работает как положено, но иногда в очередь печати не добавляется).

Для того что бы получить результат, начал изворачиваться: конвертировал .pdf в .png и пушил на печать стандартным PrintPreviewDialog-ом, но проблема в том, что изображение конвертирую из .pdf в .png с dpi 150 (если меньше, то картинка документ мутнеет), и оно не влезает на лист печати. Я подумал, что будет хорошей идеей делать вот так:

var img = Image.FromFile(outputFolder + @"2.png");
Bitmap img_resize = new Bitmap(img, new Size(1124, 794));
e.Graphics.DrawImage(img, new Point(0, 0));


Результат не удовлетворил, всё так же мутнеет документ, из-за уменьшения разрешения.

Далее я попробовал воспользоваться Spire.PDF, установив его через NuGet Install-Package Spire.PDF и использовав в коде вот так:

PdfDocument pdfdocument = new PdfDocument();
pdfdocument.LoadFromFile(inputFolder);
pdfdocument.PrintDocument.PrinterSettings.Copies = 1;
pdfdocument.PrintDocument.Print();
pdfdocument.Dispose();


Результат не хуже, чем при печати через Adobe Reader, но сверху на каждом документе красуется:
Evaluation Warning: The version can be used only for evaluation purpose...


Этот вариант следовательно тоже не совсем подходит.

Далее я попробовал попросту пушить на принтер файл:

int count = 0;
            string directoryName = Application.StartupPath + @"/InputFolder/";
            foreach (string pdfFilePath in Directory.EnumerateFiles(directoryName))
            {
                count++;
                var file = File.ReadAllBytes(pdfFilePath);
                var printQueue = LocalPrintServer.GetDefaultPrintQueue();

                using (var job = printQueue.AddJob())
                using (var stream = job.JobStream)
                {
                    stream.Write(file, 0, file.Length);
                }
            }


Он встаёт в очередь, но не печатается...

И далее я попробовал RawPrint, поставив его всё так же из NuGet Install-Package RawPrint и использовав в коде вот так:

PrinterSettings printerSettings = new PrinterSettings();
string printerName = printerSettings.PrinterName;
IPrinter printer = new Printer();
printer.PrintRawFile(printerName, inputFolder, "2.pdf");


При выполнении файл встаёт в очередь, но не печатается.

Так же я пробовал этот класс

Использую в коде вот так:

//Send file for Printing from RawPrinterHelper
string FileName = inputFolder;
PrinterSettings printer = new PrinterSettings();
string PrinterName = printer.PrinterName;
RawPrinterHelper.SendFileToPrinter(PrinterName, FileName);


Результат такой же, как с RawPrint -- при выполнении файл встаёт в очередь, но не печатается.

Т.е. я уже все перепробовал, что смог натыкать гуглом, но 100% рабочего варианта не смог найти. Подскажите, пожалуйста, как осуществить печать .pdf файла?
  • Вопрос задан
  • 898 просмотров
Подписаться 3 Простой 1 комментарий
Решения вопроса 2
@nApoBo3
Free Spire.PDF for .NET
У вас вероятно платная версия. В бесплатной печатается нормально.
Бесплатная лимитирована 10 страничными pdf.

Найтивная печать pdf, насколько я понял, зависит от принтера. У нас kyocera и hp без проблем pdf кушают, правда отправляем с cups, а не с машины пользователя( через веб сервис ).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
NeiroNx
@NeiroNx
Программист
Я как то делал через Sumatra
Когда надо было печатать из скрипта.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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