प्रिंट <div id = "printarea"> </ div> केवल?


444

मैं संकेतित div (पृष्ठ पर अन्य सभी सामग्री को मैन्युअल रूप से अक्षम किए बिना) कैसे प्रिंट कर सकता हूं?

मैं एक नए पूर्वावलोकन संवाद से बचना चाहता हूं, इसलिए इस सामग्री के साथ एक नई विंडो बनाना उपयोगी नहीं है।

पृष्ठ में कुछ तालिकाओं के जोड़े हैं, उनमें से एक में वह div है जिसे मैं प्रिंट करना चाहता हूं - तालिका को वेब के लिए दृश्य शैलियों के साथ स्टाइल किया गया है, जिसे प्रिंट में नहीं दिखाना चाहिए।


1
stackoverflow.com/questions/2255291/… यह लिंक एकदम सही काम करता है
जिन्ना बलु

जवाबों:


792

यहां केवल सीएसएस का उपयोग करके एक सामान्य समाधान है , जिसे मैंने काम करने के लिए सत्यापित किया है।

@media print {
  body * {
    visibility: hidden;
  }
  #section-to-print, #section-to-print * {
    visibility: visible;
  }
  #section-to-print {
    position: absolute;
    left: 0;
    top: 0;
  }
}

वैकल्पिक दृष्टिकोण इतने अच्छे नहीं हैं। प्रयोग करना displayमुश्किल है क्योंकि अगर कोई तत्व है display:noneतो उसका कोई वंशज भी प्रदर्शित नहीं करेगा। इसका उपयोग करने के लिए, आपको अपने पृष्ठ की संरचना को बदलना होगा।

visibilityजब आप वंशजों के लिए दृश्यता को चालू कर सकते हैं तो बेहतर तरीके से काम करना । अदृश्य तत्व अभी भी लेआउट को प्रभावित करते हैं, इसलिए मैं section-to-printऊपर बाईं ओर जाता हूं ताकि यह ठीक से प्रिंट हो जाए।


21
यह अब तक का सबसे तेज़ और सबसे स्वच्छ तरीका है, मुझे आश्चर्य है कि इस उत्तर को सबसे अधिक वोट क्यों नहीं मिले।
दानी खलीफा

34
इस समाधान के साथ देखने के लिए एक समस्या यह है कि आप कुछ मामलों में हजारों रिक्त पृष्ठों को प्रिंट कर सकते हैं। मेरे मामले में मैं कुछ अतिरिक्त प्रदर्शन का उपयोग करके इसे हल करने में सक्षम था: चयनित वस्तुओं के लिए कोई भी स्टाइल नहीं है, लेकिन शायद एक अधिक सामान्य समाधान भी ऊंचाइयों को मजबूर करने के कुछ संयोजन से प्राप्त होता है, अतिप्रवाह: कोई नहीं और सभी divs या कुछ के लिए पूर्ण स्थिति।
मैल्कम मैकलेड

5
यह एक शानदार शुरुआत है लेकिन मुझे इसके साथ दो परेशानी थी: एक के लिए अगर किसी तत्व के माता-पिता ने अपने स्वयं के रिश्तेदार / निरपेक्ष स्थिति की स्थापना की तो सामग्री तब भी ऑफसेट होगी जब तक कि मैं position:fixedइसके बजाय उपयोग नहीं करता। हालांकि, क्रोम और सफारी भी पहले पेज के बाद कंटेंट को अलग कर देंगे। तो मेरा अंतिम वैकल्पिक हल दोनों लक्ष्य रखा था और अपने सभी माता-पिता के लिएoverflow:visible; position:absolute !important; top:0;left:0
natevw

1
@ dudeNumber4 #section-to-printखंड से ही मेल खाता है; #section-to-print *अनुभाग के प्रत्येक उप-तत्व से मेल खाता है। तो यह नियम केवल अनुभाग और उसकी सभी सामग्री को दृश्यमान बनाता है।
बेनेट McElwee

3
आप जावास्क्रिप्ट समाधान की कोशिश कर सकते हैं, लेकिन यह काम नहीं करेगा यदि आपका उपयोगकर्ता ब्राउज़र के प्रिंट कमांड का उपयोग करता है।
बेनेट मैकलेवे

243

मेरे पास न्यूनतम कोड के साथ एक बेहतर समाधान है।

एक आईडी के साथ एक div के अंदर अपने मुद्रण योग्य भाग रखें:

<div id="printableArea">
      <h1>Print me</h1>
</div>

<input type="button" onclick="printDiv('printableArea')" value="print a div!" />

फिर एक घटना पर एक ऑनक्लिक जोड़ें (जैसा कि ऊपर दिखाया गया है), और डिव की आईडी पास करें जैसे मैंने ऊपर किया था।

अब चलो एक बहुत ही सरल जावास्क्रिप्ट बनाएँ:

function printDiv(divName) {
     var printContents = document.getElementById(divName).innerHTML;
     var originalContents = document.body.innerHTML;

     document.body.innerHTML = printContents;

     window.print();

     document.body.innerHTML = originalContents;
}

