blob: 3cdec07fe239005b68a6a25fc09afc91a65618a1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
// SPDX-License-Identifier: GPL-2.0-or-later
/** @file
* PDF parsing utilities for libpoppler.
*//*
* Authors:
* Martin Owens
*
* Copyright (C) 2022 Authors
*
* Released under GNU GPL v2+, read the file 'COPYING' for more information.
*/
#ifndef POPPLER_UTILS_H
#define POPPLER_UTILS_H
#include <map>
#include <memory>
#include <string>
#include <unordered_set>
#include <vector>
#include "poppler-transition-api.h"
namespace Geom {
class Affine;
}
class Dict;
class FNVHash;
class GfxFont;
class GfxState;
class Object;
class PDFDoc;
class Ref;
class XRef;
Geom::Affine stateToAffine(GfxState *state);
Geom::Affine ctmToAffine(const double *ctm);
void ctmout(const char *label, const double *ctm);
void affout(const char *label, Geom::Affine affine);
#if POPPLER_CHECK_VERSION(22, 4, 0)
typedef std::shared_ptr<GfxFont> FontPtr;
#else
typedef GfxFont *FontPtr;
#endif
class FontData
{
public:
FontData(FontPtr font);
std::string getSubstitute() const;
std::string getSpecification() const;
bool found = false;
std::unordered_set<int> pages;
std::string name;
std::string family;
std::string style;
std::string weight;
std::string stretch;
std::string variation;
private:
void _parseStyle();
};
typedef std::shared_ptr<std::map<FontPtr, FontData>> FontList;
FontList getPdfFonts(std::shared_ptr<PDFDoc> pdf_doc);
std::string getDictString(Dict *dict, const char *key);
// Replacate poppler FontDict
class InkFontDict
{
public:
// Build the font dictionary, given the PDF font dictionary.
InkFontDict(XRef *xref, Ref *fontDictRef, Dict *fontDict);
// Iterative access.
int getNumFonts() const { return fonts.size(); }
// Get the specified font.
FontPtr lookup(const char *tag) const;
FontPtr getFont(int i) const { return fonts[i]; }
std::vector<FontPtr> fonts;
private:
int hashFontObject(Object *obj);
void hashFontObject1(const Object *obj, FNVHash *h);
};
#endif /* POPPLER_UTILS_H */
|