דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. PDF ללא תצוגה בגישה דרך ajax

PDF ללא תצוגה בגישה דרך ajax

מתוזמן נעוץ נעול הועבר תכנות
5 פוסטים 3 כותבים 268 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ש מנותק
    ש מנותק
    ש.ב.ח.
    כתב ב נערך לאחרונה על ידי ש.ב.ח.
    #1

    שלום וברכה
    יצרתי קוד (במקרה זה php) שיוצר PDF ומזרים לדף, בגישה ישירה הכל נוסע חלק, ואכן הPDF מגיע כפי הצפי.
    אמנם ניסיתי לבצע גישה דרך js מהדפדפן, זה אומר שאני פונה בajax ומקבל מידע בינארי שממנו אני יוצר blob
    כאן מתחילה הבעיה, הקובץ שמוצג במקרה זה הוא דף לבן, ריק.

    מה יכול להיות?
    הרי זה אותו תוכן בין בגישה ישירה ובין בגישה בajax?

    הקוד בclient

    function downloadPdf() {
            setLoading('download');
            axios.get(route('documents.download', doc.id), {}, {
                responseType: 'blob',
            })
                .then((response) => {
                    console.log(response.data)
                    const blob = new Blob([response.data], { type: 'application/pdf' });
                    const url = window.URL.createObjectURL(blob);
                    const link = document.createElement('a');
                    link.href = url;
                    link.setAttribute('download', `receipt-${doc.id}.pdf`);
                    document.body.appendChild(link);
                    link.click();
                    setLoading(false);
                })
                .catch((e) => {
                    console.log(e)
                    toast.error('Something went wrong, please try again.');
                })
        }
    
    תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      אני לא יודע תשובה לשאלה, אבל אני כן יכול להציע לך איך לבדוק את זה.
      דבר ראשון, תפריד את חלקי הפונקציה:

      function test() {
          const url = '/staticPdf.pdf';
          const blobUrl = remoteFileToBlob(url, 'application/pdf');
          downloadUrl(blobUrl);
      }
      
      function downloadPdf() {
          setLoading('download');
          remoteFileToBlob(route('documents.download', doc.id), 'application/pdf')
              .then(url => downloadUrl(url))
              .always(() => setLoading(false));
      }
      
      function downloadUrl(url) {
          const link = document.createElement('a');
          link.href = url;
          link.setAttribute('download', `receipt-${doc.id}.pdf`);
          document.body.appendChild(link);
          link.click();    
      }
      
      async function remoteFileToBlob(url, type) {
          try {
              const res = await axios.get(url, {}, { responseType: 'blob' });
              console.log(response.data)
              const blob = new Blob([response.data], { type });
              return window.URL.createObjectURL(blob);
          } catch (error) {
              console.log(e)
              toast.error('Something went wrong, please try again.');
          }
      }
      

      שמתי מתודת טסט לראות שהקוד עובד בקובץ PDF שלא מגיע בהזרמה (סתם קובץ סטטי בשרת)
      אם עובד, תבדוק את התשובה של הדפדפן בנטוורק, האם היא זהה בגודלה לגישה ישירה?

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      1
      • ח מנותק
        ח מנותק
        חוקר
        כתב ב נערך לאחרונה על ידי
        #3

        לי יש פונקציה כזו שמבצעת הדפסה מקובץ PDF (דינאמי הנוצר בשרת nodejs)

            Print() {
              const url = `api/print`
              const options = {}
              options.responseType = 'blob'
              useJwt.axiosIns.get(url, options).then(response => {
                console.log(response.data)
                  const a = document.createElement('a')
                  // eslint-disable-next-line no-shadow
                  const url = URL.createObjectURL(new Blob([response.data]))
                  a.href = url
                  // eslint-disable-next-line prefer-destructuring
                  const name = response.headers['content-disposition'].split(';')[1].split('=')[1].split('.')
                  a.download = `${decodeURI(name[0])}.${decodeURI(name[1])}`
                  document.body.append(a)
                  a.click()
                  a.remove()
                  URL.revokeObjectURL(url)
                  return true
              }).catch(error => {
                console.log(error)
                this.$swal({
                  title: 'שגיאה בהדפסה!',
                  icon: 'error',
                  customClass: {
                    confirmButton: 'btn btn-primary',
                  },
                  buttonsStyling: false,
                })
              })
            }
        
        תגובה 1 תגובה אחרונה
        0
        • ח מנותק
          ח מנותק
          חוקר
          כתב ב נערך לאחרונה על ידי
          #4

          אני חושב שהסיבה היא שאתה מעביר לפונקציה get 3 פרמטרים ולא 2 ולכן השלישי לא מוגדר
          מהתיעוד נראה שget מקבל 2.
          תנסה למחוק את {} המיותר
          03c0519b-92f2-4ca5-b0fe-6dcf06928b0a-image.png

          תגובה 1 תגובה אחרונה
          3
          • ש מנותק
            ש מנותק
            ש.ב.ח.
            כתב ב נערך לאחרונה על ידי ש.ב.ח.
            #5

            @חוקר, צדקת.

            אגב, זה שהפרט הזה (שבget הפרמטר השני הוא הconfig) היה ידוע לי כבר - לא עזר לי כשהעתקתי את ההצעה של copilot... 😞

            תגובה 1 תגובה אחרונה
            3

            בא תתחבר לדף היומי!
            • התחברות

            • אין לך חשבון עדיין? הרשמה

            • התחברו או הירשמו כדי לחפש.
            • פוסט ראשון
              פוסט אחרון
            0
            • דף הבית
            • קטגוריות
            • פוסטים אחרונים
            • משתמשים
            • חיפוש
            • חוקי הפורום