Rust (with Active-Web)
PDF URL
use actix_web::{client::Client, post, web, App, HttpServer, Responder};
use serde::Deserialize;
#[derive(Deserialize)]
struct ExtractTextResponse {
text: String,
}
#[post("/extract_text")]
async fn extract_text() -> impl Responder {
let client = Client::default();
let res = client
.post("https://v1.mlapi.co/pdf/pdf-to-text")
.send_form(&[("pdf_url", "https://example.com/your-pdf.pdf"), ("api_key", "your_api_key")])
.await;
match res {
Ok(mut response) => {
if response.status().is_success() {
let body = response.body().await.unwrap();
let text_response: ExtractTextResponse = serde_json::from_slice(&body).unwrap();
text_response.text
} else {
format!("Error: {}", response.status())
}
}
Err(e) => format!("Error: {}", e),
}
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().service(extract_text))
.bind("127.0.0.1:8080")?
.run()
.await
}
Upload PDF file
use actix_multipart::Multipart;
use actix_web::{post, web, App, HttpServer, Responder};
use futures_util::stream::StreamExt as _;
#[post("/extract_text")]
async fn extract_text(mut payload: Multipart) -> impl Responder {
let mut form_data = Vec::new();
while let Some(item) = payload.next().await {
let mut field = item.unwrap();
let mut bytes = web::BytesMut::new();
while let Some(chunk) = field.next().await {
bytes.extend_from_slice(&chunk.unwrap());
}
form_data.push((field.content_disposition().unwrap().get_name().unwrap().to_string(), bytes));
}
let client = Client::default();
let res = client
.post("https://v1.mlapi.co/pdf/pdf-to-text")
.send_body(form_data)
.await;
match res {
Ok(mut response) => {
if response.status().is_success() {
let body = response.body().await.unwrap();
let text_response: ExtractTextResponse = serde_json::from_slice(&body).unwrap();
text_response.text
} else {
format!("Error: {}", response.status())
}
}
Err(e) => format!("Error: {}", e),
}
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().service(extract_text))
.bind("127.0.0.1:8080")?
.run()
.await
}
Last updated