2016-07-20 139 views
1

有沒有辦法打印PDF並選擇以編程方式使用的紙盒?使用不同的打印機托盤打印PDF c#

我願意接受諸如將PDF轉換爲其他格式並從那裏打印的建議。

我可以使用PaperSource()和PrintDocument()打印到正確的紙盒,是否可以將PDF轉換爲這些函數可以理解的格式?

感謝。

+0

你試過產生不同的紙張大小的PDF文檔?你現在用什麼代碼生成PDF文件?您的打印機可以理解哪些腳本? – zipzit

+0

我正在使用PDF表格並使用iTextSharp進行編輯,然後保存爲PDF,不知道打印機將理解哪些腳本 –

+0

我認爲您需要[PaperCut](http://www.papercut.com/tour/advanced-scripting /)或類似的東西。我懷疑用正確的打印機腳本工具,您可以通過文件名提取來確定使用哪個紙盒。 E. G.'Filename_big.pdf'與'Filename_little.pdf' – zipzit

回答

1

基於從類似here on MSDN越來越紙盒PaperSource,如果你不介意使用Ghostscript.NET,這應該爲你工作:

public void PrintPdf(string filePath, string printQueueName, PaperSource paperTray) 
{ 
    using (ManualResetEvent done = new ManualResetEvent(false)) 
    using (PrintDocument document = new PrintDocument()) 
    { 
     document.DocumentName = "My PDF"; 
     document.PrinterSettings.PrinterName = printQueueName; 
     document.DefaultPageSettings.PaperSize = new PaperSize("Letter", 850, 1100); 
     document.DefaultPageSettings.PaperSource = paperTray; 
     document.OriginAtMargins = false; 

     using (var rasterizer = new GhostscriptRasterizer()) 
     { 
      var lastInstalledVersion = 
       GhostscriptVersionInfo.GetLastInstalledVersion(
         GhostscriptLicense.GPL | GhostscriptLicense.AFPL, 
         GhostscriptLicense.GPL); 

      rasterizer.Open(filePath, lastInstalledVersion, false); 

      int xDpi = 96, yDpi = 96, pageNumber = 0; 

      document.PrintPage += (o, p) => 
      { 
       pageNumber++; 
       p.Graphics.DrawImageUnscaledAndClipped(
        rasterizer.GetPage(xDpi, yDpi, pageNumber), 
        new Rectangle(0, 0, 850, 1100)); 
       p.HasMorePages = pageNumber < rasterizer.PageCount; 
      }; 

      document.EndPrint += (o, p) => 
      { 
       done.Set(); 
      }; 

      document.Print(); 
      done.WaitOne(); 
     } 
    } 
}