ध्यान दें कि यह कितना सरल है? कोई पॉपअप, कोई नई खिड़कियां, कोई पागल स्टाइल, कोई जेएस लाइब्रेरी जैसे जॉकरी। वास्तव में जटिल समाधानों के साथ समस्या (जवाब जटिल नहीं है और न कि मैं जिसका उल्लेख कर रहा हूं) यह तथ्य है कि यह कभी भी सभी ब्राउज़रों में अनुवाद करेगा! यदि आप शैलियों को अलग बनाना चाहते हैं, तो चेक किए गए उत्तर में एक स्टाइलशीट लिंक (मीडिया = "प्रिंट") मीडिया विशेषता को जोड़कर दिखाए।

कोई फुलाना, हल्के, यह सिर्फ काम करता है।


@ केविन मैं फॉर्म के लिए यह कोशिश करता हूं, लेकिन यह खाली फॉर्म (बिना डेटा के) प्रिंट करता है और सबमिट करने से पहले प्रिंट करने के लिए मुझे भरे हुए फॉर्म की जरूरत होती है
आरिफ

98
@asprin चेतावनी! यह मेस फ्री कोड नहीं है। आंतरिक HTML का उपयोग करने के लिए फिर से मिटा देना पूरे शरीर को सरल पृष्ठों के लिए ठीक है, लेकिन अधिक उन्नत अनुकूलन (मेनू, स्लाइडशो, आदि) के साथ यह अन्य लिपियों द्वारा जोड़े गए कुछ गतिशील व्यवहारों को मिटा सकता है।
क्रिस्टोफ

17
यह समाधान किसी भी जटिल पृष्ठ पर काम नहीं करने वाला है जहां मुद्रण योग्य क्षेत्र में तत्व शैलियों और / या मूल तत्वों की स्थिति पर निर्भर करते हैं। यदि आप प्रिंट करने योग्य div को निकालते हैं, तो यह पूरी तरह से अलग दिख सकता है क्योंकि सभी माता-पिता अब गायब हैं।
आंद्रेई वोल्जिन

1
दुख की बात है कि क्रोम में अच्छा काम नहीं करता है यदि आप प्रिंट पूर्वावलोकन विंडो को बंद करते हैं तो एक jQuery करने की कोशिश करें .click। यह शर्म की बात है, क्योंकि कोड बहुत हल्का है।
रयबो १११

3
@BorisGappov मेरी बात साबित करने के लिए सिर्फ एक क्लिक घटना के साथ एक बहुत ही सरल उदाहरण: jsfiddle.net/dc7voLzt मैं इसे फिर से कहूंगा: यह गड़बड़-मुक्त कोड नहीं है! मुद्दा स्वयं प्रिंट के साथ नहीं है, यह मूल पृष्ठ को पुनर्स्थापित करने के बारे में है!
क्रिस्टोफ़

121

अब तक के सभी जवाब बहुत त्रुटिपूर्ण हैं - उनमें या तो class="noprint"सब कुछ शामिल है या displayभीतर गड़बड़ हो जाएगा #printable

मुझे लगता है कि गैर-मुद्रण योग्य सामान के आसपास एक आवरण बनाने के लिए सबसे अच्छा समाधान होगा:

<head>
    <style type="text/css">

    #printable { display: none; }

    @media print
    {
        #non-printable { display: none; }
        #printable { display: block; }
    }
    </style>
</head>
<body>
    <div id="non-printable">
        Your normal page contents
    </div>

    <div id="printable">
        Printer version
    </div>
</body>

बेशक यह बिल्कुल सही नहीं है क्योंकि इसमें आपके HTML में चीजों को थोड़ा-थोड़ा करके घुमाना शामिल है ...


