2008-11-07 6 views
23

में मौजूदा पीडीएफ (या अन्य फाइलें) प्रिंट करें मैं जिस एप्लिकेशन को बना रहा हूं, उससे मुझे मौजूदा पीडीएफ (अन्य ऐप द्वारा निर्मित) प्रिंट करने की आवश्यकता है। मैं इसे सी # में कैसे कर सकता हूं और एक तंत्र प्रदान कर सकता हूं ताकि उपयोगकर्ता एक अलग प्रिंटर या अन्य गुणों का चयन कर सके।सी #

मैंने प्रिंटडिअलॉग को देखा है लेकिन यह सुनिश्चित नहीं है कि यह कौन सी फाइल प्रिंट करने का प्रयास कर रही है, यदि कोई है, तो बी/सी आउटपुट हमेशा एक खाली पृष्ठ होता है। शायद मैं बस कुछ याद कर रहा हूँ।

क्या मुझे "iTextSharp" (जैसा कि अन्यथा सुझाया गया है) का उपयोग करने की आवश्यकता है? यह मेरे लिए अजीब लगता है क्योंकि मैं "प्रिंटर को फ़ाइल भेज सकता हूं" मेरे पास प्रिंटर सेट करने के लिए हाथ से पहले कोई अच्छा संवाद नहीं है और मैं वास्तव में जमीन से प्रिंटिंग संवाद नहीं लिखना चाहता लेकिन ऐसा लगता है कि खोज से मिले कई उदाहरण मैंने ऐसा ही किया।

कोई सलाह, उदाहरण या नमूना कोड बहुत अच्छा होगा!

यदि पीडीएफ समस्या है तो अन्य बिट द्वारा फ़ाइलों को बिटकमैप या पीएनजी जैसे भिन्न प्रारूप में बनाया जा सकता है यदि इससे चीज़ें आसान हो जाती हैं।

+0

किसी को भी यहाँ कौन जानता है, यादृच्छिक फ़ाइलों को मुद्रित करने के लिए कैसे बस pdfs नहीं? टोबी – Tobias

+3

@ टोबियास: यादृच्छिक फ़ाइलें यादृच्छिक ऐप्स से जुड़ी हैं। यहां तक ​​कि .doc वर्डपैड, वर्ड या ओपनऑफिस से जुड़ा जा सकता है। प्रत्येक ऐप का अपना प्रतिपादन होगा। इसलिए एकमात्र उपयोगी दृष्टिकोण ऐसा कुछ है जो फ़ाइल प्रकारों के लिए विंडोज़ फ़ाइल फाइलों को लेता है। –

+0

संबंधित प्रश्न: http://stackoverflow.com/questions/11579624/how-to-print-a-pdf-with-c-sharp – yms

उत्तर

1

आपको एक्रोबैट या कुछ अन्य एप्लिकेशन की आवश्यकता होगी जो पीडीएफ प्रिंट कर सकते हैं। दस्तावेज़ से प्रिंट करने के लिए वहां से आप पी/ShellExecute पर आमंत्रित करें।

+1

क्या आप उस कॉल के साथ प्रिंटर चयन और अन्य पैरामीटर पास कर सकते हैं? –

23

एक combobox के साथ एक छोटा सा संवाद प्रदर्शित करें जिसमें उसके आइटम स्ट्रिंग संग्रह पर सेट हैं PrinterSettings.InstalledPrinters द्वारा लौटाया गया है।

यदि आप इसे एक आवश्यकता बना सकते हैं कि GSView मशीन पर स्थापित किया जाए, तो आप चुपचाप पीडीएफ प्रिंट कर सकते हैं। यह थोड़ा धीमा और चौराहे है लेकिन कम से कम आपको एक्रोबैट को पॉप अप नहीं करना है।

private void PrintFormPdfData(byte[] formPdfData) 
    { 
     string tempFile; 

     tempFile = Path.GetTempFileName(); 

     using (FileStream fs = new FileStream(tempFile, FileMode.Create)) 
     { 
      fs.Write(formPdfData, 0, formPdfData.Length); 
      fs.Flush(); 
     } 

     try 
     { 
      string gsArguments; 
      string gsLocation; 
      ProcessStartInfo gsProcessInfo; 
      Process gsProcess; 

      gsArguments = string.Format("-grey -noquery -printer \"HP LaserJet 5M\" \"{0}\"", tempFile); 
      gsLocation = @"C:\Program Files\Ghostgum\gsview\gsprint.exe"; 

      gsProcessInfo = new ProcessStartInfo(); 
      gsProcessInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      gsProcessInfo.FileName = gsLocation; 
      gsProcessInfo.Arguments = gsArguments; 

      gsProcess = Process.Start(gsProcessInfo); 
      gsProcess.WaitForExit(); 
     } 
     finally 
     { 
      File.Delete(tempFile); 
     } 
    } 

आप देख सकते हैं, यह एक बाइट सरणी के रूप में पीडीएफ डेटा लेता है यह एक करने के लिए लिखते हैं:

यहाँ कुछ कोड मैं कुछ पीडीएफ़ है कि मैं एक यूपीएस वेब सेवा से वापस पाने के प्रिंट आउट करने के लिए उपयोग temp फ़ाइल, और नामित प्रिंटर ("एचपी लेजरजेट 5 एम") पर चुपचाप फ़ाइल मुद्रित करने के लिए gsprint.exe लॉन्च करता है। आप प्रिंटर नाम को अपने डायलॉग बॉक्स में जो कुछ भी चुना है उसके साथ बदल सकते हैं।

