c#通过PDF驱动程序打印,打印到文件选项将输出PS而不是PDF

时间:2017-06-21 14:04:48

标签: c#

经过一整天的努力,我发现了问题,但这并没有解决我的问题。

总之:

我需要打开PDF,转换为BW(灰度),搜索一些单词并在找到的单词附近插入一些注释。初看起来似乎很容易,但我发现了如何处理难以处理的PDF文件(没有“单词”概念等等)。

现在第一个任务,转换为灰度只是让我发疯。我没有找到商业或免费的工作解决方案。我提出了这个解决方案:

  • 打开PDF
  • 使用Windows驱动程序打印,一些免费的PDF打印机

这非常难看,因为我会强迫C#用户安装这样的第三方SW但是......那是fpr的时刻。我测试了FreePDF,CutePDF和PDFCreator。所有人都按照预期“独立”工作。

现在,当我尝试从C#打印时,显然,我不想要打印对话框,只需选择BW选项并打印(也称为转换)

以下代码仅使用PDF库,仅为清晰起见而显示。

                Aspose.Pdf.Facades.PdfViewer viewer = new Aspose.Pdf.Facades.PdfViewer();
                viewer.BindPdf(txtPDF.Text);

                viewer.PrintAsGrayscale = true;
                //viewer.RenderingOptions = new RenderingOptions { UseNewImagingEngine = true };

                //Set attributes for printing
                //viewer.AutoResize = true;         //Print the file with adjusted size
                //viewer.AutoRotate = true;         //Print the file with adjusted rotation
                viewer.PrintPageDialog = true;   //Do not produce the page number dialog when printing

                ////PrinterJob printJob = PrinterJob.getPrinterJob();

                //Create objects for printer and page settings and PrintDocument
                System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
                System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
                //System.Drawing.Printing.PrintDocument prtdoc = new System.Drawing.Printing.PrintDocument();


                //prtdoc.PrinterSettings = ps;

                //Set printer name
                //ps.PrinterName = prtdoc.PrinterSettings.PrinterName;


                ps.PrinterName = "CutePDF Writer";
                ps.PrintToFile = true;

                ps.PrintFileName = @"test.pdf";
                //
                //ps.

                //Set PageSize (if required)
                //pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);

                //Set PageMargins (if required)
                //pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);

                //Print document using printer and page settings
                viewer.PrintDocumentWithSettings(ps);
                //viewer.PrintDocument();

                //Close the PDF file after priting

我发现并且似乎很少解释,如果你选择

ps.PrintToFile = true;

无论是C#PDF库还是PDF打印机驱动程序,Windows都会跳过PDF驱动程序而不是PDF文件会输出PS(postscript),显然,Adobe Reader无法识别。

现在的问题(我很肯定其他可能想要从C#打印PDF的人)是如何打印到CutePDF的例子,并且仍然禁止任何文件名对话框?

换句话说,只需使用C#应用程序中以编程方式选择的文件名进行静默打印。或者以某种方式说服“打印到文件”来浏览PDF驱动程序,而不是Windows默认的PS驱动程序。

非常感谢任何提示。

1 个答案:

答案 0 :(得分:0)

我用这个帖子解决了使用商业组件转换为灰度的问题,我还在那里发布了我的完整解决方案,小心点,任何人都会像我一样挣扎。

Converting PDF to Grayscale pdf using ABC PDF