Подтвердить что ты не робот

Печать Pdf в С#

Я новичок в С#. Я смотрел по всей сети за учебниками о том, как печатать PDF, но не смог найти его.

Тогда я подумал, можно ли читать его с помощью itextpdf, как здесь сказано

Чтение содержимого PDF с помощью dll itextsharp в VB.NET или С#

затем распечатайте его. Если да, то как?

4b9b3361

Ответ 1

Очень простой подход - использовать установленный Adobe Reader или любой другой просмотрщик PDF, способный печатать:

Process p = new Process( );
p.StartInfo = new ProcessStartInfo( )
{
    CreateNoWindow = true,
    Verb = "print",
    FileName = path //put the correct path here
};
p.Start( );

Другой способ - использовать сторонний компонент, например. PDFView4NET

Ответ 2

Я написал очень (!) небольшой вспомогательный метод вокруг adobeeader для массового распечатки pdf из С#...:

  public static bool Print(string file, string printer) {
     try {
        Process.Start(
           Registry.LocalMachine.OpenSubKey(
                @"SOFTWARE\Microsoft\Windows\CurrentVersion" +
                @"\App Paths\AcroRd32.exe").GetValue("").ToString(),
           string.Format("/h /t \"{0}\" \"{1}\"", file, printer));
        return true;
     } catch { }
     return false;
  }

нельзя полагаться на возвращаемое значение метода btw...

Ответ 3

Другой подход, если вы просто хотите напечатать PDF файл программным образом, заключается в использовании команды LPR: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/lpr.mspx?mfr=true

LPR доступен и в новых версиях Windows (например, Vista/7), но вам нужно включить его в дополнительных компонентах Windows.

Например:

Process.Start("LPR -S printerdnsalias -P raw C:\files\file.pdf");

Вы также можете использовать IP-адрес принтера вместо псевдонима.

Это предполагает, что ваш принтер поддерживает PDF Direct Printing, иначе это будет работать только для файлов PostScript и ASCII. Кроме того, на принтере должен быть установлен сетевой интерфейс, и вам нужно знать его IP-адрес или псевдоним.

Ответ 4

У меня была такая же проблема при печати файла PDF. Там есть пакет, который называется Spire.Pdf и который очень прост в использовании. Бесплатная версия имеет ограничение в 10 страниц, однако, в моем случае, это было лучшее решение, если я не хочу зависеть от Adobe Reader и не хочу устанавливать какие-либо другие компоненты.

https://www.nuget.org/packages/Spire.PDF/

PdfDocument pdfdocument = new PdfDocument();
pdfdocument.LoadFromFile(pdfPathAndFileName);
pdfdocument.PrinterName = "My Printer";
pdfdocument.PrintDocument.PrinterSettings.Copies = 2;
pdfdocument.PrintDocument.Print();
pdfdocument.Dispose();

Ответ 5

Вы можете создать PDF-документ, используя PdfSharp. Это библиотека .NET с открытым исходным кодом.

При попытке распечатать документ ухудшается. Я посмотрел на него с открытым исходным кодом. Есть несколько способов сделать это с помощью AcroRd32.exe, но все зависит от версии, и это невозможно сделать без чтения acrobat-читателя.

Наконец я закончил использование VintaSoftImaging.NET SDK. Это стоит денег, но намного дешевле, чем альтернатива, и это решает проблему очень легко.

var doc = new Vintasoft.Imaging.Print.ImagePrintDocument { DocumentName = @"C:\Test.pdf" };
doc.Print();

Это просто печатает на принтере по умолчанию, не показывая. Существует несколько альтернатив и вариантов.

Ответ 6

Использовать PDFiumViewer. Я долго искал, пока не придумал подобное решение, тогда я нашел этот чистый фрагмент кода, который не полагался на отправку необработанных файлов на принтер (что плохо, если они интерпретируются как текстовые файлы..) или используя Acrobat или Ghostscript в качестве помощника (оба должны быть установлены, что является проблемой):

fooobar.com/questions/114120/...

PDFiumViewer поставляется через nuget, приведенный выше пример кода. Передайте нулевые значения для использования принтера по умолчанию.

Ответ 7

Можно использовать Ghostscript для чтения PDF файлов и печати их на именованный принтер.

Ответ 8

Я советую вам попробовать инструмент командной строки 2Printer из: http://www.doc2prn.com/

Пример командной строки для печати всех файлов PDF из папки "C:\Input" приведен ниже. Вы можете просто вызвать его из своего кода на С#.

2Printer.exe -s "C:\Input *.PDF" -prn "Принтер серии Canon MP610"

Ответ 9

Самый простой способ - создать С# Process и запустить внешний инструмент для печати PDF файла.

private static void ExecuteRawFilePrinter() {
    Process process = new Process();
    process.StartInfo.FileName = "c:\\Program Files (x86)\\RawFilePrinter\\RawFilePrinter.exe";
    process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    process.StartInfo.Arguments = string.Format("-p \"c:\\Users\\Me\\Desktop\\mypdffile.pdf\" \"gdn02ptr006\"");
    process.Start();
    process.WaitForExit();
}

