2011-05-29 13 views
11

प्रिंट करता है मेरे पास एक एएसपी.NET वेब एप्लिकेशन है जो पीडीएफ उत्पन्न करता है। मैं iTextSharp का उपयोग कर रहा हूँ। क्या होता है कि आप एक बटन पर क्लिक करते हैं और यह डाउनलोड करता है। मेरा नियोक्ता बटन पर क्लिक करने और प्रिंट संवाद के साथ खोलने में सक्षम होना चाहता है।एक पीडीएफ जेनरेट करें जो स्वचालित रूप से

+0

मुझे पूरा यकीन है कि यह संभव नहीं है। मैं एक पीडीएफ उत्पन्न नहीं करने की सिफारिश करता हूं, लेकिन एक वेब पेज जो विंडो को ट्रिगर करता है।प्रिंट() 'जैसे ही यह लोड हो जाता है। –

+0

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

+0

@ जो टायमैन: क्या यह एक छवि हो सकती है? एक पीएनजी या कुछ? आप इसे वेब पेज पर डाल सकते हैं। –

उत्तर

11

विधि 1: अपने पीडीएफ फाइलों अंदर एम्बेडेड जावास्क्रिप्ट का उपयोग आप एक javascript कॉल this.print(false) (आप इस के लिए new PdfAction(PdfAction.PRINTDIALOG) उपयोग कर सकते हैं) के साथ एक iText PDFAction वस्तु बनाने की कोशिश कर सकते हैं, और अपने पीडीएफ फाइल की OpenAction event के साथ संबद्ध।

iText जावा में कोड इस तरह दिखना चाहिए:

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("file.pdf")); 
... 
PdfAction action = new PdfAction(PdfAction.PRINTDIALOG); 
writer.setOpenAction(action); 
... 

यह सी # में भी विभिन्न नहीं होना चाहिए।

एक तरफ ध्यान दें के रूप में, यह भी संभव Amyuni PDF Creator .Net साथ दस्तावेज़ वर्ग (सामान्य अस्वीकरण लागू होता है) में विशेषता "AutoPrint" सही पर सेट करके है।

acPDFCreatorLib.Initialize(); 
acPDFCreatorLib.SetLicenseKey("Amyuni Tech.", "07EFCDA00...BC4FB9CFD"); 
Amyuni.PDFCreator.IacDocument document = pdfCreator1.Document; 

// Open a PDF document from file 
System.IO.FileStream file1 = new System.IO.FileStream("test_input.pdf", FileMode.Open, FileAccess.Read, FileShare.Read); 

IacDocument document = new IacDocument(null); 

if (document.Open(file1, "")) 
{ 
    //Set AutoPrint 
    document.Attribute("AutoPrint").Value = true; 

    //Save the document 
    System.IO.FileStream file2 = new System.IO.FileStream("test_output.pdf", System.IO.FileMode.Create, System.IO.FileAccess.Write); 
    document.Save(file2, Amyuni.PDFCreator.IacFileSaveOption.acFileSaveView); 
} 

// Disposing the document before closing the stream clears out any data structures used by the Document object 
document.Dispose(); 

file1.Close(); 

// terminate library to free resources 
acPDFCreatorLib.Terminate(); 

यह दृष्टिकोण पीडीएफ फाइल एक पाठक है कि मुद्रण का ख्याल रखेंगे में खोलने के लिए की आवश्यकता है, और यह दोष यह है कि अगर फ़ाइल स्थानीय रूप से सहेजा जाता है, हर बार जब फ़ाइल बाद में खोला जाता है पर यह दिखा देंगे है प्रिंट संवाद।

विधि 2: ब्राउज़र से जावास्क्रिप्ट का उपयोग पाठक के साथ संवाद करने के लिए फ़ाइल को दिखाता है जो फ़ाइल दिखाता है।

<html> 
<script language="javascript"> 
timerID = setTimeout("exPDF.print();", 1000); 
</script> 
<body> 
<object id="exPDF" type="application/pdf" data="111.pdf" width="100%" height="500"/> 
</body> 
</html> 

विचार ब्राउज़र में जावास्क्रिप्ट का उपयोग करने के पीडीएफ रीडर को निर्देश देने फ़ाइल को मुद्रित करने के लिए है:
मैं this SO प्रश्न में यह अन्य दृष्टिकोण है कि कोशिश कर रहा हो सकता है लायक पाया। यह दृष्टिकोण एक HTML पृष्ठ में एम्बेडेड पीडीएफ फाइलों पर काम करेगा।

+0

मैं इसे मंगलवार (लंबे सप्ताहांत) पर आज़माउंगा और देख सकता हूं कि यह काम करता है या नहीं। कोड सी # से अलग नहीं है। –

+0

यह काम किया! मैंने अभी पीडीएफएक्शन जोड़ा और यह बहुत अच्छा काम किया। –

+0

मुझे खुशी है कि यह काम किया! कृपया ध्यान रखें कि यह दृष्टिकोण केवल तभी काम करेगा जब क्लाइंट पक्ष पर स्थापित पीडीएफ रीडर पर जावास्क्रिप्ट सक्षम है। – yms

3

