diff --git a/Userland/Libraries/LibPDF/Renderer.cpp b/Userland/Libraries/LibPDF/Renderer.cpp index 55e65605fa..fe17b1d72a 100644 --- a/Userland/Libraries/LibPDF/Renderer.cpp +++ b/Userland/Libraries/LibPDF/Renderer.cpp @@ -42,6 +42,15 @@ Renderer::Renderer(RefPtr document, const Page& page, RefPtr(bitmap->height()) / height; userspace_matrix.scale(scale_x, scale_y); + // PDF user-space coordinate y axis increases from bottom to top, so we have to + // insert a horizontal reflection about the vertical midpoint into our transformation + // matrix + + static Gfx::AffineTransform horizontal_reflection_matrix = { 1, 0, 0, -1, 0, 0 }; + + userspace_matrix.multiply(horizontal_reflection_matrix); + userspace_matrix.translate(0.0f, -height); + m_graphics_state_stack.append(GraphicsState { userspace_matrix }); m_bitmap->fill(Gfx::Color::NamedColor::White); @@ -530,8 +539,6 @@ void Renderer::show_text(const String& string, float shift) VERIFY(font); auto glyph_position = text_rendering_matrix.map(Gfx::FloatPoint { 0.0f, 0.0f }); - // Reverse the Y axis - glyph_position.set_y(static_cast(m_bitmap->height()) - glyph_position.y()); // Account for the reversed font baseline glyph_position.set_y(glyph_position.y() - static_cast(font->baseline()));