3 पार्टी पुस्तकालयों का उपयोग करके VueJS के साथ मुद्रण तत्व


14

मैं HTML तालिका पर काम कर रहा हूं और html-to-papervue.js का उपयोग करके प्रिंटर पर उस तालिका को प्रिंट कर रहा हूं, जो मैं कर रहा हूं वह एक नई पंक्ति बनाने के ऐड पर क्लिक करने पर है और फिर प्रिंट के क्लिक पर मैं तालिका को प्रिंट करने का प्रयास कर रहा हूं लेकिन यह नहीं ले रहा है कोई भी डेटा केवल खाली सेल दिखा रहा है

कोड App.vue

    <template>
  <div id="app">
    <button type="button" @click="btnOnClick">Add</button>

    <div id="printMe">
      <table class="table table-striped table-hover table-bordered mainTable" id="Table">
    <thead>
      <tr>

        <th class="itemName">Item Name</th>
        <th>Quantity</th>
        <th>Selling Price</th>
        <th>Amount</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="(tableData, k) in tableDatas" :key="k">

        <td>
          <input class="form-control" readonly v-model="tableData.itemname" />
        </td>
        <td>
          <input class="form-control text-right" type="text" min="0" step=".01" v-model="tableData.quantity" v-on:keyup="calculateQty(tableData)" />
        </td>
        <td>
          <input class="form-control text-right" type="text" min="0" step=".01" v-model="tableData.sellingprice" v-on:keyup="calculateSPrice(tableData)" />
        </td>
        <td>
          <input readonly class="form-control text-right" type="text" min="0" step=".01" v-model="tableData.amount" />
        </td>
      </tr>
    </tbody>
  </table>
    </div>
    <button @click="print">Print</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableDatas: []
    }

  },
  methods: {
    btnOnClick(v) {
      this.tableDatas.push({
        itemname: "item",
        quantity: 1,
        sellingprice: 55,
        amount: 55
      });
    },
     print() {
      this.$htmlToPaper('printMe');
    }
  }
};
</script>

<style>
</style>

main.js

 import Vue from "vue";
import App from "./App.vue";
import VueHtmlToPaper from "vue-html-to-paper";

Vue.config.productionTip = false;
Vue.use(VueHtmlToPaper);

new Vue({
  render: h => h(App)
}).$mount("#app");

यहाँ codeandbox में काम कर कोड

कृपया रनिंग कोड जांचें

इनाम के अनुसार संपादित करें

मुझे इसे 'html-to-paper' के साथ करना है। मुद्दा यह है कि मैं मुद्रण के लिए अपने तत्वों को शैली देने में सक्षम नहीं हूं @media print

  • द्वारा जवाब ux.engineerठीक है, लेकिन ब्राउज़र इश्यू क्रोम और फ़ायरफ़ॉक्स के कारण सुरक्षा isssue के कारण इसे रोक रहे हैं

कृपया कोड सैंडबॉक्स चेक करें उदाहरण के लिए यहां मेरा पूरा कोड है, मैं स्टाइल देने की कोशिश कर रहा हूं लेकिन ऐसा नहीं हो रहा है

  • html-to-printप्लगइन का उपयोग करता है तो विंडो.ओपन जब मैं प्रिंट पर क्लिक कर रहा हूँ यह नए पेज पर शैली नहीं ले रही है।
  • यही कारण है कि जहां मैं अटक रहा हूं कि यह मीडिया शैली क्यों नहीं ले रहा है, मैं खिड़की पर अपनी शैली को कैसे ओवरराइड कर सकता हूं

मैं प्रिंट-एनबी का उपयोग कर रहा था लेकिन यह कुछ सुरक्षा कारणों के कारण ब्राउज़र पर काम नहीं कर रहा हैप्रिंट-नायब का उपयोग करते समय यही कहता है


मनीष ठाकुर कृपया मेरा नया उत्तर देखें (बाउंटी ग्रेस पीरियड 4 घंटे में समाप्त हो जाता है, जिस पर यदि उसे पुरस्कार नहीं दिया गया तो वह बेकार हो जाएगा)
ux.engineer

जवाबों:


9

दुर्भाग्य से आप इस mycurelabs / vue-html-से-पेपर मिक्सिन पैकेज के साथ Vue के डेटा बाइंडिंग का लाभ नहीं उठा सकते हैं , जैसा कि पैकेज लेखक ने यहां कहा है

हालाँकि, मैंने Power-kxLee / vue-print-nb निर्देश के लिए यहां उपयोग किए गए पैकेज को स्विच करके वर्कअराउंड बनाया है ।

यहाँ एक कार्यशील उदाहरण दिया गया है: https://codesandbox.io/s/zen-sunset-2szqr

