javascript - Există o modalitate de a prelua un PDF de la un URL și de a extrage textul din el în Deno?


Încerc să creez o funcție edge Supabase pentru a citi un fișier de la un URL și a-i returna textul, totuși nu pot găsi nicio bibliotecă care să funcționeze în mediul Deno.

Acesta este ceea ce am încercat până acum:

import { PDFDocument } from 'https://cdn.skypack.dev/pdf-lib';

async function fetchPDF(url: string): Promise<Uint8Array> {
    const response = await fetch(url);
    const data = await response.arrayBuffer();
    return new Uint8Array(data);
}

async function readPDFText(url: string): Promise<string> {
    const pdfBytes = await fetchPDF(url);
    const pdfDoc = await PDFDocument.load(pdfBytes);
    const pages = pdfDoc.getPages();

    let text = '';
    for (const page of pages) {
        const content = await page.extractText();
        text += content;
    }

    return text;
}

const pdfUrl = 'URL_GOES_HERE';
const pdfText = await readPDFText(pdfUrl);
console.log(pdfText);

totuși, primesc un TypeError că .extractText() nu este o funcție, am încercat și getTextContent(), aceeași eroare.

Răspuns #1

Acea bibliotecă nu suportă extragerea de text

În prezent, nu este posibil să se extragă text simplu dintr-un document cu pdf-lib (dar poți extrage conținutul câmpurilor acroform). Aș sugera să iei în considerare utilizarea PDF.js pentru a analiza/extrage textul.

Desigur, aceasta nu este o soluție ideală, deoarece necesită două biblioteci diferite pentru o sarcină aparent simplă. Dar este cea mai bună abordare pe care o cunosc pentru moment, până când pdf-lib va oferi suport pentru analizarea textului.

Ca alternativă, ai putea folosi orice pachet npm care are acea funcționalitate.

Iată un exemplu funcțional folosind pdf-parse

import pdf from 'npm:pdf-parse/lib/pdf-parse.js'

async function extractTextFromPDF(pdfUrl) {
    const response = await fetch(pdfUrl);
    const data = await pdf(await response.arrayBuffer());
    return data.text;    
}

const pdfUrl = 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf';
const pdfText = await extractTextFromPDF(pdfUrl);
console.log(pdfText);