!1 初始化仓库
From: @wangtaozhi Reviewed-by: @tangjie02 Signed-off-by: @tangjie02
This commit is contained in:
commit
e526b08cdd
BIN
pympress-1.8.1.tar.gz
Normal file
BIN
pympress-1.8.1.tar.gz
Normal file
Binary file not shown.
4
pympress.yaml
Normal file
4
pympress.yaml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
version_control: github
|
||||||
|
src_repo: https://github.com/Cimbali/pympress/
|
||||||
|
tag_prefix: "v"
|
||||||
|
separator: "."
|
||||||
341
python3-pympress.spec
Normal file
341
python3-pympress.spec
Normal file
@ -0,0 +1,341 @@
|
|||||||
|
%define normalize() %(echo %* | tr "[:upper:]_ " "[:lower:]--")
|
||||||
|
%{?!py3_dist:%define py3_dist() (python%{python3_version}dist(%{normalize %1}) or python3-%1)}
|
||||||
|
|
||||||
|
|
||||||
|
Summary: A simple and powerful dual-screen PDF reader designed for presentations
|
||||||
|
Name: python3-pympress
|
||||||
|
Version: 1.8.1
|
||||||
|
Release: 1
|
||||||
|
Source0: pympress-1.8.1.tar.gz
|
||||||
|
License: GPL-2.0-or-later
|
||||||
|
Prefix: %{_prefix}
|
||||||
|
BuildArch: noarch
|
||||||
|
Vendor: Cimbali, Thomas Jost, Christof Rath, Epithumia <me@cimba.li>
|
||||||
|
Url: https://github.com/Cimbali/pympress/
|
||||||
|
Requires: python(abi) = %{python3_version}
|
||||||
|
Provides: python%{python3_version}dist(pympress) = 1.8.1
|
||||||
|
BuildRequires: findutils grep python3-devel
|
||||||
|
%if %{?!rhel:8}%{?rhel} >= 8
|
||||||
|
Requires: (%{py3_dist pygobject} or python3-gobject)
|
||||||
|
%else
|
||||||
|
Requires: python3%{suffix:%{python3_version}}-gobject
|
||||||
|
%endif
|
||||||
|
%if 0%{?suse_version}
|
||||||
|
Requires: gtk3 libpoppler-glib8 libgdk_pixbuf-2_0-0 gstreamer gstreamer-plugins-base gstreamer-plugins-good gstreamer-plugins-good-gtk libgstvideo-1_0-0
|
||||||
|
Recommends: gstreamer-plugins-ugly gstreamer-plugins-bad
|
||||||
|
%endif
|
||||||
|
%if 0%{?mdkversion}%{?mga_version}
|
||||||
|
Requires: gtk+3.0 (libpoppler-glib8 or lib64poppler-glib8) (libgdk_pixbuf2.0 or libgdk_pixbuf2.0_0) libgstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good
|
||||||
|
Recommends: gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad
|
||||||
|
%endif
|
||||||
|
%if 0%{?suse_version}%{?mga_version}%{?mdkversion}
|
||||||
|
Requires: typelib(cairo) typelib(GLib) typelib(DBus) typelib(DBusGLib) typelib(GObject) typelib(Gdk) typelib(GdkPixbuf) typelib(Gio) typelib(Gtk) typelib(Poppler) typelib(Gst) typelib(GstAllocators) typelib(GstApp) typelib(GstAudio) typelib(GstVideo) typelib(GstGL)
|
||||||
|
Recommends: typelib(GstMpegts) typelib(GstWebRTC) typelib(GstBadAudio) typelib(GstCodecs)
|
||||||
|
%endif
|
||||||
|
BuildRequires: python3-setuptools >= 40.8.0, python3-wheel
|
||||||
|
Requires: gobject-introspection %{py3_dist watchdog}
|
||||||
|
Requires: python(abi) >= 3.4
|
||||||
|
|
||||||
|
%description
|
||||||
|
#  What is Pympress?
|
||||||
|
|
||||||
|
Pympress is a PDF presentation tool designed for dual-screen setups such as presentations and public talks.
|
||||||
|
Highly configurable, fully-featured, and portable
|
||||||
|
|
||||||
|
It comes with many great features ([more below](#functionalities)):
|
||||||
|
- supports embedded gifs (out of the box), videos, and audios (with VLC or Gstreamer integration)
|
||||||
|
- text annotations displayed in the presenter window
|
||||||
|
- natively supports beamer's *notes on second screen*, as well as Libreoffice notes pages!
|
||||||
|
|
||||||
|
Pympress is a free software, distributed under the terms of the GPL license (version 2 or, at your option, any later version).
|
||||||
|
|
||||||
|
Pympress was originally created and maintained by [Schnouki](https://github.com/Schnouki), on [his repo](https://github.com/Schnouki/pympress).
|
||||||
|
|
||||||
|
Here is what the 2 screen setup looks like, with a big notes slide next to 2 small slides (current and next) on the presenter side:
|
||||||
|

|
||||||
|
|
||||||
|
# Usage
|
||||||
|
|
||||||
|
## Opening a file
|
||||||
|
Simply start Pympress and it will ask you what file you want to open.
|
||||||
|
You can also start pympress from the command line with a file to open like so:
|
||||||
|
`pympress slides.pdf`
|
||||||
|
or
|
||||||
|
`python3 -m pympress slides.pdf`
|
||||||
|
|
||||||
|
## Functionalities
|
||||||
|
|
||||||
|
All functionalities are available from the menus of the window with slide previews. Don't be afraid to experiment with them!
|
||||||
|
|
||||||
|
Keyboard shortcuts are also listed in these menus. Some more usual shortcuts are often available, for example `Ctrl`+`L`, and `F11` also toggle fullscreen, though the main shortcut is just `F`.
|
||||||
|
|
||||||
|
A few of the fancier functionalities are listed here:
|
||||||
|
- **Two-screen display**: See on your laptop or tablet display the current slide, the next slide, the talk time and wall-clock time, and annotations (either PDF annotations, beamer notes on second slide, or Libreoffice notes pages).
|
||||||
|
The position of the beamer or Libreoffice notes in the slide is detected automatically and can be overridden via a menu option.
|
||||||
|
|
||||||
|
If you do not want to use second-slide beamer notes but prefer to have notes on their own pages, you can enable auto-detection of these notes.
|
||||||
|
Use the following snippet that prefixes the page labels with `notes:` on notes pages:
|
||||||
|
```latex
|
||||||
|
\addtobeamertemplate{note page}{}{\thispdfpagelabel{notes:\insertframenumber}}
|
||||||
|
```
|
||||||
|
- **Media support**: supports playing video, audio, and gif files embedded in (or linked from) the PDF file, with optional start/end times and looping.
|
||||||
|
- **Highlight mode**: Allows one to draw freehand on the slide currently on screen.
|
||||||
|
- **Go To Slide**: To jump to a selected slide without flashing through the whole presentation on the projector, press `G` or click the "current slide" box.
|
||||||
|
Using `J` or clicking the slide label will allow you to navigate slide labels instead of page numbers, useful e.g. for multi-page slides from beamer `\pause`.
|
||||||
|
|
||||||
|
A spin box will appear, and you will be able to navigate through your slides in the presenter window only by scrolling your mouse, with the `Home`/`Up`/`Down`/`End` keys,
|
||||||
|
with the + and - buttons of the spin box, or simply by typing in the number of the slide. Press `Enter` to validate going to the new slide or `Esc` to cancel.
|
||||||
|
|
||||||
|
- **Deck Overview**: Pressing `D` will open an overview of your whole slide deck, and any slide can be opened from can simply clicking it.
|
||||||
|
- **Software pointer**: Clicking on the slide (in either window) while holding `ctrl` down will display a software laser pointer on the slide. Or press `L` to permanently switch on the laser pointer.
|
||||||
|
- **Talk time breakdown**: The `Presentation > Timing Breakdown` menu item displays a breakdown of how much time was spent on each slide, with a hierarchical breakdown per chapters/sections/etc. if available in the PDF.
|
||||||
|
- **Automatic file reloading**: If the file is modified, pympress will reload it (and preserve the current slide, current time, etc.)
|
||||||
|
- **Big button mode**: Add big buttons (duh) for touch displays.
|
||||||
|
- **Swap screens**: If Pympress mixed up which screen is the projector and which is not, press `S`
|
||||||
|
- **Automatic full screen**: pympress will automatically put the content window fullscreen on your non-primay screen when:
|
||||||
|
- connecting a second screen,
|
||||||
|
- extending your desktop to a second screen that was mirroring your main screen,
|
||||||
|
- when starting pympress on a two-screen display.
|
||||||
|
To disable this behaviour, untick “Content fullscreen” under the “Starting configuration” menu.
|
||||||
|
- **Estimated talk time**: Click the `Time estimation` box and set your planned talk duration. The color will allow you to see at a glance how much time you have left.
|
||||||
|
- **Adjust screen centering**: If your slides' form factor doesn't fit the projectors' and you don't want the slide centered in the window, use the "Screen Center" option in the "Presentation" menu.
|
||||||
|
- **Resize Current/Next slide**: You can drag the bar between both slides on the Presenter window to adjust their relative sizes to your liking.
|
||||||
|
- **Caching**: For efficiency, Pympress caches rendered pages (up to 200 by default). If this is too memory consuming for you, you can change this number in the configuration file.
|
||||||
|
- **Configurability**: Your preferences are saved in a configuration file, and many options are accessible there directly. These include:
|
||||||
|
- Customisable key bindings (or shortcuts),
|
||||||
|
- Configurable layout of the presenter window, with 1 to 16 next slides preview
|
||||||
|
- and many more.
|
||||||
|
|
||||||
|
See the [configuration file documentation](docs/options.md) for more details,
|
||||||
|
- **Editable PDF annotations**: Annotations can be added, removed, or changed, and the modified PDF files can be saved
|
||||||
|
- **Automatic next slide and looping**
|
||||||
|
|
||||||
|
## Command line arguments
|
||||||
|
|
||||||
|
- `-h, --help`: Shows a list of all command line arguments.
|
||||||
|
- `-t mm[:ss], --talk-time=mm[:ss]`: The estimated (intended) talk time in minutes and optionally seconds.
|
||||||
|
- `-n position, --notes=position`: Set the position of notes on the pdf page (none, left, right, top, or bottom). Overrides the detection from the file.
|
||||||
|
- `--log=level`: Set level of verbosity in log file (DEBUG, INFO, WARNING, ERROR).
|
||||||
|
|
||||||
|
## Media and autoplay
|
||||||
|
|
||||||
|
To enable media playback, you need to have either:
|
||||||
|
- Gstreamer installed (enabled by default), with plugins gstreamer-good/-bad/-ugly based on which codecs you need, or
|
||||||
|
- VLC installed (and the python-vlc module), with `enabled = on` under the `[vlc]` section of your config file.
|
||||||
|
|
||||||
|
On macOS, issues with the gstreamer brew formula may require users to set `GST_PLUGIN_SYSTEM_PATH` manually. For default homebrew configurations the value should be `/opt/homebrew/lib/gstreamer-1.0/`. Make sure to set this environmental variable globally, or pympress might not pick it up.
|
||||||
|
|
||||||
|
To produce PDFs with media inclusion, the ideal method is to use beamer’s multimedia package, always with `\movie`:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\documentclass{beamer}
|
||||||
|
\usepackage{multimedia}
|
||||||
|
|
||||||
|
\begin{frame}{Just a mp4 here}
|
||||||
|
\centering
|
||||||
|
\movie[width=0.3\textwidth]{\includegraphics[width=0.9\textwidth]{frame1.png}}{movie.mp4}
|
||||||
|
|
||||||
|
\movie[width=0.3\textwidth]{}{animation.gif}
|
||||||
|
|
||||||
|
\movie[width=0.3\textwidth]{}{ding.ogg}
|
||||||
|
\end{frame}
|
||||||
|
```
|
||||||
|
|
||||||
|
If you desire autoplay, ensure you have pympress ≥ 1.7.0 and poppler ≥ 21.04, and use the `movie15` package as follows:
|
||||||
|
|
||||||
|
```latex
|
||||||
|
\documentclass{beamer}
|
||||||
|
\usepackage{movie15}
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\begin{frame}
|
||||||
|
\begin{center}
|
||||||
|
\includemovie[attach=false,autoplay,text={%%
|
||||||
|
\includegraphics{files/mailto.png}%%
|
||||||
|
}]{0.4\linewidth}{0.3\linewidth}{files/random.mpg}
|
||||||
|
\end{center}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\end{document}
|
||||||
|
```
|
||||||
|
|
||||||
|
# Dependencies
|
||||||
|
|
||||||
|
Pympress relies on:
|
||||||
|
* Python (version ≥ 3.4, python 2.7 is supported only until pympress 1.5.1, and 3.x < 3.4 until v1.6.4).
|
||||||
|
* [Poppler](http://poppler.freedesktop.org/), the PDF rendering library.
|
||||||
|
* [Gtk+ 3](http://www.gtk.org/), a toolkit for creating graphical user interfaces, and [its dependencies](https://www.gtk.org/overview.php), specifically:
|
||||||
|
* [Cairo](https://www.cairographics.org/) (and python bindings for cairo), the graphics library which is used to pre-render and draw over PDF pages.
|
||||||
|
* Gdk, a lower-level graphics library to handle icons.
|
||||||
|
* [PyGi, the python bindings for Gtk+3](https://wiki.gnome.org/Projects/PyGObject). PyGi is also known as *pygobject3*, just *pygobject* or *python3-gi*.
|
||||||
|
* Introspection bindings for poppler may be shipped separately, ensure you have those as well (`typelib-1_0-Poppler-0_18` on OpenSUSE, `gir1.2-poppler-0.18` on Ubuntu)
|
||||||
|
* optionally [VLC](https://www.videolan.org/vlc/), to play videos (with the same bitness as Python)
|
||||||
|
and the [python-vlc](https://pypi.org/project/python-vlc/) bindings.
|
||||||
|
* optionally Gstreamer to play videos (which is a Gtk library)
|
||||||
|
|
||||||
|
### On linux platforms
|
||||||
|
The dependencies are often installed by default, or easily available through your package or software manager.
|
||||||
|
For example, on ubuntu, you can run the following as root to make sure you have all the prerequisites *assuming you use python3*:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
apt-get install python3 python3-pip libgtk-3-0 libpoppler-glib8 libcairo2 python3-gi python3-cairo python3-gi-cairo gobject-introspection libgirepository-1.0-1 libgirepository1.0-dev gir1.2-gtk-3.0 gir1.2-poppler-0.18
|
||||||
|
```
|
||||||
|
|
||||||
|
Different distributions might have different package naming conventions, for example the equivalent on OpenSUSE would be:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
zypper install python3 python3-pip libgtk-3-0 libpoppler-glib8 libcairo2 python3-gobject python3-gobject-Gdk python3-cairo python3-gobject-cairo typelib-1_0-GdkPixbuf-2_0 typelib-1_0-Gtk-3_0 typelib-1_0-Poppler-0_18
|
||||||
|
```
|
||||||
|
|
||||||
|
On CentOS/RHEL/Fedora the dependencies would be:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
yum install python36 python3-pip gtk3 poppler-glib cairo gdk-pixbuf2 python3-gobject python3-cairo
|
||||||
|
```
|
||||||
|
|
||||||
|
And on Arch Linux:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pacman -S --needed python python-pip gtk3 poppler cairo gobject-introspection poppler-glib python-gobject gst-plugin-gtk
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### On macOS
|
||||||
|
|
||||||
|
Dependencies can be installed using [Homebrew](https://brew.sh/):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
brew install --only-dependencies pympress
|
||||||
|
```
|
||||||
|
|
||||||
|
### On windows
|
||||||
|
The [binary installer for windows](#installing-) comes with pympress and all its dependencies packaged.
|
||||||
|
|
||||||
|
Alternately, in order to install from pypi or from source on windows, there are two ways to get the dependencies:
|
||||||
|
|
||||||
|
1. using MSYS2 (replace x86_64 with i686 if you're using a 32 bit machine).
|
||||||
|
|
||||||
|
**Warning:** this can take a substantial amount of disk size as it requires a full software distribution and building platform.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pacman -S --needed mingw-w64-x86_64-gtk3 mingw-w64-x86_64-cairo mingw-w64-x86_64-poppler mingw-w64-x86_64-python3 mingw-w64-x86_64-vlc python3-pip mingw-w64-x86_64-python3-pip mingw-w64-x86_64-python3-gobject mingw-w64-x86_64-python3-cairo
|
||||||
|
```
|
||||||
|
|
||||||
|
This is also the strategy used to automate [builds on appveyor](https://github.com/Cimbali/pympress/tree/master/scripts/build_msi_mingw.sh).
|
||||||
|
|
||||||
|
2. Using PyGobjectWin32. *Be sure to check the supported Python versions (up to 3.4 at the time of writing)*, they appear in the FEATURES list in the linked page.
|
||||||
|
- Install native [python for windows](https://www.python.org/downloads/windows/)
|
||||||
|
- Get GTK+3, Poppler and their python bindings by executing [the PyGi installer](https://sourceforge.net/projects/pygobjectwin32/). Be sure to tick all the necessary dependencies in the installer (Poppler, Cairo, Gdk-Pixbuf).
|
||||||
|
|
||||||
|
Alternately, you can build your Gtk+3 stack from source using MSVC, see [the Gnome wiki](https://wiki.gnome.org/Projects/GTK+/Win32/MSVCCompilationOfGTKStack) and [this python script that compiles the whole Gtk+3 stack](https://github.com/wingtk/gvsbuild/).
|
||||||
|
This strategy has not been used successfully yet, due to problems building Poppler with its introspection bidings (i.e. typelib) − see [#109](https://github.com/Cimbali/pympress/issues/109).
|
||||||
|
|
||||||
|
# Contributing
|
||||||
|
|
||||||
|
Feel free to clone this repo and use it, modify it, redistribute it, etc, under the GPLv2+.
|
||||||
|
A [number of contributors](https://github.com/Cimbali/pympress/graphs/contributors) have taken part in the development of pympress and submitted pull requests to improve it.
|
||||||
|
|
||||||
|
**Be respectful of everyone and keep this community friendly, welcoming, and harrasment-free.
|
||||||
|
Abusive behaviour will not be tolerated, and can be reported by email at me@cimba.li − wrongdoers may be permanently banned.**
|
||||||
|
|
||||||
|
Pympress has inline sphinx documentation ([Google style](http://www.sphinx-doc.org/en/latest/ext/example_google.html), contains rst syntax), and the [docs generated from it are hosted on the github pages of this repo](https://pympress.github.io/).
|
||||||
|
|
||||||
|
## Translations
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
<!-- https://poeditor.com/docs/languages -->
|
||||||
|
|
||||||
|
We thank the many contributors of translations: <!-- translator list -->
|
||||||
|
Agnieszka,
|
||||||
|
atsuyaw,
|
||||||
|
Cherrywoods,
|
||||||
|
Dongwang,
|
||||||
|
Estel-f,
|
||||||
|
Fabio Pagnotta,
|
||||||
|
Ferdinand Fichtner,
|
||||||
|
Frederik. blome,
|
||||||
|
FriedrichFröbel,
|
||||||
|
He. yifan. xs,
|
||||||
|
Jaroslav Svoboda,
|
||||||
|
Jeertmans,
|
||||||
|
Karen Zhang,
|
||||||
|
Kristýna,
|
||||||
|
Leonvincenterd,
|
||||||
|
LogCreative,
|
||||||
|
Lorenzo. pacchiardi,
|
||||||
|
Luis Sibaja,
|
||||||
|
Marcin Dohnalik,
|
||||||
|
marquitul,
|
||||||
|
Morfit,
|
||||||
|
Mzn,
|
||||||
|
Nico,
|
||||||
|
Ogawa,
|
||||||
|
Paul,
|
||||||
|
Pierre BERTHOU,
|
||||||
|
polaksta,
|
||||||
|
Saulpierotti,
|
||||||
|
Shebangmed,
|
||||||
|
susobaco,
|
||||||
|
Tapia,
|
||||||
|
Tejas,
|
||||||
|
Timo Zhang,
|
||||||
|
Tkoyama010,
|
||||||
|
Toton95,
|
||||||
|
Vojta Netrh,
|
||||||
|
Vulpeculus,
|
||||||
|
and <!-- last translator --> Cimbali.
|
||||||
|
|
||||||
|
If you also want to add or contribute to a translation, check [pympress’ page on POEditor](https://poeditor.com/join/project/nKfRxeN8pS).
|
||||||
|
Note that old strings are kept and tagged `removed`, to give context and keep continuity between translations of succcessive versions.
|
||||||
|
This means `removed` strings are unused and do not need translating.
|
||||||
|
|
||||||
|
## Packages
|
||||||
|
|
||||||
|
Official releases are made to [PyPI](https://pypi.org/) and with [github releases](https://github.com/Cimbali/pympress/releases).
|
||||||
|
The community maintains a number of other packages or recipes to install pympress (see [Install section](#installing-)). Any additions welcome.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -n pympress-1.8.1
|
||||||
|
|
||||||
|
%build
|
||||||
|
%py3_build
|
||||||
|
|
||||||
|
%install
|
||||||
|
%py3_install
|
||||||
|
|
||||||
|
echo %{python3_sitelib}/pympress > INSTALLED_FILES
|
||||||
|
echo %{python3_sitelib}/pympress-1.8.1-py%{python3_version}.egg-info >> INSTALLED_FILES
|
||||||
|
|
||||||
|
|
||||||
|
find "%{buildroot}%{_prefix}" -wholename "%{buildroot}%{python3_sitelib}" -prune -o -name 'pympress*' -printf '%{_prefix}/%%P\n' -prune >> INSTALLED_FILES
|
||||||
|
for f in pympress; do chmod 0755 "%{buildroot}%{_bindir}/$f"; echo "%{_bindir}/$f"; done | (grep -vxFf INSTALLED_FILES || :) >> INSTALLED_FILES
|
||||||
|
|
||||||
|
%find_lang pympress && cat pympress.lang >> INSTALLED_FILES || :
|
||||||
|
find "%{buildroot}%{_prefix}" -wholename "%{buildroot}%{python3_sitelib}" -prune -o -name 'io.github.pympress.*' -printf '%{_prefix}/%%P\n' -prune >> INSTALLED_FILES
|
||||||
|
|
||||||
|
%post
|
||||||
|
if [ $1 -gt 1 ]; then
|
||||||
|
find "%{python3_sitelib}" -maxdepth 1 -name 'pympress-1.5.*' -print0 | xargs -0 --no-run-if-empty rm -r
|
||||||
|
fi
|
||||||
|
|
||||||
|
%files -f INSTALLED_FILES
|
||||||
|
|
||||||
|
%license LICENSE.txt
|
||||||
|
|
||||||
|
%defattr(-,root,root)
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Fri May 26 2023 wangtaozhi <wangtaozhi@kylinsec.com.cn> - 1.8.1-1
|
||||||
|
- Package init
|
||||||
Loading…
x
Reference in New Issue
Block a user