私はこのコードを持っている:しかし、彼らは働いていない、印刷Ghostscriptを使用してグレースケールでプリンタにPDFおよび.NET
using (GhostscriptProcessor processor = new GhostscriptProcessor())
{
List<string> switches = new List<string>();
if (!printSettings.DefaultPageSettings.Color)
{
switches.Add("-sProcessColorModel=DeviceGray");
switches.Add("-sColorConversionStrategy=Gray");
switches.Add("-dOverrideICC");
}
switches.Add("-empty");
switches.Add("-dPrinted");
switches.Add("-dBATCH");
switches.Add("-dNOPAUSE");
switches.Add("-dNOSAFER");
switches.Add("-dNumCopies=" + printSettings.Copies.ToString());
switches.Add("-sDEVICE=mswinpr2");
switches.Add("-dDEVICEWIDTHPOINTS="+printSettings.DefaultPageSettings.PaperSize.Width.ToString());
switches.Add("-dDEVICEHEIGHTPOINTS="+printSettings.DefaultPageSettings.PaperSize.Height.ToString());
switches.Add("-dPDFFitPage");
switches.Add("-sOutputFile=%printer%" + printSettings.PrinterName);
switches.Add("-f");
switches.Add(filePath);
processor.StartProcessing(switches.ToArray(), null);
}
そして、私はthis questionからもらったはずのグレースケールで印刷に使用するスイッチを。 Ghostscriptを使ってPDFをプリンタにグレースケールで印刷する方法はありますか?
更新
プリンタに送信する前をグレースケールにPDFに変換書くために更新されたコード:
/*Call to print PDF*/
private void pdfPrint(String filePath) {
try {
using (GhostscriptProcessor processor = new GhostscriptProcessor())
{
List<string> switches = new List<string>();
if (!printSettings.DefaultPageSettings.Color)
{
filePath = pdfRenderBlackWhite(filePath);
if (!File.Exists(filePath))
{
return;
}
}
switches.Add("-empty");
switches.Add("-dPrinted");
switches.Add("-dBATCH");
switches.Add("-dNOPAUSE");
switches.Add("-dNOSAFER");
switches.Add("-dNumCopies=" + printSettings.Copies.ToString());
switches.Add("-sDEVICE=mswinpr2");
switches.Add("-dDEVICEWIDTHPOINTS="+printSettings.DefaultPageSettings.PaperSize.Width.ToString());
switches.Add("-dDEVICEHEIGHTPOINTS="+printSettings.DefaultPageSettings.PaperSize.Height.ToString());
switches.Add("-dPDFFitPage");
switches.Add("-sOutputFile=%printer%" + printSettings.PrinterName);
switches.Add("-f");
switches.Add(filePath);
processor.StartProcessing(switches.ToArray(), null);
}
} catch(Exception e) {
MessageBox.Show(e.GetType().ToString() + ' ' + e.StackTrace + '\n' + e.Message);
}
}
private string pdfRenderBlackWhite(string filePath)
{
String bwPDFFilePath = tempdir + "\\" + Path.GetFileName(filePath) + DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".PDF";
try
{
using (GhostscriptProcessor processor = new GhostscriptProcessor())
{
List<string> switches = new List<string>();
switches.Add("-empty");
switches.Add("-dPrinted");
switches.Add("-dBATCH");
switches.Add("-dNOPAUSE");
switches.Add("-dNOSAFER");
switches.Add("-sProcessColorModel=DeviceGray");
switches.Add("-sColorConversionStrategy=Gray");
switches.Add("-dOverrideICC");
switches.Add("-sDEVICE=pdfwrite");
switches.Add("-o");
switches.Add(bwPDFFilePath);
switches.Add("-f");
switches.Add(filePath);
processor.StartProcessing(switches.ToArray(), null);
}
return bwPDFFilePath;
}
catch (Exception e)
{
MessageBox.Show(e.GetType().ToString() + ' ' + e.StackTrace + '\n' + e.Message);
return bwPDFFilePath;
}
}
ええと、それでは2段階のプロセスになりますが、可能でしょうか?私はそれを恐れていましたが、少なくともそれは可能です、ありがとうございました。 – MDMoore313
中間色が常にRGBの場合は、カラープリンタ(特にCMYKカラープリンタ)が「カラー」で印刷されている可能性があります。それは、変換グレー→RGB→CMYKはしばしば100%の黒をもたらさないため、CMYとKの混合物を生成する可能性があるからです。ベストを試してみてください。 – KenS
私はあなたが何を意味しているか知っています.SOに類似の質問があり、プリンタはまだカラーインクを使ってグレースケールで印刷していると報告しています。私は今すぐコーディングしているので見てみましょう。 – MDMoore313