मुझे लगता है कि आप सही हैं, लेकिन मैं div के आसपास की तालिका की स्टाइलिंग को कैसे मार सकता हूं (यदि स्टाइल को हटाने के लिए संभव है - मैं तालिका को प्रिंट कर सकता हूं और बाकी सामग्री को काफी आसानी से बाहर कर सकता
हूं

मैं जावास्क्रिप्ट का उपयोग करने के लिए आवश्यक सामग्री और ऊपर की तरह सीएसएस का उपयोग करता हूं
13

9
मैं शब्दार्थ HTML का उपयोग करना पसंद करता हूं। प्रिंट फॉर्मेटिंग को आदर्श रूप से CSS द्वारा नियंत्रित किया जाना चाहिए। ऐसा करने के लिए मेरा जवाब देखें: stackoverflow.com/questions/468881/…
बेनेट McElwee

बेनेट के साथ सहमत
हूं

मैंने इस थ्रेड पर निचले हिस्से में एक बहुत ही सरल समाधान किया है जो मुझे लगता है कि पूछने वाले की आवश्यकताओं के अनुरूप बेहतर होगा। यह एक प्रिंट स्टाइलशीट पर भरोसा नहीं करता है, इसे आपकी वेबसाइट पर पुनर्नवीनीकरण किया जा सकता है, और अविश्वसनीय रूप से हल्का है।
केविन फ्लोरिडा

108

JQuery के साथ यह इस रूप में सरल है:

w=window.open();
w.document.write($('.report_left_inner').html());
w.print();
w.close();

3
यह बहुत अच्छा है, यह क्रोम में एक अवरुद्ध पॉपअप के रूप में दिखाता है।
रफी जैकब

8
चाल उपयोगकर्ता द्वारा जनरेट किए गए ईवेंट जैसे कि माउस क्लिक पर कॉल करना है। आप पहली पंक्ति के बाद भी जोड़ सकते हैं: अगर (? w) अलर्ट ('कृपया पॉप-अप सक्षम करें');
22

1
किसी को भी IE11 पर यह काम कर रहा है? यह सिर्फ एक विंडो खोलता है और फिर इसे तुरंत बंद कर देता है। हालांकि क्रोम, एफएफ और सफारी में काम करता है।
२१:१or पर महानवित्नर्थ

3
मैंने इस से छपाई करते समय सीएसएस खो दिया है, क्या सीएसएस बनाए रखने का कोई तरीका है?
मोक्सीत खान

2
@MoxetKhan, इस पोस्ट में css vevlo.com/how-to-print-div-content-use-javascript
lakesare

22

क्या आप प्रिंट स्टाइलशीट का उपयोग कर सकते हैं , और सीएसएस का उपयोग उस सामग्री को व्यवस्थित करने के लिए कर सकते हैं जिसे आप प्रिंट करना चाहते थे? अधिक पॉइंटर्स के लिए यह लेख पढ़ें


मेरे पास एक प्रिंट स्टाइल शीट है - अन्य सभी सामग्री में एक शैली नियम लगाने से बचने की कोशिश कर रहा है ...
noesgard

मेरे पास स्टाइल के साथ एक तालिका है, प्रश्न में div को समेटते हुए, यदि मैं प्रदर्शित करने के लिए तालिका सेट करता हूं: कोई नहीं - क्या मैं अभी भी div प्रदर्शित कर सकता हूं?
दोपहर २२'२

मुझे ऐसा लगता है कि हाँ, और आप नियम को चिन्हित करने का प्रयास कर सकते हैं!
पॉल डिक्सन

यदि तालिका प्रदर्शित नहीं होती है, तो यह तब भी मायने नहीं रखेगा, जब div 'प्रदर्शन: भयानक;' पर सेट हो। माता-पिता छिपे हुए हैं और इसलिए बच्चे हैं। क्या यह एक ऐसी स्थिति है जहाँ आपको टेबल की जरूरत है या यह सिर्फ पेज लेआउट के लिए है?
रॉबोरके

"एकदम सर पे निशाना!" टेबल लेआउट द्वारा। = |
एवेज़

19

यह अच्छी तरह से काम करता है:

<style type="text/css">
@media print
{
body * { visibility: hidden; }
#printcontent * { visibility: visible; }
#printcontent { position: absolute; top: 40px; left: 30px; }
}
</style>

ध्यान दें कि यह केवल "दृश्यता" के साथ काम करता है। "प्रदर्शन" ऐसा नहीं करेगा। FF3 में परीक्षण किया गया।


15

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

body > *:not(.printableArea) {
    display: none;
}

//Not needed if already showing
body > .printableArea {
    display: block;
}

अन्य स्थानों पर प्रिंट करने योग्य देख रहे लोगों के लिए, आपको यह सुनिश्चित करने की आवश्यकता होगी कि प्रिंट करने योग्य के माता-पिता दिखाए गए हैं:

body > *:not(.parentDiv),
.parentDiv > *:not(.printableArea) {
    display: none;
}

//Not needed if already showing
body > .printableArea {
    display: block;
}

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

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

मैं जावास्क्रिप्ट का सुझाव नहीं दूंगा क्योंकि आपको एक प्रिंट बटन की आवश्यकता होगी जो उपयोगकर्ता क्लिक करता है और मानक ब्राउज़र प्रिंट बटन का समान प्रभाव नहीं होगा। यदि आपको वास्तव में ऐसा करने की आवश्यकता है, तो मैं जो करूंगा वह शरीर के html को संग्रहीत करना है, सभी अवांछित तत्वों को हटाएं, प्रिंट करें, फिर html को वापस जोड़ें। जैसा कि उल्लेख किया गया है, मैं इससे बचता हूं अगर आप ऊपर की तरह सीएसएस विकल्प का उपयोग कर सकते हैं।

नोट: आप इनलाइन शैलियों का उपयोग करके सीएसएस को प्रिंट सीएसएस में जोड़ सकते हैं:

<style type="text/css">
@media print {
   //styles here
}
</style>

या जैसे मैं आमतौर पर उपयोग एक लिंक टैग है:

<link rel="stylesheet" type="text/css" media="print" href="print.css" />

क्या होगा यदि आप जिस डिव को प्रिंट करना चाहते हैं वह "शरीर का तत्काल बच्चा" नहीं है? मैं vue.js में ऐसा करने की कोशिश कर रहा हूं .. लेकिन मुझे स्वीकृत उत्तर का उपयोग करते समय बहुत सारे खाली पृष्ठ मिल रहे हैं।
स्वेनिमा

@svenema, आप अपनी इच्छानुसार किसी भी CSS का उपयोग कर सकते हैं। यह सिर्फ एक उदाहरण था।
fanfavorite

हम्म, फिर भी, जब मैं यह कोशिश करता हूं, तो वास्तव में कोई अतिरिक्त रिक्त पृष्ठ नहीं होते हैं, लेकिन प्रिंट करने योग्य div भी नहीं दिखा रहा है; जब मैं इस कोड का उपयोग करता हूं तो मेरे पास केवल 1 खाली खाली पृष्ठ होता है।
स्वेनिमा

मुझे पता चला कि यह वास्तव में है क्योंकि प्रिंट करने योग्य डीआरए शरीर टैग का प्रत्यक्ष बच्चा नहीं है, जब मैं इसे एक सीधा बच्चा बनाता हूं तो आपका समाधान काम करता है; हालाँकि, मेरे मामले में मैं प्रिंट करने योग्य को सीधा बच्चा नहीं बना सकता। क्या इसके चारों ओर एक रास्ता है?
स्वेनिमा

@svenema, कृपया ऊपर मेरा संपादन देखें।
fanfavorite

8
  1. जिस भी तत्व को आप आईडी प्रिंट करना चाहते हैं उसे दें printMe

  2. इस स्क्रिप्ट को अपने हेड टैग में शामिल करें:

    <script language="javascript">
        var gAutoPrint = true;
    
        function processPrint(){
    
        if (document.getElementById != null){
        var html = '<HTML>\n<HEAD>\n';
        if (document.getElementsByTagName != null){
        var headTags = document.getElementsByTagName("head");
        if (headTags.length > 0) html += headTags[0].innerHTML;
        }
    
        html += '\n</HE' + 'AD>\n<BODY>\n';
        var printReadyElem = document.getElementById("printMe");
    
        if (printReadyElem != null) html += printReadyElem.innerHTML;
        else{
        alert("Error, no contents.");
        return;
        }
    
        html += '\n</BO' + 'DY>\n</HT' + 'ML>';
        var printWin = window.open("","processPrint");
        printWin.document.open();
        printWin.document.write(html);
        printWin.document.close();
    
        if (gAutoPrint) printWin.print();
        } else alert("Browser not supported.");
    
        }
    </script>
  3. फ़ंक्शन को कॉल करें

    <a href="javascript:void(processPrint());">Print</a>

यह एक अच्छा काम है। लेकिन रास्ता बहुत जटिल है और ठीक से क्रॉस-ब्राउज़र (विशेष रूप से पुराने ब्राउज़र) काम नहीं करेगा। मेरा सुझाव है कि आप नीचे दिए गए मेरे समाधान पर एक नज़र डालें।
केविन फ्लोरिडा

6

एचएम ... मुद्रण के लिए एक स्टाइलशीट के प्रकार का उपयोग करें ... जैसे:

<link rel="stylesheet" type="text/css" href="print.css" media="print" />

print.css:

div { display: none; }
#yourdiv { display: block; }

यह काम नहीं करेगा यदि दस्तावेज़ DIV- आधारित नहीं है या #yourdiv आगे DIV भी शामिल है।
गुम्बो

#yourdiv * {डिस्प्ले: ...} यदि आप इसे पृष्ठ के शीर्ष पर रखते हैं और आपके पास एक अप-टू-डेट ब्राउज़र है, तो आप गैर-विभाजकों को छिपाने के लिए अधिक चयनकर्ताओं के साथ काम कर सकते हैं
एंड्रियास नीडरमेयर

"#yourdiv * {डिस्प्ले: ...}" - लेआउट तोड़ने के बिना ... क्या होना चाहिए?
ग्रेग

यह इनलाइन तत्वों को ब्लॉक तत्वों के रूप में भी प्रदर्शित करेगा। लेकिन "#yourdiv, #yourdiv div {डिस्प्ले: ब्लॉक}" यह करेगा।
गुम्बो

@dittodhole - इसके बारे में एक मिनट तक सोचें। आप वहां क्या डाल सकते हैं जो #yourdiv के लेआउट को नहीं तोड़ेंगे।
ग्रेग

6
<script type="text/javascript">
   function printDiv(divId) {
       var printContents = document.getElementById(divId).innerHTML;
       var originalContents = document.body.innerHTML;
       document.body.innerHTML = "<html><head><title></title></head><body>" + printContents + "</body>";
       window.print();
       document.body.innerHTML = originalContents;
   }
</script>


6
अच्छा लग रहा है, लेकिन आप प्रिंट के बाद सभी जावास्क्रिप्ट बाइंडिंग और अन्य को ढीला करते हैं
जुलिएन

1
यह बिना css के प्रिंटिंग है।
मोक्सेट खान

6

चरण 1: अपने हेड टैग के अंदर निम्नलिखित जावास्क्रिप्ट लिखें

<script language="javascript">
function PrintMe(DivID) {
var disp_setting="toolbar=yes,location=no,";
disp_setting+="directories=yes,menubar=yes,";
disp_setting+="scrollbars=yes,width=650, height=600, left=100, top=25";
   var content_vlue = document.getElementById(DivID).innerHTML;
   var docprint=window.open("","",disp_setting);
   docprint.document.open();
   docprint.document.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"');
   docprint.document.write('"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">');
   docprint.document.write('<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">');
   docprint.document.write('<head><title>My Title</title>');
   docprint.document.write('<style type="text/css">body{ margin:0px;');
   docprint.document.write('font-family:verdana,Arial;color:#000;');
   docprint.document.write('font-family:Verdana, Geneva, sans-serif; font-size:12px;}');
   docprint.document.write('a{color:#000;text-decoration:none;} </style>');
   docprint.document.write('</head><body onLoad="self.print()"><center>');
   docprint.document.write(content_vlue);
   docprint.document.write('</center></body></html>');
   docprint.document.close();
   docprint.focus();
}
</script>

चरण 2: ऑनक्लिक ईवेंट द्वारा PrintMe ('DivID') फ़ंक्शन को कॉल करें।

<input type="button" name="btnprint" value="Print" onclick="PrintMe('divid')"/>
<div id="divid">
here is some text to print inside this div with an id 'divid'
</div>

यही तो है वो! इसका उपयोग एक मोडल और गैलरी के लिए किया जाता है। बंद करने के बाद कोई जावास्क्रिप्ट त्रुटियों। वास्तव में उपयोगी है जब आप यू का उपयोग करते हैं जो एक पृष्ठ से अधिक लंबे होते हैं। अच्छी तरह से इसे लपेटता है। उन लोगों के लिए बिल्कुल सही है जो स्टोर करने के लिए प्रिंट करना चाहते हैं।
TheWeeezel

2

CSS 3 के साथ आप निम्नलिखित का उपयोग कर सकते हैं:

body *:not(#printarea) {
    display: none;
}

उपयोग नहीं कर सकता कि मैं डर रहा हूँ ... (मुझे गलत
समझें

यह ब्राउज़र पर निर्भर करता है कि: नहीं () चयनकर्ता पहले से उपलब्ध है या नहीं।
गुम्बो

तो फिर मेरा प्रस्ताव भविष्य में सिर्फ एक नज़र है ... नहीं, गंभीरता से। मैंने सिर्फ पूर्णता के लिए इसका उल्लेख किया है। मुझे पता है कि यह अभी व्यावहारिक नहीं है। दुर्भाग्य से।
गुम्बो

आप jQuery और इस चयनकर्ता का उपयोग कर सकते हैं जो (मुझे लगता है) IE6 में काम करेगा - $ ('शरीर *: नहीं (#printarea)')। शैली ('प्रदर्शन', 'कोई नहीं');
डेविड हेगी

2
यह #printarea के सभी वंशज को छिपा देगा, क्योंकि वे *: (#printarea) से मेल खाते हैं। तो मूल रूप से आप एक खाली कंटेनर के साथ समाप्त होते हैं।
साइटोफू

2

मैंने जावास्क्रिप्ट का उपयोग करके सामग्री को उठाया और एक विंडो बनाई जिसे मैं लगातार प्रिंट कर सकता था ...


क्या आप कोड साझा कर सकते हैं, इसमें css अपनाने का मुद्दा है
Moxet Khan

2

सैंड्रो की विधि महान काम करती है।

मैंने इसे कई प्रिंटमे लिंक की अनुमति देने के लिए ट्विक किया, विशेष रूप से वर्जित पृष्ठों और पाठ के विस्तार में उपयोग करने के लिए।

function processPrint(printMe){ <- यहां एक चर के लिए बुला रहा है

var printReadyElem = document.getElementById(printMe); <- एक चर मांगने के लिए प्रिंटमे के आसपास के उद्धरण हटा दिए

<a href="javascript:void(processPrint('divID'));">Print</a><- div ID को प्रिंट करने के लिए फंक्शन पर प्रिंट की जाने वाली div ID को div ID में बदलना। सिंगल कोट्स की जरूरत है


2

PrintDiv (divId) : किसी भी पेज पर किसी भी div को प्रिंट करने के लिए एक सामान्यीकृत समाधान।

मेरे पास एक समान मुद्दा था लेकिन मैं चाहता था (ए) पूरे पृष्ठ को प्रिंट करने में सक्षम हो, या (बी) कई विशिष्ट क्षेत्रों में से किसी एक को प्रिंट कर सकता हूं। मेरा समाधान, उपरोक्त में से अधिकांश के लिए धन्यवाद, आपको किसी भी दिव्य वस्तु को मुद्रित करने के लिए निर्दिष्ट करने की अनुमति देता है।

इस समाधान के लिए कुंजी प्रिंट मीडिया स्टाइल शीट में एक उचित नियम जोड़ना है ताकि अनुरोधित डिव (और इसकी सामग्री) प्रिंट हो जाए।

सबसे पहले, सब कुछ दबाने के लिए आवश्यक प्रिंट सीएसएस बनाएं (लेकिन उस विशिष्ट नियम के बिना जिसे आप प्रिंट करना चाहते हैं।)

<style type="text/css" media="print">
   body {visibility:hidden; }
   .noprintarea {visibility:hidden; display:none}
   .noprintcontent { visibility:hidden; }
   .print { visibility:visible; display:block; }
</style>

ध्यान दें कि मैंने नए वर्ग नियम जोड़े हैं:

  • noprintarea आपको अपने div- सामग्री और ब्लॉक दोनों के भीतर तत्वों की छपाई को दबाने की अनुमति देता है।
  • noprintcontent आपको अपने div के भीतर तत्वों की छपाई को दबाने की अनुमति देता है- सामग्री को दबा दिया जाता है लेकिन आवंटित क्षेत्र को खाली छोड़ दिया जाता है।
  • प्रिंट आपको उन आइटमों की अनुमति देता है जो मुद्रित संस्करण में दिखाई देते हैं, लेकिन स्क्रीन पृष्ठ पर नहीं। ये सामान्य रूप से स्क्रीन शैली के लिए "प्रदर्शन: कोई नहीं" होगा।

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

function disableSheet(thisSheet,setDisabled)
{ document.styleSheets[thisSheet].disabled=setDisabled; }   

दूसरा असली काम करता है और तीसरा बाद में सफाई करता है। दूसरा (प्रिंटडिव) प्रिंट मीडिया स्टाइल शीट को सक्रिय करता है, फिर एक नया नियम लागू करता है ताकि वांछित डिव को प्रिंट करने की अनुमति दी जा सके, प्रिंट जारी किया जा सके, और फिर अंतिम हाउसकीपिंग से पहले एक देरी जोड़ता है (अन्यथा स्टाइल वास्तव में प्रिंट से पहले रीसेट किया जा सकता है) किया हुआ।)

function printDiv(divId)
{
  //  Enable the print CSS: (this temporarily disables being able to print the whole page)
  disableSheet(0,false);
  //  Get the print style sheet and add a new rule for this div
  var sheetObj=document.styleSheets[0];  
  var showDivCSS="visibility:visible;display:block;position:absolute;top:30px;left:30px;";
  if (sheetObj.rules) { sheetObj.addRule("#"+divId,showDivCSS); }
  else                { sheetObj.insertRule("#"+divId+"{"+showDivCSS+"}",sheetObj.cssRules.length); }
  print();
  //  need a brief delay or the whole page will print
  setTimeout("printDivRestore()",100);  
}

अंतिम फ़ंक्शन जोड़े गए नियम को हटा देता है और प्रिंट शैली को अक्षम करने के लिए फिर से सेट करता है ताकि पूरे पृष्ठ को प्रिंट किया जा सके।

function printDivRestore()
{
  // remove the div-specific rule
  var sheetObj=document.styleSheets[0];  
  if (sheetObj.rules) { sheetObj.removeRule(sheetObj.rules.length-1); }
  else                { sheetObj.deleteRule(sheetObj.cssRules.length-1); }
  //  and re-enable whole page printing
  disableSheet(0,true);
}

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

<body onLoad='disableSheet(0,true)'>

फिर, अपने दस्तावेज़ में कहीं से भी, आप एक div प्रिंट कर सकते हैं। बस एक बटन या जो भी हो, उससे PrintDiv ("thedivid") जारी करें।

इस दृष्टिकोण के लिए एक बड़ा प्लस यह एक पृष्ठ के भीतर से चयनित सामग्री को मुद्रित करने के लिए एक सामान्य समाधान प्रदान करता है। यह उन तत्वों के लिए मौजूदा शैलियों का उपयोग करने की भी अनुमति देता है जो मुद्रित होते हैं - जिसमें div शामिल है।

नोट: मेरे कार्यान्वयन में, यह पहली शैली शीट होनी चाहिए। यदि आप शीट अनुक्रम में इसे बाद में बनाना चाहते हैं, तो शीट संदर्भ (0) को उपयुक्त शीट नंबर में बदलें।


2

@ केविन फ्लोरिडा यदि आपके पास एक ही वर्ग के साथ कई विभाग हैं, तो आप इसका उपयोग इस तरह कर सकते हैं:

 <div style="display:none">
   <div id="modal-2" class="printableArea">
     <input type="button" class="printdiv-btn" value="print a div!" />
   </div>
 </div>

मैं Colorbox आंतरिक सामग्री प्रकार का उपयोग कर रहा था

$(document).on('click', '.printdiv-btn', function(e) {
    e.preventDefault();

    var $this = $(this);
    var originalContent = $('body').html();
    var printArea = $this.parents('.printableArea').html();

    $('body').html(printArea);
    window.print();
    $('body').html(originalContent);
});

2

मेरे मामले में मुझे एक पृष्ठ के अंदर एक छवि छापनी थी। जब मैंने समाधान का इस्तेमाल किया, तो मेरे पास 1 खाली पृष्ठ था और दूसरा चित्र दिखा रहा था। आशा है कि यह किसी की मदद करेगा।

यहाँ मैं इस्तेमाल किया css है:

@media print {
  body * {
    visibility: hidden;
  }

  #not-print * {
    display: none;
  }

  #to-print, #to-print * {
    visibility: visible;
  }

  #to-print {
    display: block !important;
    position: absolute;
    left: 0;
    top: 0;
    width: auto;
    height: 99%;
  }
}