जैसा कि यम द्वारा उल्लिखित है, आप एक पीडीएफ उत्पन्न कर सकते हैं जिसमें जावास्क्रिप्ट या "नामित" पीडीएफ एक्शन है जो दस्तावेज़ खोले जाने पर प्रिंट संवाद दिखाता है। हमने लेख Create an Auto-Print PDF में हमारे उत्पाद Gnostice PDFOne .NET का उपयोग करके इसका प्रदर्शन किया है। मैं अनुमान लगाता हूं IText में ऐसा ही कर सकता है। यदि ब्राउज़र में एडोब रीडर पीडीएफ प्लगइन के रूप में पंजीकृत है, तो दोनों विकल्प काम करेंगे।

एचटीएमएल जावास्क्रिप्ट विकल्प केवल आईई में काम करता प्रतीत होता है।

अस्वीकरण: मैं नोस्टिस के लिए काम करता हूं।

4

इस साइट पर एक अन्य समाधान ... मैं इस समाधान का उपयोग और महान

मैं क्रिस्टल रिपोर्ट से एक पीडीएफ स्ट्रीम है काम करते हैं, और मैं pdfsharp

लिंक के साथ openaction जोड़ें: http://www.vo1dmain.info/pdfsharp-howto-inject-javascript-into-pdf-autoprinting-functionality#comments

public static MemoryStream AddAutoPrint(Stream pdfStream, bool ShowPrintDialog = true, int NumCopies = 1) 
{ 
    PdfSharp.Pdf.PdfDocument doc = PdfSharp.Pdf.IO.PdfReader.Open(pdfStream, PdfSharp.Pdf.IO.PdfDocumentOpenMode.Import); 
    PdfSharp.Pdf.PdfDocument outputDocument = new PdfSharp.Pdf.PdfDocument(); 

    for (int idx = 0; idx < doc.PageCount; idx++) 
    { 
    PdfSharp.Pdf.PdfPage p = doc.Pages[idx]; 
    outputDocument.AddPage(p); 
    } 

    outputDocument.Info.Author = "author name"; 

    string JSScript = string.Empty; 
    JSScript += "var pp = this.getPrintParams(); "; 

    if(NumCopies > 0) 
    { 
    JSScript += "pp.NumCopies = " + NumCopies.ToString() + "; "; 
    } 

    if(!ShowPrintDialog) 
    { 
    JSScript += "pp.interactive = pp.constants.interactionLevel.automatic; "; 
    } 


    JSScript += "this.print({printParams: pp}); "; 


    PdfSharp.Pdf.PdfDictionary dictJS = new PdfSharp.Pdf.PdfDictionary(); 
    dictJS.Elements["/S"] = new PdfSharp.Pdf.PdfName("/JavaScript"); 
    //dictJS.Elements["/JS"] = new PdfSharp.Pdf.PdfStringObject(outputDocument, "print(true);"); 
    //dictJS.Elements["/JS"] = new PdfSharp.Pdf.PdfStringObject(outputDocument, "this.print({bUI: false, bSilent: true, bShrinkToFit: true});"); 
    //dictJS.Elements["/JS"] = new PdfSharp.Pdf.PdfStringObject(outputDocument, "var pp = this.getPrintParams(); pp.NumCopies = 2; pp.interactive = pp.constants.interactionLevel.automatic; this.print({printParams: pp});"); 
    dictJS.Elements["/JS"] = new PdfSharp.Pdf.PdfStringObject(outputDocument, JSScript); 


    outputDocument.Internals.AddObject(dictJS); 

    PdfSharp.Pdf.PdfDictionary dict = new PdfSharp.Pdf.PdfDictionary(); 
    PdfSharp.Pdf.PdfArray a = new PdfSharp.Pdf.PdfArray(); 
    dict.Elements["/Names"] = a; 
    a.Elements.Add(new PdfSharp.Pdf.PdfString("EmbeddedJS")); 
    a.Elements.Add(PdfSharp.Pdf.Advanced.PdfInternals.GetReference(dictJS)); 

    outputDocument.Internals.AddObject(dict); 

    PdfSharp.Pdf.PdfDictionary group = new PdfSharp.Pdf.PdfDictionary(); 
    group.Elements["/JavaScript"] = PdfSharp.Pdf.Advanced.PdfInternals.GetReference(dict); 

    outputDocument.Internals.Catalog.Elements["/Names"] = group; 

    MemoryStream ms = new MemoryStream(); 

    outputDocument.Save(ms, false); 

    return ms; 
} 
0

अच्छी पुरानी फैशन ओएलई के बारे में कैसे? यह अभी भी सबसे सभी दस्तावेज़ परतों के द्वारा समर्थित है मैं की ... सी # में मैं सामान्य रूप से इस तरह .. जहां पीडीएफ, rtf, DOC, XLS ... कोई फर्क नहीं पड़ता ... वे सभी प्रिंट ..

कुछ करने के बारे में पता कर रहा हूँ
public void HandlePresentation(string fullFilePath, bool viewOnScreen, bool autoPrint) 
{ 
    ProcessStartInfo info = new ProcessStartInfo(fullFilePath); 
    if (autoPrint) 
    { 
     info.Verb = "Print"; 
     info.WindowStyle = ProcessWindowStyle.Hidden; // not normally required 
     Process.Start(info); 
     info.Verb = string.Empty; 
    } 

    if (viewOnScreen) 
    { 
     info.WindowStyle = ProcessWindowStyle.Normal; 
     Process.Start(info); 
    } 
} 
+0

मूल प्रश्न "एएसपी.नेट वेब एप्लिकेशन" निर्दिष्ट करते हैं। ओले इस परिदृश्य में मदद नहीं करता है क्योंकि आपके पास वेब पेज पर इसका उपयोग नहीं है। – yms

संबंधित मुद्दे