mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:52:45 +00:00 
			
		
		
		
	 cade76d240
			
		
	
	
		cade76d240
		
	
	
	
	
		
			
			It is sometimes truncated in fonts embedded in PDFs, and the data is not needed to render PDFs. 2 of my 1000 test PDFs used to complain "Could not load OS2 v1: Not enough data" and 1 "Could not load OS2 v2: Not enough data" before. Increases number of PDFs that render without diagnostics from 764 to 765 (and decreases the number of distinct error messages from 27 to 25).
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2022, Matthew Olsson <mattco@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/HashMap.h>
 | |
| #include <AK/Tuple.h>
 | |
| #include <LibGfx/Font/OpenType/Font.h>
 | |
| #include <LibGfx/Forward.h>
 | |
| #include <LibPDF/Document.h>
 | |
| #include <LibPDF/Encoding.h>
 | |
| 
 | |
| namespace PDF {
 | |
| 
 | |
| class Renderer;
 | |
| 
 | |
| // PDF files don't need most of the data in OpenType fonts, and even contain invalid data for
 | |
| // these tables in some cases. Skip reading these tables.
 | |
| constexpr u32 pdf_skipped_opentype_tables = OpenType::FontOptions::SkipTables::Name | OpenType::FontOptions::SkipTables::Hmtx | OpenType::FontOptions::SkipTables::OS2;
 | |
| 
 | |
| class PDFFont : public RefCounted<PDFFont> {
 | |
| public:
 | |
|     static PDFErrorOr<NonnullRefPtr<PDFFont>> create(Document*, NonnullRefPtr<DictObject> const&, float font_size);
 | |
| 
 | |
|     virtual ~PDFFont() = default;
 | |
| 
 | |
|     virtual void set_font_size(float font_size) = 0;
 | |
|     virtual PDFErrorOr<Gfx::FloatPoint> draw_string(Gfx::Painter&, Gfx::FloatPoint, ByteString const&, Renderer const&) = 0;
 | |
| 
 | |
| protected:
 | |
|     virtual PDFErrorOr<void> initialize(Document* document, NonnullRefPtr<DictObject> const& dict, float font_size);
 | |
|     static PDFErrorOr<NonnullRefPtr<Gfx::Font>> replacement_for(StringView name, float font_size);
 | |
| };
 | |
| 
 | |
| }
 |