如何用C#打印PDF这个问题我试了快2天了。网上有很多或不太好的解决方案,但没有一个完全适合我的任务。任务:第一个解决方案使用Forms.WebBrowser来执行此操作如果我们安装了Adob??eReader,则有一个插件可以在webbrowser中显示PDF。使用此解决方案,我们有一个很好的预览和webbrowserControlName.Print()我们可以触发控件打印其内容。问题-我们还有一个PrintDialog。使用启动参数启动AcroRd32.exe下面的CMD命令让我们使用Adob??eReader打印PDF。InsertPathTo..AcroRd32.exe/t"C:\sample.pdf""printerNetworkprinterName"问题-我们需要AcroRd32.exe的绝对路径Adob??eReader窗口打开并且必须打开它直到打印作业准备就绪。使用Windows预设的Processprocess=newProcess();process.StartInfo.FileName=pathToPdf;process.StartInfo.Verb="printto";process.StartInfo.Arguments="""+打印机名称+""";过程.开始();process.WaitForInputIdle();处理.Kill();问题-仍然弹出Adob??eReader窗口,但它通常会在打印完成后自动关闭。解决方案-说服客户使用FoxitReader(不要使用最后两行代码)。将PDF页面转换为Drawing.Image我不知道如何在代码中执行此操作,但是当我让它工作时,剩下的就是小菜一碟。Printing.PrintDocument可以满足所有需求。任何人都想从这些PDF或其他方法中获取一些Drawing.Image如何做到这一点?最好的问候,Max我能找到的最灵活、最简单和性能最好的方法是使用GhostScript。它可以通过打印机名称直接打印到Windows打印机。“C:\A4页。-sPAPERSIZE=a4-dPDFFitPage另一种方法是使用.NET中的spooler功能将预先格式化的打印机数据发送到打印机。但不幸的是,您需要使用win32后台处理程序API您可以看到如何使用VisualC#.NET将原始数据发送到打印机您只能在打印机本身支持PDF文档时使用此方法。如果您可以选择商业图书馆,您可以尝试AmyuniPDFCreator。网。使用库直接打印:打开一个PDF文件并直接发送打印,可以使用方法IacDocument.Print。C#中的代码如下所示://从文件打开PDF文档FileStreamfile1=newFileStream("test.pdf",FileMode.Open,FileAccess.Read);IacDocumentdoc1=newIacDocument(null);doc1.Open(file1,"");//在没有提示的情况下将文档打印到指定的打印机doc1.Print("MyLaserPrinter",false);导出为图像(并根据需要打印):选项1:您可以使用IacDocument方法。ExportToJPeg将PDF中的所有页面转换为可以使用Drawing.Image打印或显示的JPG图像选项2:您可以使用方法System.Drawing.Graphics.FromImage通过方法IacDocument.DrawCurrentPage将每个页面绘制成位图。C#中的代码应如下所示:FileStreammyFile=newFileStream("test.pdf",FileMode.Open,FileAccess.Read);IacDocumentdoc=newIacDocument(null);文档打开(我的文件);doc.CurrentPage=1;图片img=newBitmap(100,100);图形gph=Graphics.FromImage(img);IntPtrhdc=gph.GetHDC();doc.DrawCurrentPage(hdc,false);gph.ReleaseHdc(hdc);免责声明:我在AmyuniTechnologies工作您可以使用ghostscript将PDF转换为图像格式。以下示例将单个PDF转换为一系列PNG文件:privatestaticvoidExecuteGhostscript(stringinput,stringtempDirectory){//%d将被ghostscript替换,每个页面都有一个数字stringfilename=Path.GetFileNameWithoutExtension(input)+"-%d.png";字符串输出=Path.Combine(tempDirectory,文件名);进程ghostscript=newProcess();ghostscript.StartInfo.FileName=_pathToGhostscript;ghostscript.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;ghostscript.StartInfo.Arguments=string.Format("-dSAFER-dBATCH-dNOPAUSE-sDEVICE=png16m-r300-sOutputFile="{0}""{1}"",输出,输入);ghostscript.开始();ghostscript.WaitForExit();如果您更喜欢使用Adob??eReader,您可以隐藏它的窗口:process.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;我发现使用printto动词的代码略有不同。我没试过,但也许它可以帮助你:http://vbcity.com/forums/t/149141.aspx我知道选项卡有Windows窗体;但是,由于一般标题,有些人可能想知道是否可以在WPF应用程序中找到它们使用该命名空间-他们可能会。这是代码:varfile=File.ReadAllBytes(pdfFilePath);varprintQueue=LocalPrintServer.GetDefaultPrintQueue();使用(varjob=printQueue.AddJob())使用(varstream=job.JobStream){stream.Write(file,0,file.Length);此命名空间现在必须与WPF应用程序一起使用。它与ASP.NET或Windows服务不兼容。它不应该与Windows窗体一起使用,因为它具有System.Drawing.Printing。使用上面的代码我的PDF打印没有任何问题。请注意,如果您的打印机不支持直接打印PDF文件,这将不起作用。使用PrintDocument类怎么样?http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.aspx您只需传递要打印的文件的文件名(基于示例)。HTHProcessproc=newProcess();proc.StartInfo.FileName=@"C:ProgramFilesAdobeAcrobat7.0ReaderAcroRd32.exe";proc.StartInfo.Arguments=@"/p/hC:DocumentsandSettingsbrendalDesktopTest.pdf";过程。StartInfo.UseShellExecute=false;proc.StartInfo.CreateNoWindow=true;proc.开始();for(inti=0;i如果您对满足您需求的商业解决方案感兴趣,有很多选择。我的公司在其中一个选项中提供了一个名为DebenuQuickPDFLibrary的开发人员工具包。这是一个代码示例(关键函数是PrintOptions和PrintDocument):/*打印文档*///从输入文件夹加载本地示例文件DPL.LoadFromFile("Test.pdf","");//配置打印选项iPrintOptions=DPL.PrintOptions(0,0,"PrintingSample")//使用上面配置的选项将当前文档打印为默认打印。//你也可以指定具体的打印机。DPL.PrintDocument(DPL.GetDefaultPrinterName(),1,1,iPrintOptions);我尝试了很多方法,最适合我的方法是从命令行启动SumatraPDF://LaunchSumatraPDFReadertoprintStringarguments="-print-to-default-silent""+fileName+""";System.Diagnostics.Process.Start("SumatraPDF.exe",arguments);这有很多优点:SumatraPDF比Adob??eAcrobatReader快得多。无法加载用户界面。它只是打印。您可以将SumatraPDF作为独立应用程序使用,将其包含在您的应用程序中,这样您就可以使用自己的pa。请注意,我没有阅读许可协议;你应该自己检查一下。截至2018年7月,OP仍然没有答案。没有免费的方法1)为闭源项目默默地打印您的pdf。1)您当然可以使用一个程序,即Adob??eAcrobat或FoxitReader2)免费解决方案具有GPL(GNU的通用公共许可证)。这意味着如果将软件(即使是免费的)提供给公司以外的任何人,则源代码必须是公开的。正如OP所说,如果您可以将PDF转换为Drawing.Image,则可以使用.NET方法打印它。不幸的是,执行此操作的软件也需要付费或GPL。以上就是C#学习教程:如何使用C#打印PDF分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注---本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
