Advertisement
WILDAN_IZZUDIN

[JS] PDF2TEXT

Oct 7th, 2024 (edited)
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const axios = require('axios')
  2. const FormData = require('form-data')
  3.  
  4. class Utils {
  5.    isUrl = url => {
  6.       try {
  7.          new URL(url)
  8.          return true
  9.       } catch {
  10.          return false
  11.       }
  12.    }
  13.  
  14.    toBuffer = async i => {
  15.       try {
  16.          const file = Buffer.isBuffer(i) ? i : this.isUrl(i) ? await (await axios.get(i, {
  17.             responseType: 'arraybuffer'
  18.          })).data : null
  19.          return Buffer.from(file)
  20.       } catch (e) {
  21.          return null
  22.       }
  23.    }
  24.  
  25.    randomString = length => {
  26.       const characters = 'abcdefghijklmnopqrstuvwxyz0123456789'
  27.       let result = ''
  28.       for (let i = 0; i < length; i++) {
  29.          const randomIndex = Math.floor(Math.random() * characters.length)
  30.          result += characters[randomIndex]
  31.       }
  32.       return result
  33.    }
  34.  
  35.    delay = ms => new Promise(resolve => setTimeout(resolve, ms))
  36. }
  37.  
  38. class PDF extends Utils {
  39.    constructor() {
  40.       super()
  41.       this.baseUrl = 'https://pdftotext.com'
  42.       this.headers = {
  43.          'Accept': 'application/json, text/plain, */*',
  44.          'Accept-Language': 'en-US,en;q=0.9,id;q=0.8',
  45.          'Cache-Control': 'no-cache',
  46.          'Connection': 'Keep-Alive',
  47.          'Origin': this.baseUrl,
  48.          'Pragma': 'no-cache',
  49.          'Referer': this.baseUrl + '/',
  50.          'Referrer-Policy': 'strict-origin-when-cross-origin',
  51.          'User-Agent': 'Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
  52.          'X-Requested-With': 'XMLHttpRequest',
  53.          'X-Forwarded-For': Array(4).fill(0).map(() => Math.floor(Math.random() * 256)).join('.')
  54.       }
  55.    }
  56.  
  57.    upload = input => new Promise(async resolve => {
  58.       try {
  59.          const file = await this.toBuffer(input)
  60.          if (!file) return resolve({
  61.             creator: global.creator,
  62.             status: false,
  63.             msg: `Invalid file, please check your file.`
  64.          })
  65.          const id = this.randomString(16)
  66.          const filename = `${this.randomString(5)}.pdf`
  67.          let form = new FormData
  68.          form.append('file', file, filename)
  69.          form.append('id', 'file_' + this.randomString(26))
  70.          form.append('name', filename)
  71.          form.append('rnd', Math.random())
  72.          const upload = await axios.post(this.baseUrl + '/upload/' + id, form, {
  73.             headers: {
  74.                ...this.headers,
  75.                ...form.getHeaders()
  76.             }
  77.          })
  78.          if (!upload.data.id) return resolve({
  79.             creator: global.creator,
  80.             status: false,
  81.             msg: `Error, can't upload file.`
  82.         })
  83.         const convert = await (await axios.get(`${this.baseUrl}/convert/${id}/${upload.data.id}?rnd=${Math.random()}`, {
  84.            headers: {
  85.               ...this.headers,
  86.               Cookie: upload.headers['set-cookie'].join('; ')
  87.            }
  88.         })).data
  89.         if (convert.status !== 'success') return resolve({
  90.            creator: global.creator,
  91.            status: false,
  92.            msg: `Error, can't convert file.`
  93.          })
  94.          let i = 0
  95.          while(true) {
  96.             i++
  97.             var status = await (await axios.get(`${this.baseUrl}/status/${id}/${upload.data.id}`, {
  98.                headers: {
  99.                   ...this.headers,
  100.                   Cookie: upload.headers['set-cookie'].join('; ')
  101.                }
  102.             })).data
  103.             await this.delay(1100)
  104.             if (status.status === 'success') break
  105.             if (i >= 25) break
  106.          }
  107.          if (!status.convert_result) return resolve({
  108.             creator: global.creator,
  109.             status: false,
  110.             msg: `Error, can't convert file.`
  111.         })
  112.         resolve({
  113.            creator: global.creator,
  114.            status: true,
  115.            data: status
  116.         })
  117.      } catch (e) {
  118.         resolve({
  119.            creator: global.creator,
  120.            status: false,
  121.            msg: e.message
  122.         })
  123.      }
  124.   })
  125. }
  126.  
  127. const p = new PDF
  128. p.upload('https://pdfobject.com/pdf/sample.pdf').then(console.log)
  129.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement