use crate::{Error, Result};
use base64::{engine::general_purpose, Engine as _};
pub fn encode_base64(pdf: &[u8]) -> String {
general_purpose::STANDARD.encode(pdf)
}
pub fn decode_base64(base64: &str) -> Result<Vec<u8>> {
general_purpose::STANDARD
.decode(base64)
.map_err(|e| Error::Other(format!("Base64 decode error: {}", e)))
}
pub fn get_pdf_info(pdf: &[u8]) -> Option<(String, usize)> {
if !pdf.starts_with(b"%PDF-") {
return None;
}
let version = String::from_utf8_lossy(&pdf[5..8]).to_string();
let content = String::from_utf8_lossy(pdf);
let page_count = content.matches("/Type /Page").count();
Some((version, page_count))
}
pub fn validate_pdf(pdf: &[u8]) -> Result<()> {
if pdf.is_empty() || !pdf.starts_with(b"%PDF-") {
return Err(Error::InvalidPdfData);
}
let content = String::from_utf8_lossy(pdf);
if !content.contains("%%EOF") {
return Err(Error::InvalidPdfData);
}
Ok(())
}