Add stubs for fpdf2 (#6252)

This commit is contained in:
Sebastian Rittau
2021-11-10 18:06:26 +01:00
committed by GitHub
parent ab25042efa
commit f2551376ae
18 changed files with 721 additions and 0 deletions

View File

@@ -27,6 +27,7 @@
"stubs/dateparser",
"stubs/docutils",
"stubs/Flask",
"stubs/fpdf2",
"stubs/html5lib",
"stubs/httplib2",
"stubs/humanfriendly",

View File

@@ -0,0 +1 @@
version = "2.4.*"

View File

@@ -0,0 +1,10 @@
from pathlib import Path
from .fpdf import FPDF as FPDF, TitleStyle as TitleStyle
from .html import HTML2FPDF as HTML2FPDF, HTMLMixin as HTMLMixin
from .template import Template as Template
__license__: str
__version__: str
FPDF_VERSION: str
FPDF_FONT_DIR: Path

View File

@@ -0,0 +1,26 @@
from abc import ABC
from typing import Any
class Action(ABC):
def dict_as_string(self) -> None: ...
class NamedAction(Action):
action_name: Any
def __init__(self, action_name) -> None: ...
def dict_as_string(self): ...
class GoToAction(Action):
dest: Any
def __init__(self, dest) -> None: ...
def dict_as_string(self): ...
class GoToRemoteAction(Action):
file: Any
dest: Any
def __init__(self, file, dest) -> None: ...
def dict_as_string(self): ...
class LaunchAction(Action):
file: Any
def __init__(self, file) -> None: ...
def dict_as_string(self): ...

View File

@@ -0,0 +1,5 @@
from types import ModuleType
class WarnOnDeprecatedModuleAttributes(ModuleType):
def __getattr__(self, name): ...
def __setattr__(self, name, value) -> None: ...

View File

@@ -0,0 +1,9 @@
from typing import Any
class FPDFException(Exception): ...
class FPDFPageFormatException(FPDFException):
argument: Any
unknown: Any
one: Any
def __init__(self, argument, unknown: bool = ..., one: bool = ...) -> None: ...

View File

@@ -0,0 +1,4 @@
from typing import Any
courier: Any
fpdf_charwidths: Any

260
stubs/fpdf2/fpdf/fpdf.pyi Normal file
View File

@@ -0,0 +1,260 @@
import datetime
from collections.abc import Callable, Generator
from enum import IntEnum
from pathlib import Path
from typing import Any, NamedTuple
from typing_extensions import Literal
from .actions import Action
from .util import _Unit
_Orientation = Literal["", "portrait", "P", "landscape", "L"]
_Format = Literal["", "a3", "A3", "a4", "A4", "a5", "A5", "letter", "Letter", "legal", "Legal"]
_FontStyle = Literal["", "B", "I"]
_FontStyles = Literal["", "B", "I", "U", "BU", "UB", "BI", "IB", "IU", "UI", "BIU", "BUI", "IBU", "IUB", "UBI", "UIB"]
PAGE_FORMATS: dict[_Format, tuple[float, float]]
class DocumentState(IntEnum):
UNINITIALIZED: int
READY: int
GENERATING_PAGE: int
CLOSED: int
class Annotation(NamedTuple):
type: str
x: int
y: int
width: int
height: int
contents: str | None = ...
link: str | int | None = ...
alt_text: str | None = ...
action: Action | None = ...
class TitleStyle(NamedTuple):
font_family: str | None = ...
font_style: str | None = ...
font_size_pt: int | None = ...
color: int | tuple[int, int, int] | None = ...
underline: bool = ...
t_margin: int | None = ...
l_margin: int | None = ...
b_margin: int | None = ...
class ToCPlaceholder(NamedTuple):
render_function: Callable[[FPDF, Any], object]
start_page: int
y: int
pages: int = ...
class SubsetMap:
def __init__(self, identities: list[int]) -> None: ...
def pick(self, unicode: int): ...
def dict(self): ...
def get_page_format(format: _Format | tuple[float, float], k: float | None = ...) -> tuple[float, float]: ...
def load_cache(filename: Path): ...
class FPDF:
MARKDOWN_BOLD_MARKER: str
MARKDOWN_ITALICS_MARKER: str
MARKDOWN_UNDERLINE_MARKER: str
offsets: Any
page: int
n: int
buffer: Any
pages: Any
state: Any
fonts: Any
font_files: Any
diffs: Any
images: Any
annots: Any
links: Any
in_footer: int
lasth: int
current_font: Any
font_family: str
font_style: str
font_size_pt: int
font_stretching: int
str_alias_nb_pages: str
underline: int
draw_color: str
fill_color: str
text_color: str
ws: int
angle: int
font_cache_dir: Any
xmp_metadata: Any
image_filter: str
page_duration: int
page_transition: Any
struct_builder: Any
section_title_styles: Any
core_fonts: Any
core_fonts_encoding: str
font_aliases: Any
k: float
def_orientation: Any
font_size: Any
c_margin: Any
line_width: float
compress: bool
pdf_version: str
x: float
y: float
t_margin: float
r_margin: float
l_margin: float
def __init__(
self,
orientation: _Orientation = ...,
unit: _Unit | float = ...,
format: _Format | tuple[float, float] = ...,
font_cache_dir: bool = ...,
) -> None: ...
@property
def unifontsubset(self): ...
@property
def epw(self): ...
@property
def eph(self): ...
def set_margin(self, margin: float) -> None: ...
def set_margins(self, left: float, top: float, right: float = ...) -> None: ...
def set_left_margin(self, margin: float) -> None: ...
def set_top_margin(self, margin: float) -> None: ...
def set_right_margin(self, margin: float) -> None: ...
auto_page_break: Any
b_margin: Any
page_break_trigger: Any
def set_auto_page_break(self, auto: bool, margin: float = ...) -> None: ...
zoom_mode: Any
layout_mode: Any
def set_display_mode(self, zoom, layout: str = ...) -> None: ...
def set_compression(self, compress) -> None: ...
title: Any
def set_title(self, title: str) -> None: ...
lang: Any
def set_lang(self, lang: str) -> None: ...
subject: Any
def set_subject(self, subject: str) -> None: ...
author: Any
def set_author(self, author: str) -> None: ...
keywords: Any
def set_keywords(self, keywords: str) -> None: ...
creator: Any
def set_creator(self, creator: str) -> None: ...
producer: Any
def set_producer(self, producer: str) -> None: ...
creation_date: Any
def set_creation_date(self, date: datetime.datetime | None = ...) -> None: ...
def set_xmp_metadata(self, xmp_metadata) -> None: ...
def set_doc_option(self, opt, value) -> None: ...
def set_image_filter(self, image_filter) -> None: ...
def alias_nb_pages(self, alias: str = ...) -> None: ...
def open(self) -> None: ...
def close(self) -> None: ...
def add_page(
self,
orientation: _Orientation = ...,
format: _Format | tuple[float, float] = ...,
same: bool = ...,
duration: int = ...,
transition: Any | None = ...,
) -> None: ...
def header(self) -> None: ...
def footer(self) -> None: ...
def page_no(self): ...
def set_draw_color(self, r, g: int = ..., b: int = ...) -> None: ...
def set_fill_color(self, r, g: int = ..., b: int = ...) -> None: ...
def set_text_color(self, r, g: int = ..., b: int = ...) -> None: ...
def get_string_width(self, s, normalized: bool = ..., markdown: bool = ...): ...
def set_line_width(self, width: float) -> None: ...
def line(self, x1: float, y1: float, x2: float, y2: float) -> None: ...
def polyline(self, point_list, fill: bool = ..., polygon: bool = ...) -> None: ...
def polygon(self, point_list, fill: bool = ...) -> None: ...
def dashed_line(self, x1, y1, x2, y2, dash_length: int = ..., space_length: int = ...) -> None: ...
def rect(self, x, y, w, h, style: Any | None = ...) -> None: ...
def ellipse(self, x, y, w, h, style: Any | None = ...) -> None: ...
def circle(self, x, y, r, style: Any | None = ...) -> None: ...
def add_font(self, family: str, style: _FontStyle = ..., fname: str | None = ..., uni: bool = ...) -> None: ...
def set_font(self, family: str | None = ..., style: _FontStyles = ..., size: int = ...) -> None: ...
def set_font_size(self, size: int) -> None: ...
def set_stretching(self, stretching) -> None: ...
def add_link(self): ...
def set_link(self, link, y: int = ..., x: int = ..., page: int = ..., zoom: str = ...) -> None: ...
def link(self, x, y, w, h, link, alt_text: Any | None = ...) -> None: ...
def text_annotation(self, x, y, text) -> None: ...
def add_action(self, action, x, y, w, h) -> None: ...
def text(self, x, y, txt: str = ...) -> None: ...
def rotate(self, angle, x: Any | None = ..., y: Any | None = ...) -> None: ...
def rotation(self, angle, x: Any | None = ..., y: Any | None = ...) -> Generator[None, None, None]: ...
@property
def accept_page_break(self): ...
def cell(
self,
w: float | None = ...,
h: float | None = ...,
txt: str = ...,
border: bool | Literal[0, 1] | str = ...,
ln: int = ...,
align: str = ...,
fill: bool = ...,
link: str = ...,
center: bool = ...,
markdown: bool = ...,
): ...
def will_page_break(self, height): ...
def multi_cell(
self,
w: float,
h: float | None = ...,
txt: str = ...,
border: bool | Literal[0, 1] | str = ...,
align: str = ...,
fill: bool = ...,
split_only: bool = ...,
link: str = ...,
ln: int = ...,
max_line_height: Any | None = ...,
markdown: bool = ...,
): ...
def write(self, h: Any | None = ..., txt: str = ..., link: str = ...) -> None: ...
def image(
self,
name,
x: float | None = ...,
y: float | None = ...,
w: float = ...,
h: float = ...,
type: str = ...,
link: str = ...,
title: str | None = ...,
alt_text: str | None = ...,
): ...
def ln(self, h: Any | None = ...) -> None: ...
def get_x(self) -> float: ...
def set_x(self, x: float) -> None: ...
def get_y(self) -> float: ...
def set_y(self, y: float) -> None: ...
def set_xy(self, x: float, y: float) -> None: ...
def output(self, name: str = ..., dest: str = ...): ...
def normalize_text(self, txt): ...
def interleaved2of5(self, txt, x, y, w: int = ..., h: int = ...) -> None: ...
def code39(self, txt, x, y, w: float = ..., h: int = ...) -> None: ...
def rect_clip(self, x, y, w, h) -> Generator[None, None, None]: ...
def unbreakable(self) -> Generator[Any, None, None]: ...
def insert_toc_placeholder(self, render_toc_function, pages: int = ...) -> None: ...
def set_section_title_styles(
self,
level0,
level1: Any | None = ...,
level2: Any | None = ...,
level3: Any | None = ...,
level4: Any | None = ...,
level5: Any | None = ...,
level6: Any | None = ...,
) -> None: ...
def start_section(self, name, level: int = ...) -> None: ...

74
stubs/fpdf2/fpdf/html.pyi Normal file
View File

@@ -0,0 +1,74 @@
from html.parser import HTMLParser
from typing import Any
LOGGER: Any
BULLET_WIN1252: str
DEFAULT_HEADING_SIZES: Any
COLOR_DICT: Any
def px2mm(px): ...
def color_as_decimal(color: str = ...): ...
class HTML2FPDF(HTMLParser):
pdf: Any
image_map: Any
li_tag_indent: Any
table_line_separators: Any
ul_bullet_char: Any
style: Any
href: str
align: str
page_links: Any
font_stack: Any
indent: int
bullet: Any
font_size: Any
font_color: Any
table: Any
table_col_width: Any
table_col_index: Any
td: Any
th: Any
tr: Any
thead: Any
tfoot: Any
tr_index: Any
theader: Any
tfooter: Any
theader_out: bool
table_row_height: int
heading_level: Any
heading_sizes: Any
def __init__(
self,
pdf,
image_map: Any | None = ...,
li_tag_indent: int = ...,
table_line_separators: bool = ...,
ul_bullet_char=...,
heading_sizes: Any | None = ...,
**_,
): ...
def width2unit(self, length): ...
def handle_data(self, data) -> None: ...
def box_shadow(self, w, h, bgcolor) -> None: ...
def output_table_header(self) -> None: ...
tfooter_out: bool
def output_table_footer(self) -> None: ...
def output_table_sep(self) -> None: ...
font_face: Any
table_offset: Any
def handle_starttag(self, tag, attrs) -> None: ...
tbody: Any
def handle_endtag(self, tag) -> None: ...
h: Any
def set_font(self, face: Any | None = ..., size: Any | None = ...) -> None: ...
def set_style(self, tag: Any | None = ..., enable: bool = ...) -> None: ...
def set_text_color(self, r: Any | None = ..., g: int = ..., b: int = ...) -> None: ...
def put_link(self, txt) -> None: ...
def render_toc(self, pdf, outline) -> None: ...
def error(self, message) -> None: ...
class HTMLMixin:
HTML2FPDF_CLASS: Any
def write_html(self, text, *args, **kwargs) -> None: ...

View File

@@ -0,0 +1,6 @@
from typing import Any
SUPPORTED_IMAGE_FILTERS: Any
def load_image(filename): ...
def get_img_info(img, image_filter: str = ...): ...

View File

@@ -0,0 +1,32 @@
from typing import Any, NamedTuple
from .structure_tree import StructElem
from .syntax import Destination, PDFObject
class OutlineSection(NamedTuple):
name: str
level: str
page_number: int
dest: Destination
struct_elem: StructElem | None = ...
class OutlineItemDictionary(PDFObject):
title: str
parent: Any | None
prev: Any | None
next: Any | None
first: Any | None
last: Any | None
count: int
dest: str | None
struct_elem: StructElem | None
def __init__(self, title: str, dest: str | None = ..., struct_elem: StructElem | None = ..., **kwargs) -> None: ...
class OutlineDictionary(PDFObject):
type: str
first: Any | None
last: Any | None
count: int
def __init__(self, **kwargs) -> None: ...
def serialize_outline(sections, first_object_id: int = ..., fpdf: Any | None = ...): ...

View File

@@ -0,0 +1,13 @@
from typing import Any
class FPDFRecorder:
pdf: Any
accept_page_break: bool
def __init__(self, pdf, accept_page_break: bool = ...) -> None: ...
def __getattr__(self, name): ...
def rewind(self) -> None: ...
def replay(self) -> None: ...
class CallRecorder:
def __init__(self, func, calls) -> None: ...
def __call__(self, *args, **kwargs): ...

View File

@@ -0,0 +1,52 @@
from typing import Any, NamedTuple
from .syntax import PDFObject
class MarkedContent(NamedTuple):
page_object_id: int
struct_parents_id: int
struct_type: str
mcid: int | None = ...
title: str | None = ...
alt_text: str | None = ...
class NumberTree(PDFObject):
nums: Any
def __init__(self, **kwargs) -> None: ...
def serialize(self, fpdf: Any | None = ..., obj_dict: Any | None = ...): ...
class StructTreeRoot(PDFObject):
type: str
parent_tree: Any
k: Any
def __init__(self, **kwargs) -> None: ...
class StructElem(PDFObject):
type: str
s: Any
p: Any
k: Any
pg: Any
t: Any
alt: Any
def __init__(
self,
struct_type: str,
parent: PDFObject,
kids: list[int] | list[StructElem],
page: PDFObject | None = ...,
title: str | None = ...,
alt: str | None = ...,
**kwargs,
) -> None: ...
class StructureTreeBuilder:
struct_tree_root: Any
doc_struct_elem: Any
struct_elem_per_mc: Any
def __init__(self) -> None: ...
def add_marked_content(self, marked_content) -> None: ...
def next_mcid_for_page(self, page_object_id): ...
def empty(self): ...
def serialize(self, first_object_id: int = ..., fpdf: Any | None = ...): ...
def assign_ids(self, n): ...

View File

@@ -0,0 +1,45 @@
from abc import ABC
from typing import Any, List
def clear_empty_fields(d): ...
def create_dictionary_string(
dict_,
open_dict: str = ...,
close_dict: str = ...,
field_join: str = ...,
key_value_join: str = ...,
has_empty_fields: bool = ...,
): ...
def create_list_string(list_): ...
def iobj_ref(n): ...
def create_stream(stream): ...
class PDFObject:
def __init__(self, id: Any | None = ...) -> None: ...
@property
def id(self): ...
@id.setter
def id(self, n) -> None: ...
@property
def ref(self): ...
def serialize(self, fpdf: Any | None = ..., obj_dict: Any | None = ...): ...
def camel_case(property_name): ...
class PDFString(str):
def serialize(self): ...
class PDFArray(List[Any]):
def serialize(self): ...
class Destination(ABC):
def as_str(self, pdf: Any | None = ...) -> None: ...
class DestinationXYZ(Destination):
page: Any
x: Any
y: Any
zoom: Any
page_as_obj_id: Any
def __init__(self, page, x: int = ..., y: int = ..., zoom: str = ..., page_as_obj_id: bool = ...) -> None: ...
def as_str(self, pdf: Any | None = ...): ...

View File

@@ -0,0 +1,35 @@
from typing import Any
class FlexTemplate:
pdf: Any
splitting_pdf: Any
handlers: Any
texts: Any
def __init__(self, pdf, elements: Any | None = ...) -> None: ...
elements: Any
keys: Any
def load_elements(self, elements) -> None: ...
def parse_csv(self, infile, delimiter: str = ..., decimal_sep: str = ..., encoding: Any | None = ...): ...
def __setitem__(self, name, value) -> None: ...
set: Any
def __contains__(self, name): ...
def __getitem__(self, name): ...
def split_multicell(self, text, element_name): ...
def render(self, offsetx: float = ..., offsety: float = ..., rotate: float = ..., scale: float = ...): ...
class Template(FlexTemplate):
def __init__(
self,
infile: Any | None = ...,
elements: Any | None = ...,
format: str = ...,
orientation: str = ...,
unit: str = ...,
title: str = ...,
author: str = ...,
subject: str = ...,
creator: str = ...,
keywords: str = ...,
) -> None: ...
def add_page(self) -> None: ...
def render(self, outfile: Any | None = ..., dest: Any | None = ...) -> None: ... # type: ignore

View File

@@ -0,0 +1,58 @@
from abc import ABC
from typing import Any
class Transition(ABC):
def dict_as_string(self) -> None: ...
class SplitTransition(Transition):
dimension: Any
direction: Any
def __init__(self, dimension, direction) -> None: ...
def dict_as_string(self): ...
class BlindsTransition(Transition):
dimension: Any
def __init__(self, dimension) -> None: ...
def dict_as_string(self): ...
class BoxTransition(Transition):
direction: Any
def __init__(self, direction) -> None: ...
def dict_as_string(self): ...
class WipeTransition(Transition):
direction: Any
def __init__(self, direction) -> None: ...
def dict_as_string(self): ...
class DissolveTransition(Transition):
def dict_as_string(self): ...
class GlitterTransition(Transition):
direction: Any
def __init__(self, direction) -> None: ...
def dict_as_string(self): ...
class FlyTransition(Transition):
dimension: Any
direction: Any
def __init__(self, dimension, direction: Any | None = ...) -> None: ...
def dict_as_string(self): ...
class PushTransition(Transition):
direction: Any
def __init__(self, direction) -> None: ...
def dict_as_string(self): ...
class CoverTransition(Transition):
direction: Any
def __init__(self, direction) -> None: ...
def dict_as_string(self): ...
class UncoverTransition(Transition):
direction: Any
def __init__(self, direction) -> None: ...
def dict_as_string(self): ...
class FadeTransition(Transition):
def dict_as_string(self): ...

View File

@@ -0,0 +1,72 @@
from typing import Any
GF_WORDS: Any
GF_SCALE: Any
GF_MORE: Any
GF_XYSCALE: Any
GF_TWOBYTWO: Any
def sub32(x, y): ...
def calcChecksum(data): ...
class TTFontFile:
maxStrLenRead: int
def __init__(self) -> None: ...
filename: Any
charWidths: Any
glyphPos: Any
charToGlyph: Any
tables: Any
otables: Any
ascent: int
descent: int
version: Any
def getMetrics(self, file) -> None: ...
numTables: Any
searchRange: Any
entrySelector: Any
rangeShift: Any
def readTableDirectory(self) -> None: ...
def get_table_pos(self, tag): ...
def seek(self, pos) -> None: ...
def skip(self, delta) -> None: ...
def seek_table(self, tag, offset_in_table: int = ...): ...
def read_tag(self): ...
def read_short(self): ...
def read_ushort(self): ...
def read_ulong(self): ...
def get_ushort(self, pos): ...
@staticmethod
def splice(stream, offset, value): ...
def get_chunk(self, pos, length): ...
def get_table(self, tag): ...
def add(self, tag, data) -> None: ...
sFamilyClass: int
sFamilySubClass: int
name: Any
familyName: Any
styleName: Any
fullName: Any
uniqueFontID: Any
unitsPerEm: Any
bbox: Any
capHeight: Any
stemV: Any
italicAngle: Any
underlinePosition: Any
underlineThickness: Any
flags: int
def extractInfo(self) -> None: ...
maxUni: int
codeToGlyph: Any
glyphdata: Any
def makeSubset(self, file, subset): ...
def getGlyphs(self, originalGlyphIdx, nonlocals) -> None: ...
defaultWidth: Any
def getHMTX(self, numberOfHMetrics, numGlyphs, glyphToChar, scale) -> None: ...
def getHMetric(self, numberOfHMetrics, gid): ...
def getLOCA(self, indexToLocFormat, numGlyphs) -> None: ...
maxUniChar: int
def getCMAP4(self, unicode_cmap_offset, glyphToChar, charToGlyph) -> None: ...
def getCMAP12(self, unicode_cmap_offset, glyphToChar, charToGlyph) -> None: ...
def endTTFile(self, stm): ...

18
stubs/fpdf2/fpdf/util.pyi Normal file
View File

@@ -0,0 +1,18 @@
from collections.abc import Iterable
from typing import Any, Tuple
from typing_extensions import Literal
_Unit = Literal["pt", "mm", "cm", "in"]
def substr(s, start, length: int = ...): ...
def enclose_in_parens(s): ...
def escape_parens(s): ...
def b(s): ...
def get_scale_factor(unit: _Unit | float) -> float: ...
def convert_unit(
# to_convert has a recursive type
to_convert: float | Iterable[float | Iterable[Any]],
old_unit: str | float,
new_unit: str | float,
) -> float | Tuple[float, ...]: ...
def dochecks() -> None: ...