Ilmainen C++-kirjasto PDF-sivujen renderöintiin kuviksi ja tekstin purkamiseen.
Avoimen lähdekoodin C++-PDF-käsittelykirjasto PDF-sivujen renderöintiin kuviksi, tekstin purkamiseen, salasanasuojattujen PDF:ien käsittelyyn ja asiakirjan metatietojen käyttöön C++-API:n kautta.
Mikä on PDFium-Render?
PDF-tiedostojen käsittely ja renderöinti C++-sovelluksessa on historiallisesti ollut monimutkainen haaste, johon on usein liittynyt kalliita kaupallisia lisenssejä tai kömpelöitä avoimen lähdekoodin työkaluja. Tässä astuu kuvaan PDFium-Render, moderni, header-only C++-käärepaketti, joka tuo Googlen PDFium-moottorin voiman projekteihisi intuitiivisella ja selkeällä käyttöliittymällä. PDFium-render on turvallinen, idiomatisoitu Rust-sidonta PDFiumiin, samaan PDF-renderöintimoottoriin, joka ohjaa Google Chromea ja Mozilla Firefoxia. Ajrcareyn luoma ja ylläpitämä kirjasto tarjoaa kehittäjille tehokkaan työkalupaketin PDF-sivujen renderöintiin kuviksi, tekstin poimintaan, PDF-rakenteiden muokkaamiseen ja asiakirjan metatietoihin pääsyyn — kaikki hyödyntäen Rustin muistiturvan takuita.
Eri PDF-kirjastoista, jotka keskittyvät vain luomiseen tai perusjäsennykseen, PDFium-Render erottuu PDF-sisällön renderöinnissä pikselintarkalla tarkkuudella, mikä tekee siitä ihanteellisen sovelluksiin, jotka tarvitsevat PDF-dokumenttien näyttämistä, muuntamista tai käsittelyä. Se tukee erilaisia perus- ja edistyneitä ominaisuuksia PDF-dokumenttien kanssa työskentelyyn, kuten PDF-tiedostojen ja -sivujen renderöintiä, tekstin poimintaa ja analysointia, asiakirjan metatietojen käsittelyä, sivuobjektien pääsyä ja muokkaamista, salasanasuojattujen PDF:ien käsittelyä ja paljon muuta. Yksi PDFium-Renderin suurimmista vahvuuksista on sen monialustatuki. Kirjasto toimii saumattomasti Windowsissa, macOSissa ja Linuxissa, piilottaen PDFium-binäärien alustakohtaiset erot. Olitpa sitten rakentamassa asiakirjakatselua, automatisoimassa PDF-käsittelytyönkulkuja tai poimimassa tietoja PDF:istä, PDFium-Render tarjoaa tarvitsemasi työkalut.
Aloittaminen PDFium-Renderin kanssa
Suositeltu tapa asentaa PDFium-Render on käyttää CMakea. Käytä seuraavaa komentoa sujuvan asennuksen varmistamiseksi.
Asenna PDFium-Render GitHubin kautta
vcpkg install pdfium-render
Asenna PDFium-Render GitHubin kautta
Git clone https://github.com/ajrcarey/pdfium-render.git Voit myös asentaa sen manuaalisesti; lataa uusimmat julkaisutiedostot suoraan GitHub-varastosta.
Korkealaatuinen PDF-renderöinti C++:lla
Avoimen lähdekoodin PDFium-Render-kirjaston ensisijainen vahvuus on sen renderöintikyvyt. Se voi muuntaa PDF-sivut rasterikuviksi poikkeuksellisen laadukkaasti, tukien erilaisia tulostusmuotoja, kuten PNG, JPEG ja BMP. Renderöintimoottori käsittelee monimutkaisia PDF-ominaisuuksia, kuten läpinäkyvyyttä, liukuvärejä, upotettuja fontteja ja vektorigrafiikkaa samalla tarkkuudella, kuin mitä odottaisit Chromen PDF-katselijalta. Tässä on yksinkertainen esimerkki, joka näyttää, miten ohjelmistokehittäjät voivat renderöidä tietyn sivun PNG-kuvamuotoon C++-sovelluksissa.
Kuinka renderöidä tietty PDF-sivu PNG-muotoon C++:lla?
use pdfium_render::prelude::*;
fn render_pdf_page() -> Result<(), PdfiumError> {
// Initialize PDFium library
let pdfium = Pdfium::new(
Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
.or_else(|_| Pdfium::bind_to_system_library())?
);
// Load a PDF document
let document = pdfium.load_pdf_from_file("sample.pdf", None)?;
Kuinka poimia tekstiä tietyistä PDF-sivun alueista C++-API:n avulla?
use pdfium_render::prelude::*;
fn extract_text_from_page() -> Result<(), PdfiumError> {
let pdfium = Pdfium::new(
Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
.or_else(|_| Pdfium::bind_to_system_library())?
);
let document = pdfium.load_pdf_from_file("document.pdf", None)?;
let page = document.pages().get(0)?;
// Extract all text from the page
let text = page.text()?;
let all_text = text.all();
println!("Page text: {}", all_text);
// Search for specific text
let search_results = text.search("important", true, false)?;
for result in search_results {
println!("Found at index: {}", result.start_index());
}
// Get text in a specific rectangular area
let rect = PdfRect::new(100.0, 100.0, 300.0, 200.0);
let bounded_text = text.bounded(rect)?;
println!("Text in region: {}", bounded_text);
Ok(())
}
Word salasanasuojatun PDF:n kanssa C++:lla
Turvallisuus on ensisijainen asiakirjojen käsittelyssä. PDFium-Render käsittelee salasanasuojattuja PDF-tiedostoja saumattomasti, tukien sekä käyttäjän että omistajan salasanoja. Kirjasto hoitaa todennuksen läpinäkyvästi ja palauttaa asianmukaiset virheet, jos salasana on väärä tai jos PDF:ssä on rajoituksia, jotka estävät tiettyjä toimintoja. Tässä on erittäin hyödyllinen esimerkki, joka näyttää, miten käsitellä salasanasuojattuja PDF-asiakirjoja C++-sovelluksissa.
Kuinka avata ja ladata salasanasuojatut PDF-dokumentit C++-API:n avulla?
fn open_encrypted_pdf() -> Result<(), PdfiumError> {
let pdfium = Pdfium::new(
Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
.or_else(|_| Pdfium::bind_to_system_library())?
);
// Attempt to load with password
let document = pdfium.load_pdf_from_file(
"confidential.pdf",
Some("secret_password")
)?;
println!("Successfully opened encrypted PDF");
println!("Pages: {}", document.pages().len());
Ok(())
}
PDF-metatietojen ja ominaisuuksien käsittely C++:lla
PDF:n rakenteen ymmärtäminen on olennaista monissa sovelluksissa. Avoimen lähdekoodin PDFium-Render -kirjasto tarjoaa täyden pääsyn asiakirjan metatietoihin, sivumääriin, mittoihin ja muihin ominaisuuksiin. Tämä toiminnallisuus on korvaamatonta asiakirjahallintajärjestelmien, PDF-validaattorien tai minkä tahansa sovelluksen rakentamisessa, joka tarvitsee luokitella tai käsitellä PDF-tiedostoja niiden ominaisuuksien perusteella. Seuraava koodiesimerkki osoittaa, miten ohjelmoijat voivat työskennellä PDF-asiakirjojen metatietojen kanssa ja käyttää erilaisia ominaisuuksia vaivattomasti.
Kuinka käsitellä PDF-asiakirjojen metatietoja C++-API:n avulla?
fn inspect_document_metadata() -> Result<(), PdfiumError> {
let pdfium = Pdfium::new(
Pdfium::bind_to_library(Pdfium::pdfium_platform_library_name_at_path("./"))
.or_else(|_| Pdfium::bind_to_system_library())?
);
let document = pdfium.load_pdf_from_file("report.pdf", None)?;
// Access document metadata
let metadata = document.metadata();
println!("Title: {}", metadata.title().unwrap_or("Untitled"));
println!("Author: {}", metadata.author().unwrap_or("Unknown"));
println!("Creator: {}", metadata.creator().unwrap_or("Unknown"));
println!("Producer: {}", metadata.producer().unwrap_or("Unknown"));
// Get page count
let page_count = document.pages().len();
println!("Total pages: {}", page_count);
// Inspect individual page properties
for (index, page) in document.pages().iter().enumerate() {
let width = page.width();
let height = page.height();
println!("Page {}: {}x{} points", index + 1, width.value, height.value);
}
Ok(())
}