Skip to content

Commit

Permalink
Lower minimum poppler-cpp version to 0.26.0 (#13)
Browse files Browse the repository at this point in the history
* Lower minimum poppler-cpp version to 0.26.0

* Update test_document.py for 0.26.0 compatibility

* Add version annotations in document.py

* Update minimum poppler version in docs

* Add poppler-0.26.0 to test matrix

* Update test_page.py for poppler 0.26.0 compatibility

* Use info_keys to get author, creation date, creator, keywords, mod date, producer, subject, title

* Only install libpoppler-cpp-dev on ubuntu poppler-version
  • Loading branch information
sandeepmistry authored Sep 9, 2020
1 parent 24eb8e2 commit 34c5572
Show file tree
Hide file tree
Showing 7 changed files with 122 additions and 39 deletions.
8 changes: 6 additions & 2 deletions .github/workflows/pythonpackage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
strategy:
matrix:
python-version: [3.7, 3.8]
poppler-version: [ubuntu, poppler-20.08.0, master]
poppler-version: [ubuntu, poppler-0.26.0, poppler-20.08.0, master]

steps:
- uses: actions/checkout@v2
Expand All @@ -28,9 +28,13 @@ jobs:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
sudo apt-get install libpoppler-cpp-dev libopenjp2-7-dev
sudo apt-get install libopenjp2-7-dev
python -m pip install --upgrade pip
pip install tox
- name: Install libpoppler-cpp-dev
if: matrix.poppler-version == 'ubuntu'
run: |
sudo apt-get install libpoppler-cpp-dev
- name: clone poppler
if: matrix.poppler-version != 'ubuntu'
run: |
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ add_subdirectory(pybind11)


find_package(PkgConfig REQUIRED)
pkg_check_modules(POPPLER REQUIRED IMPORTED_TARGET poppler-cpp>=0.62.0)
pkg_check_modules(POPPLER REQUIRED IMPORTED_TARGET poppler-cpp>=0.26.0)

add_library(global_ MODULE src/cpp/global.cpp)
target_link_libraries(global_ PRIVATE pybind11::module PkgConfig::POPPLER )
Expand Down
2 changes: 1 addition & 1 deletion docs/installation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ This package is currently distributed as source only,
and is currently tested on Linux only (using Arch Linux
on my personal machine, and Ubuntu 18.04 using GitHub actions.

It requires poppler version 0.62 or higher.
It requires poppler version 0.26 or higher.
Current poppler version is 0.89.
Because we need to compile and link cpp files, you need
the headers files for poppler and for python.
Expand Down
6 changes: 6 additions & 0 deletions src/cpp/document.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,16 +107,20 @@ PYBIND11_MODULE(document, m)
.def("create_toc", &document::create_toc)
.def("embedded_files", &document::embedded_files)
.def("fonts", &document::fonts)
#if HAS_VERSION(0, 46)
.def("get_author", &document::get_author)
.def("get_creation_date", &document::get_creation_date)
.def("get_creator", &document::get_creator)
.def("get_keywords", &document::get_keywords)
.def("get_modification_date", &document::get_modification_date)
#endif
.def("get_pdf_id", &binding::pdf_id)
.def("get_pdf_version", &binding::pdf_version)
#if HAS_VERSION(0, 46)
.def("get_producer", &document::get_producer)
.def("get_subject", &document::get_subject)
.def("get_title", &document::get_title)
#endif
.def("has_embedded_files", &document::has_embedded_files)
.def("has_permission", &document::has_permission, py::arg("which"))
.def("info_date", &document::info_date, py::arg("key"))
Expand All @@ -129,6 +133,7 @@ PYBIND11_MODULE(document, m)
.def("page_layout", &document::page_layout)
.def("page_mode", &document::page_mode)
.def("pages", &document::pages)
#if HAS_VERSION(0, 46)
.def("remove_info", &document::remove_info)
.def("save", &document::save, py::arg("file_name"))
.def("save_a_copy", &document::save_a_copy, py::arg("file_name"))
Expand All @@ -142,6 +147,7 @@ PYBIND11_MODULE(document, m)
.def("set_producer", &document::set_producer, py::arg("producer"))
.def("set_subject", &document::set_subject, py::arg("subject"))
.def("set_title", &document::set_title, py::arg("title"))
#endif
.def("unlock", &document::unlock, py::arg("owner_password"), py::arg("user_password"));

m.def("load_from_data", &binding::load_from_data, py::arg("file_data"), py::arg("owner_password") = "", py::arg("user_password") = "");
Expand Down
47 changes: 29 additions & 18 deletions src/poppler/document.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,43 +72,46 @@ def create_page(self, index):
@property
@ensure_unlocked
def author(self):
return str(self._document.get_author())
return self.info_key("Author")

@author.setter
@since(0, 46)
@ensure_unlocked
def author(self, author):
self._document.set_author(ustring(author))
self.set_info_key("Author", author)

@property
@ensure_unlocked
def creation_date(self):
timestamp = self._document.get_creation_date()
return from_time_type(timestamp)
return self.info_date("CreationDate")

@creation_date.setter
@since(0, 46)
@ensure_unlocked
def creation_date(self, creation_date):
self._document.set_creation_date(to_time_type(creation_date))
self.set_info_date("CreationDate", creation_date)

@property
@ensure_unlocked
def creator(self):
return str(self._document.get_creator())
return self.info_key("Creator")

@creator.setter
@since(0, 46)
@ensure_unlocked
def creator(self, creator):
self._document.set_creator(ustring(creator))
self.set_info_key("Creator", creator)

@property
@ensure_unlocked
def keywords(self):
return str(self._document.get_keywords())
return self.info_key("Keywords")

@keywords.setter
@since(0, 46)
@ensure_unlocked
def keywords(self, keywords):
self._document.set_keywords(ustring(keywords))
self.set_info_key("Keywords", keywords)

@property
@ensure_unlocked
Expand All @@ -119,13 +122,13 @@ def metadata(self):
@property
@ensure_unlocked
def modification_date(self):
timestamp = self._document.get_modification_date()
return from_time_type(timestamp)
return self.info_date("ModDate")

@modification_date.setter
@since(0, 46)
@ensure_unlocked
def modification_date(self, modification_date):
self._document.set_modification_date(to_time_type(modification_date))
self.set_info_date("ModDate", modification_date)

@property
def pdf_id(self):
Expand All @@ -138,32 +141,35 @@ def pdf_version(self):
@property
@ensure_unlocked
def producer(self):
return str(self._document.get_producer())
return self.info_key("Producer")

@producer.setter
@since(0, 46)
@ensure_unlocked
def producer(self, producer):
self._document.set_producer(ustring(producer))
self.set_info_key("Producer", producer)

@property
@ensure_unlocked
def subject(self):
return str(self._document.get_subject())
return self.info_key("Subject")

@subject.setter
@since(0, 46)
@ensure_unlocked
def subject(self, subject):
self._document.set_subject(ustring(subject))
self.set_info_key("Subject", subject)

@property
@ensure_unlocked
def title(self):
return str(self._document.get_title())
return self.info_key("Title")

@title.setter
@since(0, 46)
@ensure_unlocked
def title(self, title):
self._document.set_title(ustring(title))
self.set_info_key("Title", title)

@property
@ensure_unlocked
Expand Down Expand Up @@ -198,6 +204,7 @@ def info_date(self, key):
timestamp = self._document.info_date(key)
return from_time_type(timestamp)

@since(0, 46)
@ensure_unlocked
def set_info_date(self, key, val):
return self._document.set_info_date(key, to_time_type(val))
Expand All @@ -218,6 +225,7 @@ def infos(self):
info_dict[key] = self.info_key(key)
return info_dict

@since(0, 46)
@ensure_unlocked
def set_info_key(self, key, val):
return self._document.set_info_key(key, ustring(val))
Expand Down Expand Up @@ -245,14 +253,17 @@ def page_layout(self):
def page_mode(self):
return self._document.page_mode()

@since(0, 46)
@ensure_unlocked
def remove_info(self):
return self._document.remove_info()

@since(0, 46)
@ensure_unlocked
def save(self, file_name):
return self._document.save(str(file_name))

@since(0, 46)
@ensure_unlocked
def save_a_copy(self, file_name):
return self._document.save_a_copy(str(file_name))
Expand Down
Loading

0 comments on commit 34c5572

Please sign in to comment.