当前位置: 首页 > 编程语言 > C#

使用GhostScript打印PDF分享

时间:2023-04-10 17:06:37 C#

使用GhostScript打印PDF因为它拉了我一段时间,所以我需要您对以下问题的支持。我们有一个小的c#实用程序,它使用GhostScript打印给定的PDF。这按预期打印但无法保留页面格式。但是,当我切换到Adob??eAcrobat而不是GhostScript时,页面会按预期打印。所以我认为,我对GhostScript的命令行参数做了一些明显的错误。背景以下是核心c#逻辑,它在每一页上打印具有不同样式的给定PDF文件。给定的PDF文件有页面;字体样式和颜色不一致有的页面字体大小正常,有的页面打印得很小有的页面有建议的边距,有的页面边距很小有些页面是横向的,有些是纵向的简而言之,我要打印的PDF只是大量具有不同字体样式、大小的小型pdf文档的合并(将单个pdf合并成一个大pdf),边距。问题以下逻辑使用GhostScript(v9.02)打印PDF文件。虽然以下逻辑打印任何给定的PDF,但它无法保留页面格式,包括页眉、页脚、字体大小、边距、方向(我的pdf文件包含横向和纵向的页面)。有趣的是,如果我使用AcrobatReader打印相同的PDF,那么它会按预期打印以及所有页面级格式。PDF样本:第1节、第2节voidPrintDocument(){varpsInfo=newProcessStartInfo();psInfo.Arguments=String.Format("-dPrinted-dBATCH-dNOPAUSE-dNOSAFER-q-dNumCopies=1-sDEVICE=ljet4-sOutputFile="\\spool\{0}""{1}"",GetDefaultPrinter(),@"C:PDFOutputtest.pdf");psInfo.FileName=@"C:ProgramFilesgsgs9.10bingswin64c.exe";psInfo.UseShellExecute=false;使用(varprocess=Process.Start(psInfo)){process.WaitForExit();我想你之前问过这个问题,从你的代码示例中也可以清楚地看出你使用的是GSView,而不是Ghostscript。现在,虽然GSView确实使用Ghostscript来完成繁重的工作,但您无法区分这两个应用程序。您仍然没有提供要查看的示例PDF文件,也没有提供命令行,尽管您现在至少设法引用了Ghostscript版本。您还需要提供一个命令行(不是说我不会通过阅读您的代码来组装它),您应该从命令行而不是在您自己的应用程序中尝试此操作,以表明这不是您的应用程序错误。您应该考虑将Ghostscript升级到当前版本。请注意,快速阅读代码表明您指定了一些仅适用于将文件转换为PDF而不适用于任何其他目的(例如打印)的命令行选项(例如-dPDFSETTINGS)。正如我之前所说,提供一个示例文件来重现问题,以及导致问题的命令行(最好是Ghostscript命令行)。了解您使用的是哪台打印机也可能很有用,尽管我不太可能进行重复测试。答案-2013年12月16日更新我设法解决了这个问题,如果它对其他人有帮助,我希望附上一个有效的解决方案。特别感谢“KenS”,他花了很多时间指导我。总而言之,我最终决定使用GSView和GhostScript打印PDF以绕过Adob??e。内核传递如下://PrintParamter是一个自定义的数据结构,用于捕获文件相关信息var文件名=fs.FullyQualifiedName??字符串.空;打印机名=打印机名??获取默认打印机();//把你的打印机放在这里C:\ProgramFiles\gs\gs9.10\fonts"-noquery-dNumCopies=1-all-colour-printer"{0}""{1}"",printerName,filename);try{vargsProcessInfo=newProcessStartInfo{WindowStyle=ProcessWindowStyle.Hidden,FileName=gsViewEXEInstallationLocation,Arguments=processArgs};使用(vargsProcess=Process.Start(gsProcessInfo)){gsProcess.WaitForExit();}}你可以使用GSPRINT。我设法通过在目录中复制gsprint.exe/gswin64c.exe/gsdll64.dll并从那里启动它来让它工作。示例代码:以上为C#学习教程:使用GhostScript打印所有PDF分享的内容。如果对你有用,需要进一步了解C#学习教程,希望你多多关注——//这里使用gsprint(注意路径)privateconststringgsPrintExecutable=@"C:gsgsprint.exe";私有常量字符串gsExecutable=@"C:gsgswin64c.exe";stringpdfPath=@"C:myShinyPDF.PDF"stringprinterName="我的打印机";stringprocessArgs=string.Format("-ghostscript"{0}"-copies=1-all-printer"{1}""{2}"",gsExecutable,printerName,pdfPath);vargsProcessInfo=newProcessStartInfo{WindowStyle=ProcessWindowStyle.Hidden,FileName=gsPrintExecutable,Arguments=processArgs};使用(vargsProcess=Process.Start(gsProcessInfo)){gsProcess.WaitForExit();}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: