feat: implemented caret based selection at any click position

This commit is contained in:
Furqan-14
2026-06-12 19:13:29 +05:30
parent d47895c990
commit 44f64a0d99
9 changed files with 438 additions and 47 deletions
+11 -1
View File
@@ -153,7 +153,8 @@ PYBIND11_MODULE(pdfengine, m) {
.def_readonly("y", &pdfengine::TextRun::y)
.def_readonly("w", &pdfengine::TextRun::w)
.def_readonly("h", &pdfengine::TextRun::h)
.def_readonly("object_indices", &pdfengine::TextRun::objectIndices);
.def_readonly("object_indices", &pdfengine::TextRun::objectIndices)
.def_readonly("fill_color", &pdfengine::TextRun::fillColor);
py::class_<pdfengine::TextLine>(m, "TextLine")
.def_readonly("runs", &pdfengine::TextLine::runs)
@@ -303,6 +304,15 @@ PYBIND11_MODULE(pdfengine, m) {
.def("get_fonts", [](const pdfengine::PdfDocument& self, int start_page, int end_page) {
return get_or_throw(self.getFonts(start_page, end_page));
}, py::arg("start_page") = 0, py::arg("end_page") = -1)
.def("get_font_data", [](const pdfengine::PdfDocument& self, const std::string& internal_font_id) {
// Raw embedded font bytes for the given run font; empty bytes when the font
// is not embedded / not found (the gateway maps that to a 404 + CSS fallback).
auto res = self.getFontData(internal_font_id);
if (!res || res->empty()) {
return py::bytes();
}
return py::bytes(reinterpret_cast<const char*>(res->data()), res->size());
}, py::arg("internal_font_id"))
.def("apply_edits", [](pdfengine::PdfDocument& self, const std::string& editsJson) {
get_or_throw(self.applyEdits(editsJson));
}, py::arg("edits_json"))