diff --git a/Userland/Libraries/LibPDF/Document.cpp b/Userland/Libraries/LibPDF/Document.cpp index 7d7d01c79a..c95966c867 100644 --- a/Userland/Libraries/LibPDF/Document.cpp +++ b/Userland/Libraries/LibPDF/Document.cpp @@ -63,6 +63,8 @@ Page Document::get_page(u32 index) auto raw_page_object = resolve_to(get_or_load_value(page_object_index)); auto resources = raw_page_object->get_dict(this, "Resources"); + auto contents = raw_page_object->get_object(this, "Contents"); + auto media_box_array = raw_page_object->get_array(this, "MediaBox"); auto media_box = Rectangle { media_box_array->at(0).to_float(), @@ -70,9 +72,23 @@ Page Document::get_page(u32 index) media_box_array->at(2).to_float(), media_box_array->at(3).to_float(), }; - auto contents = raw_page_object->get_object(this, "Contents"); - Page page { resources, media_box, contents }; + auto crop_box = media_box; + if (raw_page_object->contains("CropBox")) { + auto crop_box_array = raw_page_object->get_array(this, "CropBox"); + crop_box = Rectangle { + crop_box_array->at(0).to_float(), + crop_box_array->at(1).to_float(), + crop_box_array->at(2).to_float(), + crop_box_array->at(3).to_float(), + }; + } + + float user_unit = 1.0f; + if (raw_page_object->contains("UserUnit")) + user_unit = raw_page_object->get_value("UserUnit").to_float(); + + Page page { move(resources), move(contents), media_box, crop_box, user_unit }; m_pages.set(index, page); return page; } diff --git a/Userland/Libraries/LibPDF/Document.h b/Userland/Libraries/LibPDF/Document.h index f521025087..5adc24a3ec 100644 --- a/Userland/Libraries/LibPDF/Document.h +++ b/Userland/Libraries/LibPDF/Document.h @@ -24,8 +24,10 @@ struct Rectangle { struct Page { NonnullRefPtr resources; - Rectangle media_box; NonnullRefPtr contents; + Rectangle media_box; + Rectangle crop_box; + float user_unit; }; class Document final : public RefCounted { @@ -105,8 +107,13 @@ template<> struct Formatter : Formatter { void format(FormatBuilder& builder, const PDF::Page& page) { - constexpr auto fmt_string = "Page {{\n resources={}\n contents={}\n media_box={}\n}}"; - auto str = String::formatted(fmt_string, page.resources->to_string(1), page.contents->to_string(1), page.media_box); + constexpr auto fmt_string = "Page {{\n resources={}\n contents={}\n media_box={}\n crop_box={}\n user_unit={}\n}}"; + auto str = String::formatted(fmt_string, + page.resources->to_string(1), + page.contents->to_string(1), + page.media_box, + page.crop_box, + page.user_unit); Formatter::format(builder, str); } };