पुनश्च। समान पैकेजों के बीच चयन करना कई बार मुश्किल हो सकता है। रेपो के उपयोग और गतिविधि के आँकड़ों का मूल्यांकन करना चाहिए जैसे: द्वारा इस्तेमाल किया गया, देखो, और सामने पृष्ठ पर प्रारंभ करें, फिर ओपन / बंद मुद्दों और सक्रिय / बंद पुल अनुरोधों की जांच करें, और फिर पल्स (1 महीने), और चेक इनसाइट्स पर जाएं कोड आवृत्ति।

इन दोनों के बीच, मैं अधिक लोकप्रिय और सक्रिय रूप से उपयोग किए जाने के लिए vue-print-nb को चुनूंगा । भी क्योंकि मैं एक मिश्रण पर एक निर्देश का उपयोग करना पसंद करेंगे

जहां तक ​​अन्य उत्तर में जाता है, इस उद्देश्य के लिए vue-html-to-paper का उपयोग करते रहने के लिए उस तरह के हैकी समाधान की आवश्यकता होगी ... जहां यह निर्देश बॉक्स से बाहर काम करता है।

https://github.com/mycurelabs/vue-html-to-paper

https://github.com/Power-kxLee/vue-print-nb


1
मुझे नहीं पता कि यह प्रिंटिंग पैकेज कैसे तुलना करते हैं, लेकिन अगर पैकेज को स्विच करना ठीक है, तो मुझे लगता है कि यह प्लेसहोल्डर्स के साथ मेरे समाधान से बेहतर समाधान है।
अर्कुयु

@ ux.engineer जैसा कि मैंने आपके आइडिया को बहुत ही सरल और साफ पाया, मुझे यहाँ एक संदेह (समस्या) है जब मैं टेबल को प्रिंट कर रहा हूँ तो यह पूरा पेज प्रिंट कर रहा inputsहै जिसके अंदर अच्छा नहीं है, मैं उस इनपुट को निकालना चाहता हूँ और यह होना चाहिए सामान्य क्षेत्र की तरह, मैं भी ऊंचाई का प्रबंधन कर सकता हूं, क्योंकि मैं उपयोग कर रहा हूं USB Printerजिसमें ए 4 शीट नहीं है।
मनीष ठाकुर

@manishthakur आप ग्लोबल सीएसएस स्टाइलिंग का उपयोग मीडिया क्वेरी लक्ष्यीकरण प्रिंट के साथ कर सकते हैं, यहाँ एक कार्यशील उदाहरण है: codeandbox.io/s/ecstatic-fire-zo2b2
ux.engineer

ठीक है यह काम कर रहा है इसलिए मैं इसे परिभाषित कर सकता हूं सीएस, मुद्दा यह है कि यहां चार पंक्तियां हैं, लेकिन प्रिंटर पूर्ण लंबा प्रिंटर प्रिंट कर रहा है, मैं यूएसबी प्रिंटर का उपयोग कर रहा हूं जो बिल प्रिंट करने के लिए उपयोगकर्ता हैं, कृपया मुझे यह बात स्पष्ट करें
मनीष ठाकुर

@manishthakur इस बारे में कैसे: codeandbox.io/s/charming-sound-7h1bg - @pageCSS-rule ( developer.mozilla.org/en-US/docs/Web/CSS/@page ) का उपयोग करते हुए जैसा कि यहां बताया गया है stackoverflow.com/questions / 44064707 /…
ux.engineer

6

जैसा कि दूसरों ने उल्लेख किया है, यह आपके द्वारा उपयोग किए जाने वाले पैकेज के साथ संभव नहीं है, क्योंकि v-modelमुद्रण से बाध्य डेटा मौजूद नहीं है। इसलिए आपको यह डेटा अपने HTML के अंदर स्टेटिक रूप से प्राप्त करना होगा। स्रोत

इनपुट प्लेसहोल्डर्स का उपयोग करने के लिए एक वर्कअराउंड होगा:

अपनी तालिका में एक संदर्भ जोड़ें :

<tbody ref="tablebody">

यह आपको अपनी विधि में इस तत्व का चयन करने की अनुमति देता है। अब प्रिंट विधि बदलें:

print() {
  const inputs = this.$refs.tablebody.getElementsByTagName("input");
  for (let input of inputs) {
    input.placeholder = input.value;
  }
  this.$htmlToPaper("printMe");
  for (let input of inputs) {
    input.placeholder = "";
  }
}

फिर शायद सीएसएस के साथ प्लेसहोल्डर्स को स्टाइल करें, क्योंकि यह डिफ़ॉल्ट रूप से ग्रे दिखता है।