Код выше запускает RawFilePrinter.exe(аналогично 2Printer.exe), но с лучшей поддержкой. Это не бесплатно, но, делая пожертвование, вы можете использовать его повсюду и распространять с вашим приложением. Последняя версия для загрузки: http://bigdotsoftware.pl/rawfileprinter

Ответ 10

Это зависит от того, что вы пытаетесь напечатать. Вам понадобится стороннее приложение для печати PDF-документов, или если вы сами печатаете свои данные, вы можете использовать средство просмотра отчетов в visual studio. Он может выводить отчеты в excel и pdf файлы.

Ответ 11

Кроме того, вы можете использовать Total PDF Printer X

string src="C:\\test\\test1.pdf";
string PrintName="Name Of Printer";

PDFPrinterX Cnv = new PDFPrinterX();
Cnv.Print(src, PrintName, "-log c:\\Printer.log");

MessageBox.Show("Print complete!");

Вы можете скачать этот пример

Ответ 12

Похоже, что обычные подозреваемые, такие как pdfsharp и migradoc, не могут этого сделать (pdfsharp, только если у вас установлен Acrobat (Reader)).

Я нашел здесь

https://vishalsbsinha.wordpress.com/2014/05/06/how-to-programmatically-c-net-print-a-pdf-file-directly-to-the-printer/

код готов для копирования/вставки. Он использует принтер по умолчанию и из того, что я вижу, он даже не использует никаких библиотек, напрямую отправляя pdf-байты на принтер. Поэтому я предполагаю, что принтер также должен его поддерживать, на одном 10-летнем принтере, который я тестировал, он работал безупречно.

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

Ответ 13

Открывайте, импортируйте, редактируйте, объединяйте, конвертируйте документы Acrobat PDF с помощью нескольких строк кода, используя интуитивно понятный API Ultimate PDF. Используя 100% управляемый код, написанный на С#, этот компонент использует многочисленные встроенные функции .NET Framework для повышения производительности. Более того, библиотека совместима с CLS и не использует небезопасных блоков для минимальных требований к разрешениям. Занятия полностью документированы с подробным примером кода, который помогает сократить время обучения. Если ваша среда разработки Visual Studio, наслаждайтесь полной интеграцией онлайн-документации. Просто пометьте или выберите ключевое слово и нажмите клавишу F1 в вашей Visual Studio IDE, и онлайн-документация будет отображена мгновенно. Высокопроизводительная и надежная библиотека PDF, которая позволяет легко добавить функциональность PDF в ваши приложения .NET с помощью нескольких строк кода.

PDF Компонент для NET

Ответ 14

Если у вас установлен Adobe Reader, вы можете просто установить его в качестве принтера по умолчанию. И ВОЙЛА! Вы можете распечатать в PDF!

printDocument1.PrinterSettings.PrinterName = "Adobe PDF";
printDocument1.Print();

Просто так просто!

Ответ 15

Иногда Adobe портит макет, например, с помощью принтера Zebra P430i или даже с некоторыми типами PDF-контента.

Мое решение: использовать SUMATRApdf Portable. Вы можете запустить процесс с параметрами в стиле командной строки, как указано в документации sumatrapdf. например. выберите принтер, выберите лоток, дуплекс,... Никаких надстроек, надстроек, специальной установки... просто скопируйте переносимый .EXE в папку назначения проекта и вызовите его из кода С#.

Отпечатки вышли правильно и без хлопот! Надеюсь, что это поможет кому-то, кто искал не-Adobe решение, как я;)

Ответ 16

Лучший способ автоматически распечатать PDF из С# - использовать принтер "прямой PDF". Вам просто нужно скопировать файл PDF в сетевое имя принтера. Об остальном позаботится сам принтер.

Скорость в 10 раз быстрее любых других методов. Тем не менее, требования - это модель принтера, поддерживающая прямую печать PDF и имеющая не менее 128 МБ драм, что легко для любого современного принтера.

Ответ 17

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

Вот код для подхода, который я разработал на веб-браузере win формы:

    private void button1_Click(object sender, EventArgs e)
    {
        webBrowser1.Navigate(@"path\to\file");
    }  

    private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {   
        //Progress Changed fires multiple times, however after the Navigated event it is fired only once,
        //and at this point it is ready to print
        webBrowser1.ProgressChanged += (o, args) => 
        {
            webBrowser1.Print();//Note this does not print only brings up the print preview dialog
            //Should be on a separate task to ensure the main thread 
            //can fully initialize the print dialog 
            Task.Factory.StartNew(() => 
            {
                Thread.Sleep(1000);//We need to wait before we can send enter
                //This assumes that the print preview is still in focus
                Action g = () =>
                {
                    SendKeys.SendWait("{ENTER}");
                };
                this.Invoke(g);
            });
        };
    }