मेरा html है:

<div id="not-print" >
  <header class="row wrapper page-heading">

  </header>

  <div class="wrapper wrapper-content">
    <%= image_tag @qrcode.image_url,  size: "250x250" , alt: "#{@qrcode.name}" %>
  </div>
</div>

<div id="to-print" style="display: none;">
  <%= image_tag @qrcode.image_url,  size: "300x300" , alt: "#{@qrcode.name}" %>
</div>

2

खाली जगह फिट करने के लिए बेस्ट सीएसएस:

@media print {
  body * {
    visibility: hidden;
    height:0;
  }
  #section-to-print, #section-to-print * {
    visibility: visible;
    height:auto;
  }
  #section-to-print {
    position: absolute;
    left: 0;
    top: 0;
  }
}

2

विशेष डिव या किसी एलिमेंट को प्रिंट करने का सबसे अच्छा तरीका है

printDiv("myDiv");

function printDiv(id){
        var printContents = document.getElementById(id).innerHTML;
        var originalContents = document.body.innerHTML;
        document.body.innerHTML = printContents;
        window.print();
        document.body.innerHTML = originalContents;
}

1

मुद्रण के लिए एक विशेष स्टाइलशीट का उपयोग करें

<link rel="stylesheet" href="print.css" type="text/css" media="print" />

