2016-10-22 51 views
0

私はこのコードを持っている:しかし、彼らは働いていない、印刷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; 
    } 
} 

答えて

1

あなたはそこからの回答をコピーするための質問を選びました適切ではない。質問は、レンダリングを行わないpdfwriteデバイスに固有のもので、レンダリングされた出力が必要です。 'ColorConversionStrategy'スイッチはpdfwriteデバイスでのみ動作します(他のPDF固有のスイッチも含めて)

mswinpr2デバイスは、 。プリンタがモノクロまたはグレースケールの場合は、Windowsプリントシステムが変換処理を行います(CMYKの場合と同様)。

入力をグレースケールに変換してから先にと入力すると、元のPDFファイルのグレースケール表現を作成して印刷することができます。

または、プリンタがグレースケールで印刷するように指示されている場合は、印刷ダイアログからそのように設定できます。

+0

ええと、それでは2段階のプロセスになりますが、可能でしょうか?私はそれを恐れていましたが、少なくともそれは可能です、ありがとうございました。 – MDMoore313

+0

中間色が常にRGBの場合は、カラープリンタ(特にCMYKカラープリンタ)が「カラー」で印刷されている可能性があります。それは、変換グレー→RGB→CMYKはしばしば100%の黒をもたらさないため、CMYとKの混合物を生成する可能性があるからです。ベストを試してみてください。 – KenS

+0

私はあなたが何を意味しているか知っています.SOに類似の質問があり、プリンタはまだカラーインクを使ってグレースケールで印刷していると報告しています。私は今すぐコーディングしているので見てみましょう。 – MDMoore313

関連する問題