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);