और फिर प्रत्येक टैग में एक क्लास अर्थात "नोप्रंट" जोड़ें, जिसे आप प्रिंट नहीं करना चाहते हैं।

सीएसएस उपयोग में

.noprint {
  display: none;
}

1

यदि आप केवल इस div को प्रिंट करना चाहते हैं, तो आपको निर्देश का उपयोग करना होगा:

@media print{
    *{display:none;}
    #mydiv{display:block;}
}

1

PrintDiv () फ़ंक्शन कुछ समय के लिए निकला, लेकिन उस स्थिति में, आपने अपने सभी बाध्यकारी तत्वों और इनपुट मानों को ढीला कर दिया। तो, मेरा समाधान "body_allin" नामक सब कुछ के लिए एक div बनाना है और पहले एक "body_print" के बाहर एक और है।

तब आप इस फ़ंक्शन को कॉल करते हैं:

function printDiv(divName){

    var printContents = document.getElementById(divName).innerHTML;

    document.getElementById("body_print").innerHTML = printContents;

    document.getElementById("body_allin").style.display = "none";
    document.getElementById("body_print").style.display = "";

    window.print();

    document.getElementById("body_print").innerHTML = "";
    document.getElementById("body_allin").style.display = "";
    document.getElementById("body_print").style.display = "none";

}