मैंने पहले किसी तरह इनपुट के मूल्य को रीसेट करने की कोशिश की , जैसे input.value = input.value, लेकिन दुर्भाग्य से यह काम नहीं किया।

अपना कोड यहां अपडेट करें


1
एक चतुर समाधान, हालांकि बिट हैकी। लेकिन जरूरत इस बात की लगती है कि क्या कोई इस तरह के गतिशील मूल्यों को छापने के लिए इस विशेष Vue मिश्रण का उपयोग करने के साथ रहना पसंद करेगा। हालाँकि इस बिंदु पर मैं वैकल्पिक पैकेजों की तलाश करूँगा।
ux.engineer

@arkuuu जब भी आप मुक्त होंगे मेरे संपादन भाग की जाँच करें।
मनीष ठाकुर

@manishthakur मैंने इसे पढ़ा है लेकिन मुझे कोई पता नहीं है। हो सकता है कि आप अपने प्रिंट सीएसएस नियमों को एक अलग सीएसएस फ़ाइल में शामिल कर सकते हैं और stylesअन्य स्टाइलशीट के साथ जैसे आपने किया था, वैयू-html-टू-पेपर के विकल्प का उपयोग करें ।
अर्कुयू

1
मैंने कोशिश की है लेकिन कुछ भी नहीं बदला है, फिर भी यह शैलियों को नहीं ले रहा है
मनीष ठाकुर

0

सवाल पर अपने नए इनाम के अनुसार, उपयोग करने के लिए चिपके रहने के लिए vue-html-to-paper, यहां प्रिंट विंडो में बाहरी स्टाइलशीट लोड करने के लिए एक अद्यतन कोड उदाहरण है

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

Windows पर क्रोम उस ग्रीन बैकग्राउंड शैली को इनपुट पर लागू करता है यदि प्रिंट विकल्प पृष्ठभूमि ग्राफिक्स लागू किया जाता है। विंडोज पर फ़ायरफ़ॉक्स में एक अलग प्रिंट विकल्प पैनल है, जिसमें ऐसी कोई सेटिंग नहीं है।

फिर भी दोनों कम से कम आंशिक रूप से बूटस्ट्रैप शैलियों को लागू कर रहे हैं, इसलिए स्टाइलशीट लोड और प्ले में हैं।

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

पुनश्च। मुझे यकीन नहीं है कि vue-print-nbपैकेज के साथ किस तरह का सुरक्षा मुद्दा था लेकिन शायद इसे हल किया जा सकता है। आपको एक न्यूनतम बग प्रजनन उदाहरण के साथ उनके गीथूब रेपो में एक मुद्दे को खोलना चाहिए।

इस उत्तर को एक अलग प्रविष्टि के रूप में जोड़ना अगर उस vue-print-nbसमाधान की समस्या बाद में हल हो जाती है और मेरे उत्तर को अद्यतन किया जाता है।


अरे मैं जाँच कर रहा हूँ यह पूरी तरह से शैलियों को नहीं ले रहा है जैसा कि मैं हटाने की कोशिश कर रहा हूँ input fields लेकिन यह उन सभी को ले रहा है।
मनीष ठाकुर

यह स्पष्ट नहीं है कि आप किन शैलियों को लागू करने की कोशिश कर रहे हैं ... जैसा कि कहा गया है, शैलियों को ब्राउज़र की तुलना में उसी शैली में प्रिंट करने के लिए नहीं आता है, क्योंकि प्रतिबंध हैं। और यहां तक ​​कि वे ब्राउज़रों / प्लेटफार्मों के बीच भिन्न होते हैं। लेकिन बूटस्ट्रैप स्टाइलशीट लागू नहीं होती है , है ना? और मेरे ओवरराइड, इसलिए शैलियों को लोड किया गया है?
ux.engineer

नहीं, मैं इनपुट फ़ील्ड निकाल रहा हूँ, लेकिन यह नहीं निकाल रहा हूँ, क्योंकि मैं इनपुट फ़ील्ड को निकालना चाहता हूँ और इसे कुछ शैली के साथ बेसिक टेबल के रूप में दिखाना चाहता हूँ, जिसे मैं प्रिंट यानी फॉन्ट साइज़ और अलाइनमेंट पर देना चाहता हूँ, लेकिन यह नहीं ले रहा है, मैं छिपा रहा हूँ एक स्तंभ भी लेकिन प्रिंट पर यह उन सभी को ले रहा है
मनीष ठाकुर

अरे क्या आप अंदाजा लगा सकते हैं कि इस मुद्दे print-nbपर काम करना सबसे अच्छा है, लेकिन मुझे नहीं पता कि ब्राउज़र सीएसएस की अनुमति क्यों नहीं देता
मनीष ठाकुर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.