imprimir - rawprint c#
Imprimir Pdf en C# (13)
Soy nuevo en c #. Estaba buscando en toda la red tutoriales sobre cómo imprimir pdf, pero no pude encontrar uno.
Entonces pensé: ¿es posible leerlo usando itextpdf, como se menciona aquí?
Lectura de contenido PDF con itextsharp dll en VB.NET o C #
luego imprímelo. ¿Si es así, cómo?
Abra, importe, edite, fusione, convierta documentos PDF de Acrobat con algunas líneas de código utilizando la API intuitiva de Ultimate PDF. Al usar un código administrado al 100% escrito en C #, el componente aprovecha las numerosas funciones incorporadas de .NET Framework para mejorar el rendimiento. Además, la biblioteca cumple con CLS y no utiliza bloques inseguros para requisitos de permisos mínimos. Las clases están completamente documentadas con un código de ejemplo detallado que ayuda a acortar su curva de aprendizaje. Si su entorno de desarrollo es Visual Studio, disfrute de la integración completa de la documentación en línea. Simplemente marque o seleccione una palabra clave y presione F1 en su Visual Studio IDE, y la documentación en línea se representa al instante. Una biblioteca de PDF de alto rendimiento y confiable que le permite agregar funcionalidad PDF a sus aplicaciones .NET fácilmente con unas pocas líneas de código.
Depende de lo que intenta imprimir. Necesita una aplicación de impresora pdf de terceros o si está imprimiendo sus datos, puede usar el visor de informes en Visual Studio. Puede generar informes en excel y archivos pdf.
Es posible usar Ghostscript para leer archivos PDF e imprimirlos en una impresora con nombre.
Escribí un muy (!) pequeño método de ayuda alrededor del adobereader para imprimir en bloque pdf desde 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;
}
uno no puede confiar en el valor de retorno del método por cierto ...
La forma más fácil es crear C # Process e iniciar una herramienta externa para imprimir su archivo 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();
}
El código anterior ejecuta RawFilePrinter.exe (similar a 2Printer.exe), pero con un mejor soporte. No es gratis, pero al hacer una donación le permite usarlo en todas partes y redistribuir con su aplicación. Última versión para descargar: http://bigdotsoftware.pl/rawfileprinter
Otro enfoque, si simplemente desea imprimir un archivo PDF mediante programación, es usar el comando LPR: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/lpr.mspx?mfr=true
LPR también está disponible en las versiones más nuevas de Windows (por ejemplo, Vista / 7), pero debe habilitarlo en los Componentes opcionales de Windows.
Por ejemplo:
Process.Start("LPR -S printerdnsalias -P raw C:/files/file.pdf");
También puede usar la dirección IP de la impresora en lugar del alias.
Esto supone que su impresora admite la impresión directa PDF, de lo contrario, esto solo funcionará para los archivos PostScript y ASCII. Además, la impresora necesita tener una interfaz de red instalada y usted necesita saber su dirección IP o alias.
Parece que los sospechosos habituales como pdfsharp y migradoc no pueden hacer eso (pdfsharp solo si tiene instalado Acrobat (Reader)).
Encontré aquí
código listo para copiar / pegar. Utiliza la impresora predeterminada y, por lo que puedo ver, ni siquiera usa ninguna biblioteca, enviando directamente los bytes de pdf a la impresora. Así que supongo que la impresora también debe ser compatible, en una impresora de 10 años que probé esto funcionó a la perfección.
La mayoría de los otros enfoques, sin bibliotecas comerciales o aplicaciones, requieren que se dibuje en el contexto del dispositivo de impresión. Puede hacerlo pero tardará un tiempo en descifrarlo y hacerlo funcionar en las impresoras.
Puede crear el documento PDF utilizando PdfSharp . Es una biblioteca .NET de código abierto.
Al tratar de imprimir el documento empeora. He buscado por completo una forma de hacerlo de código abierto . Hay algunas maneras de hacerlo usando AcroRd32.exe pero todo depende de la versión, y no se puede hacer sin que el lector acrobat permanezca abierto.
Finalmente terminé usando VintaSoftImaging.NET SDK . Cuesta algo de dinero, pero es mucho más barato que la alternativa y resuelve el problema realmente fácil.
var doc = new Vintasoft.Imaging.Print.ImagePrintDocument { DocumentName = @"C:/Test.pdf" };
doc.Print();
Eso solo se imprime en la impresora predeterminada sin mostrar. Hay varias alternativas y opciones.
También es posible hacerlo con un navegador web incorporado, tenga en cuenta que, dado que puede tratarse de un archivo local, y también porque en realidad no es el navegador directamente y no hay DOM, por lo que no hay un estado listo.
Aquí está el código para el enfoque que trabajé en un control de navegador web de forma ganadora:
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);
});
};
}
Te aconsejo que pruebes la herramienta de línea de comandos de 2Printer desde: http://www.doc2prn.com/
El siguiente ejemplo de línea de comando para imprimir todos los archivos PDF desde la carpeta "C: / Entrada". Puedes llamarlo desde tu código C #.
2Printer.exe -s "C: / Input * .PDF" -prn "Canon MP610 series Printer"
Tuve el mismo problema al imprimir un archivo PDF. Hay un paquete nuget llamado Spire.Pdf que es muy simple de usar. La versión gratuita tiene un límite de 10 páginas aunque, en mi caso, fue la mejor solución una vez que no quiero depender de Adobe Reader y no quiero instalar ningún otro 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();
Un enfoque muy directo es usar un Adobe Reader instalado o cualquier otro visor 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( );
Otra forma es usar un componente de terceros, por ejemplo, PDFView4NET
Use PDFiumViewer. Busqué durante mucho tiempo hasta que encontré una solución similar, luego encontré esta pieza limpia de código que no depende del envío de archivos sin formato a la impresora (lo cual es malo si se interpretan como archivos de texto ...) o si se usa Acrobat o Ghostscript como ayudante (ambos necesitarían ser instalados, lo cual es una molestia):
https://.com/a/41751184/586754
PDFiumViewer viene a través de Nuget, el ejemplo de código anterior está completo. Pase en valores nulos para usar la impresora predeterminada.