यदि आप यूनिक आईडी चाहते हैं तो यह लाइन उपयोगी हो सकती है: PrintContents = PrintContents.replace (/ id = (";" (*?) ("।" (") / G, 'id = $ 1 $ 2_2 $ 3');
शाम साढ़े

1

आप एक अलग सीएसएस शैली का उपयोग कर सकते हैं जो आईडी "प्रिंटारिया" के साथ एक को छोड़कर हर अन्य सामग्री को निष्क्रिय करता है।

सीएसएस डिज़ाइन देखें : आगे की व्याख्या और उदाहरण के लिए प्रिंट पर जाएं


नए स्थान के लिंक को अपडेट किया। चढ़ाव के बजाय एक टिप्पणी अच्छी रही होगी।
कोसी 2801

1

मेरे पास एक बटन के साथ कई छवियां हैं और प्रत्येक बटन को एक छवि के साथ मुद्रित करने के लिए बटन पर क्लिक करने की आवश्यकता है। यदि मेरे ब्राउज़र में कैश अक्षम है, और क्रोम में छवि का आकार नहीं बदलता है तो यह समाधान काम करता है:

        function printDiv(divName) {

        var printContents = document.getElementById(divName).innerHTML;
        w = window.open();

        w.document.write(printContents);
        w.document.write('<scr' + 'ipt type="text/javascript">' + 'window.onload = function() { window.print(); window.close(); };' + '</sc' + 'ript>');

        w.document.close(); // necessary for IE >= 10
        w.focus(); // necessary for IE >= 10

        return true;
    }

<div id="printableArea">
      <h1>Print me</h1>
</div>

<input type="button" onclick="printDiv('printableArea')" value="print a div!" />

1

वर्तमान पृष्ठ को प्रभावित किए बिना एक और दृष्टिकोण और यह मुद्रण करते समय सीएसएस को भी बनाए रखता है। यहां चयनकर्ता को विशिष्ट div चयनकर्ता होना चाहिए जो हमें प्रिंट करने के लिए आवश्यक है।

printWindow(selector, title) {
   var divContents = $(selector).html();
   var $cssLink = $('link');
   var printWindow = window.open('', '', 'height=' + window.outerHeight * 0.6 + ', width=' + window.outerWidth  * 0.6);
   printWindow.document.write('<html><head><h2><b><title>' + title + '</title></b></h2>');
   for(var i = 0; i<$cssLink.length; i++) {
    printWindow.document.write($cssLink[i].outerHTML);
   }
   printWindow.document.write('</head><body >');
   printWindow.document.write(divContents);
   printWindow.document.write('</body></html>');
   printWindow.document.close();
   printWindow.onload = function () {
            printWindow.focus();
            setTimeout( function () {
                printWindow.print();
                printWindow.close();
            }, 100);  
        }
}

यहाँ कुछ समय दिया गया है कि बाहरी सीएसएस उस पर लागू हो।


सीएसएस को कभी-कभी लोड करने में समय लगता है, यह दृष्टिकोण वह है जिसे मैं मुद्रण से पहले पृष्ठ को फिर से लोड करना चाहता था। धन्यवाद
अर्पित श्रीवास्तव

1

मैंने प्रदान किए गए कई समाधानों की कोशिश की। उनमें से किसी ने भी पूरी तरह से काम नहीं किया। वे या तो CSS या जावास्क्रिप्ट बाइंडिंग खो देते हैं। मुझे एक सही और आसान समाधान मिला जो न तो सीएसएस और न ही जावास्क्रिप्ट बाइंडिंग को नुकसान पहुंचाता है।

HTML:

<div id='printarea'>
    <p>This is a sample text for printing purpose.</p>
    <input type='button' id='btn' value='Print' onclick='printFunc();'>
</div>
<p>Do not print.</p>

जावास्क्रिप्ट:

function printFunc() {
    var divToPrint = document.getElementById('printarea');
    var htmlToPrint = '' +
        '<style type="text/css">' +
        'table th, table td {' +
        'border:1px solid #000;' +
        'padding;0.5em;' +
        '}' +
        '</style>';
    htmlToPrint += divToPrint.outerHTML;
    newWin = window.open("");
    newWin.document.write("<h3 align='center'>Print Page</h3>");
    newWin.document.write(htmlToPrint);
    newWin.print();
    newWin.close();
    }

यह एक और खिड़की का उद्घाटन और निर्माण जो एंड्रॉइड पर काम नहीं करता है। केवल प्रत्यक्ष window.print () काम करता है।
मर्व

1

मुझे इस पार्टी में बहुत देर हो चुकी है, लेकिन मैं अभी तक एक और दृष्टिकोण के साथ पिच करना चाहूंगा। मैंने एक छोटा जावास्क्रिप्ट मॉड्यूल लिखा है जिसे PrintElements कहा जाता है वेब पेज के गतिशील रूप से मुद्रण भागों के लिए ।

यह चयनित नोड तत्वों के माध्यम से पुनरावृत्ति करके काम करता है, और प्रत्येक नोड के लिए, यह BODY तत्व तक DOM ट्री का पता लगाता है। प्रत्येक स्तर पर, प्रारंभिक एक (जो कि मुद्रित-मुद्रित नोड स्तर है) सहित, यह pe-preserve-printवर्तमान नोड के लिए एक मार्कर वर्ग ( ) संलग्न करता है। फिर pe-no-printवर्तमान नोड के सभी भाई-बहनों को एक और मार्कर वर्ग ( ) देता है , लेकिन केवल अगर pe-preserve-printउन पर कोई वर्ग नहीं है। तीसरे अधिनियम के रूप में, यह संरक्षित पूर्वज तत्वों के लिए एक और वर्ग भी देता है pe-preserve-ancestor

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

डेमो देखें , या अधिक जानकारी के लिए संबंधित लेख पढ़ें ।


0

आप इसका उपयोग कर सकते हैं: http://vikku.info/codesnippets/javascript/print-div-content-print-only-the-content-of-an-html-element-and-not-the-whole-document/

या उपयोग visibility:visibleऔरvisibility:hidden एक साथ संपत्ति का सीएसएस@media print{}

'डिस्प्ले: कोई नहीं' सभी नेस्टेड 'डिस्प्ले: ब्लॉक' को छिपा देगा। वह समाधान नहीं है।


0

मुझे इसका हल मिल गया।

@media print {
    .print-area {
        background-color: white;
        height: 100%;
        width: auto;
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        z-index:1500;
        visibility: visible;
    }
    @page{
        size: portrait;
        margin: 1cm;
    }
/*IF print-area parent element is position:absolute*/
    .ui-dialog,
    .ui-dialog .ui-dialog-content{
        position:unset !important;
        visibility: hidden;
    }
}

0

@ केविन फ्लोरिडा के उत्तर के आधार पर, मैंने ओवरराइट सामग्री के कारण वर्तमान पृष्ठ अक्षम पर स्क्रिप्ट से बचने का एक तरीका बनाया। मैं "PrintScreen.php" (या .html) नामक अन्य फ़ाइल का उपयोग करता हूं। सब कुछ लपेटें जिसे आप div "PrintSource" में प्रिंट करना चाहते हैं। और जावास्क्रिप्ट के साथ, आपके द्वारा बनाई गई एक नई विंडो खोलें ("PrintScreen.php") फिर शीर्ष विंडो के "प्रिंटसोर्स" में सामग्री को पकड़ो।

यहाँ कोड है।

मुख्य खिड़की :

echo "<div id='printSource'>";
//everything you want to print here
echo "</div>";

//add button or link to print
echo "<button id='btnPrint'>Print</button>";

<script>
  $("#btnPrint").click(function(){
    printDiv("printSource");
  });

  function printDiv(divName) {
   var printContents = document.getElementById(divName).innerHTML;
   var originalContents = document.body.innerHTML;
   w=window.open("printScreen.php", "_blank", "toolbar=yes,scrollbars=yes,resizable=yes,top=50,left=50,width=900,height=400");
   }
</script>

यह "PrintScreen.php" है - प्रिंट करने के लिए सामग्री को हथियाने के लिए अन्य फ़ाइल

<head>
// write everything about style/script here (.css, .js)

</head>
<body id='mainBody'></body>
</html>


<script>
    //get everything you want to print from top window
    src = window.opener.document.getElementById("printSource").innerHTML;

    //paste to "mainBody"
    $("#mainBody").html(src);
    window.print();
    window.close();
</script>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.