Imprimir PDF em C #

Eu sou novo no c #. Eu estava procurando em toda a net para tutoriais sobre como imprimir pdf, mas não consegui encontrar um.

Então eu pensei, é possível lê-lo usando itextpdf, como mencionado aqui

Lendo o conteúdo em PDF com dll itextsharp em VB.NET ou C #

depois imprima. Se sim, como?

   

Uma abordagem muito direta é usar um Adobe Reader instalado ou qualquer outro visualizador de PDF capaz de imprimir:

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

Outra maneira é usar um componente de terceiros, por exemplo, PDFView4NET

Eu escrevi um método auxiliar muito (!) ao redor do adobereader para imprimir em PDF a partir de c # …:

  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; } 

não se pode confiar no valor de retorno do método btw …

Outra abordagem, se você simplesmente deseja imprimir um arquivo PDF programaticamente, é usar o comando LPR: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/lpr.mspx ? mfr = true

O LPR também está disponível em versões mais recentes do Windows (por exemplo, Vista / 7), mas é necessário ativá-lo nos componentes opcionais do Windows.

Por exemplo:

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

Você também pode usar o endereço IP da impressora em vez do alias.

Isso pressupõe que sua impressora suporta impressão direta de PDF, caso contrário, isso só funcionará para arquivos PostScript e ASCII. Além disso, a impressora precisa ter uma interface de rede instalada e você precisa saber seu endereço IP ou alias.

Eu tive o mesmo problema em imprimir um arquivo PDF. Existe um pacote nuget chamado Spire.Pdf que é muito simples de usar. A versão gratuita tem um limite de 10 páginas, embora, no meu caso, tenha sido a melhor solução, uma vez que não quero depender do Adobe Reader e não quero instalar nenhum outro componente.

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(); 

Você pode criar o documento PDF usando PdfSharp . É uma biblioteca .NET de código aberto.

Ao tentar imprimir o documento, ele piora. Eu olhei allover para uma maneira open-source de fazê-lo. Existem algumas maneiras de fazer isso usando o AcroRd32.exe, mas tudo depende da versão, e isso não pode ser feito sem o acrobat reader permanecer aberto.

Eu finalmente acabei usando o VintaSoftImaging.NET SDK . Custa algum dinheiro mas é muito mais barato que a alternativa e resolve o problema realmente fácil.

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

Isso só imprime para a impressora padrão sem mostrar. Existem várias alternativas e opções.

Eu aconselho você a experimentar a ferramenta de linha de comando 2Printer em: http://www.doc2prn.com/

Exemplo de linha de comando para imprimir todos os arquivos PDF da pasta “C: \ Input” está abaixo. Você pode simplesmente chamá-lo do seu código c #.

2Printer.exe -s “C: \ Input * .PDF” -prn “Impressora Canon MP610 series”

Use o PDFiumViewer. Eu procurei por um longo tempo até chegar a uma solução semelhante, então eu encontrei este pedaço limpo de código que não depende do envio de arquivos brutos para a impressora (o que é ruim se eles são interpretados como arquivos de texto ..) ou usando Acrobat ou Ghostscript como um ajudante (ambos precisariam ser instalados, o que é um aborrecimento):

https://stackoverflow.com/a/41751184/586754

O PDFiumViewer vem via nuget, o exemplo de código acima está completo. Passe em valores nulos para usar a impressora padrão.

A maneira mais fácil é criar o C # Process e lançar uma ferramenta externa para imprimir seu arquivo 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(); } 

O código acima lança o RawFilePrinter.exe (semelhante ao 2Printer.exe), mas com melhor suporte. Não é gratuito, mas ao fazer doações, você pode usá-lo em qualquer lugar e redistribuir com seu aplicativo. Última versão para baixar: http://bigdotsoftware.pl/rawfileprinter

Depende do que você está tentando imprimir. Você precisa de um aplicativo de impressão de terceiros para PDF ou, se estiver imprimindo seus dados, pode usar o visualizador de relatórios no visual studio. Pode gerar relatórios para excel e arquivos pdf.

É possível usar o Ghostscript para ler arquivos PDF e imprimi-los em uma impressora nomeada.

Parece que os suspeitos usuais, como o pdfsharp e o migradoc, não conseguem fazer isso (o pdfsharp só se você tiver o Acrobat (Reader) instalado).

Eu encontrei aqui

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

código pronto para copiar / colar. Ele usa a impressora padrão e pelo que eu vejo, nem usa bibliotecas, enviando diretamente os bytes do pdf para a impressora. Então eu suponho que a impressora também precisa suportá-lo, em uma impressora de 10 anos eu testei isso, funcionou perfeitamente.

A maioria das outras abordagens – sem bibliotecas ou aplicativos comerciais – exige que você desenhe no contexto do dispositivo de impressão. Doable, mas vai demorar um pouco para descobrir e fazê-lo funcionar em impressoras.

Abra, importe, edite, mescle, converta documentos Acrobat PDF com algumas linhas de código usando a intuitiva API do Ultimate PDF. Usando 100% código gerenciado escrito em C #, o componente aproveita os inúmeros resources internos do .NET Framework para aprimorar o desempenho. Além disso, a biblioteca é compatível com CLS e não usa blocos não seguros para requisitos mínimos de permissão. As classs são totalmente documentadas com código de exemplo detalhado que ajuda a encurtar sua curva de aprendizado. Se o seu ambiente de desenvolvimento for o Visual Studio, aproveite a integração completa da documentação on-line. Marque ou selecione uma palavra-chave e pressione F1 no IDE do Visual Studio, e a documentação on-line será representada instantaneamente. Uma biblioteca PDF confiável e de alto desempenho que permite adicionar facilmente a funcionalidade do PDF aos seus aplicativos .NET com algumas linhas de código.

Componente PDF para NET

Também é possível fazê-lo com um navegador da Web incorporado, observe, no entanto, que esse pode ser um arquivo local e também porque não é realmente o navegador diretamente e não há DOM, portanto, não há estado pronto.

Aqui está o código para a abordagem que eu trabalhei em um controle de navegador web de forma ganhadora:

  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); }); }; }