एक पीएनजी या जीआईएफ प्रिंट करना बहुत आसान होगा - बस प्रिंट डॉक्यूमेंट क्लास का विस्तार करें और विंडोज फॉर्म द्वारा प्रदान किए गए सामान्य प्रिंट संवाद का उपयोग करें।

शुभकामनाएं!

+0

इससे मुझे बहुत मदद मिली। मेरे पास एक इंट्रानेट वेब एप्लिकेशन है जिसमें नेटवर्क प्रिंटर को दस्तावेज़ मुद्रित करने की आवश्यकता है। अन्य सभी विधियां विफल रही हैं, लेकिन यह काम करता है! – Aaron

2

हालांकि यह वीबी है, आप आसानी से इसका अनुवाद कर सकते हैं। जिस तरह से एडोब पॉप अप नहीं करता है, यह केवल पीडीएफ प्रिंट करता है और फिर चला जाता है।

''' <summary> 
''' Start Adobe Process to print document 
''' </summary> 
''' <param name="p"></param> 
''' <remarks></remarks> 
Private Function printDoc(ByVal p As PrintObj) As PrintObj 
    Dim myProcess As New Process() 
    Dim myProcessStartInfo As New ProcessStartInfo(adobePath) 
    Dim errMsg As String = String.Empty 
    Dim outFile As String = String.Empty 
    myProcessStartInfo.UseShellExecute = False 
    myProcessStartInfo.RedirectStandardOutput = True 
    myProcessStartInfo.RedirectStandardError = True 

    Try 

     If canIprintFile(p.sourceFolder & p.sourceFileName) Then 
      isAdobeRunning(p)'Make sure Adobe is not running; wait till it's done 
      Try 
       myProcessStartInfo.Arguments = " /t " & """" & p.sourceFolder & p.sourceFileName & """" & " " & """" & p.destination & """" 
       myProcess.StartInfo = myProcessStartInfo 
       myProcess.Start() 
       myProcess.CloseMainWindow() 
       isAdobeRunning(p) 
       myProcess.Dispose() 
      Catch ex As Exception 
      End Try 
      p.result = "OK" 
     Else 
      p.result = "The file that the Document Printer is tryng to print is missing." 
      sendMailNotification("The file that the Document Printer is tryng to print" & vbCrLf & _ 
      "is missing. The file in question is: " & vbCrLf & _ 
      p.sourceFolder & p.sourceFileName, p) 
     End If 
    Catch ex As Exception 
     p.result = ex.Message 
     sendMailNotification(ex.Message, p) 
    Finally 
     myProcess.Dispose() 
    End Try 
    Return p 
End Function 
+0

सुमात्रा पीडीएफ में भी मूक प्रिंट कमांड लाइन तर्क है अगर gsview आपकी बात नहीं है। http://blog.kowalczyk.info/software/sumatrapdf/manual.html – jimueller

+0

@ जिमुएलर सुमात्रा पीडीएफ बहुत अच्छी तरह से काम करता है। बहुत बहुत धन्यवाद। :) – embarus

+0

शायद एडोब एक बार में चुपचाप मुद्रित लेकिन यह और नहीं है। इस वजह से डाउनवॉटिंग! – HK1

1

तुम भी PDFsharp इस्तेमाल कर सकते हैं - यह बनाने और पीडीएफ़ जोड़ तोड़ के लिए एक खुला स्रोत पुस्तकालय है। http://www.pdfsharp.net/

+6

ध्यान दें कि PDFSharp प्रिंट करने के लिए एडोब रीडर का उपयोग करता है। एडोब रीडर के साथ मूक प्रिंटिंग एडोब और थोड़ा हैकी द्वारा असमर्थित है। लेखकों ने इसे स्रोत में भी नोट किया है। http://pdfsharp.codeplex.com/SourceControl/changeset/view/51421#707803 – jimueller

0

मैं अपने प्रोजेक्ट के लिए एक ही बात कर रहा हूँ और इसके लिए मुझे

काम करता है, तो यह आपकी मदद कर सकता देखें ...

Process p = new Process(); 
p.EnableRaisingEvents = true; //Important line of code 
p.StartInfo = new ProcessStartInfo() 
{ 
    CreateNoWindow = true, 
    Verb = "print", 
    FileName = file, 
    Arguments = "/d:"+printDialog1.PrinterSettings.PrinterName 
}; 
try 
{ 
    p.Start(); 
} 
catch 
{ 
    /* your fallback code */ 
} 

तुम भी खिड़कियों के विभिन्न विकल्पों के साथ खेल सकते हैं

PRINT कमांड वांछित आउटपुट प्राप्त करने के लिए ...Reference link

2

इस कार्य के बारे में अधिक शोध और गुगल होने के बाद माइक्रोसॉफ्ट ने किसी भी अन्य अनुप्रयोगों के बिना पीडीएफ प्रिंट करने के लिए एक महान केबी जारी किया है। एडोब या भूतप्रिंट को कॉल करने की आवश्यकता नहीं है। यह डिस्क पर फ़ाइल को सहेजने के बिना प्रिंट कर सकता है जीवन को बहुत आसान बनाता है।

http://support2.microsoft.com/?kbid=322091

+0

यह * कुछ * प्रिंटर पर काम करता है। प्रिंटर को पीडीएफ फाइलों को संसाधित करने में सक्षम होना चाहिए। यदि ऐसा नहीं होता है, तो पीडीएफ फाइल प्रिंट करती है जैसे कि यह एक टेक्स्ट फ़ाइल थी। –