gnu: rust-slab-0.4: Don't hide package.
[jackhill/guix/guix.git] / gnu / packages / pdf.scm
CommitLineData
135eb524 1;;; GNU Guix --- Functional package management for GNU
8e755b1b 2;;; Copyright © 2013, 2015, 2016 Andreas Enge <andreas@enge.fr>
8befb33d 3;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
a773f141 4;;; Copyright © 2014, 2015, 2016, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
3e40bb82 5;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
f22debac 6;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
47956fa0 7;;; Copyright © 2016 ng0 <ng0@n0.is>
3e4afe02 8;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
82862153 9;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
8b438f85 10;;; Copyright © 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
82862153 11;;; Copyright © 2016 Julien Lepiller <julien@lepiller.eu>
667c004c 12;;; Copyright © 2016, 2019 Arun Isaac <arunisaac@systemreboot.net>
6d161406 13;;; Copyright © 2017, 2018 Leo Famulari <leo@famulari.name>
92ae98e2 14;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
7da4dbb3 15;;; Copyright © 2017, 2018 Rene Saavedra <pacoon@protonmail.com>
7f0bccb5 16;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
a42cb6f1 17;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
0cd4a746 18;;; Copyright © 2019 Ben Sturmfels <ben@sturm.com.au>
77e0cebc 19;;; Copyright © 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
ebbd30ff 20;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
135eb524
AE
21;;;
22;;; This file is part of GNU Guix.
23;;;
24;;; GNU Guix is free software; you can redistribute it and/or modify it
25;;; under the terms of the GNU General Public License as published by
26;;; the Free Software Foundation; either version 3 of the License, or (at
27;;; your option) any later version.
28;;;
29;;; GNU Guix is distributed in the hope that it will be useful, but
30;;; WITHOUT ANY WARRANTY; without even the implied warranty of
31;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32;;; GNU General Public License for more details.
33;;;
34;;; You should have received a copy of the GNU General Public License
35;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
36
37(define-module (gnu packages pdf)
b5b73a82 38 #:use-module ((guix licenses) #:prefix license:)
135eb524
AE
39 #:use-module (guix packages)
40 #:use-module (guix download)
e2ec95c4 41 #:use-module (guix git-download)
ab1c2319 42 #:use-module (guix utils)
135eb524 43 #:use-module (guix build-system gnu)
0f28ee34 44 #:use-module (guix build-system cmake)
eb6a5dab 45 #:use-module (guix build-system meson)
3efb57ea 46 #:use-module (guix build-system python)
8d4169a1 47 #:use-module (guix build-system trivial)
135eb524 48 #:use-module (gnu packages)
ebbd30ff 49 #:use-module (gnu packages audio)
aae8ba47 50 #:use-module (gnu packages autotools)
31f248fa 51 #:use-module (gnu packages backup)
8d4169a1
LC
52 #:use-module (gnu packages base)
53 #:use-module (gnu packages bash)
ac847543 54 #:use-module (gnu packages check)
135eb524 55 #:use-module (gnu packages compression)
31f248fa 56 #:use-module (gnu packages curl)
bac31d1f 57 #:use-module (gnu packages djvu)
31f248fa
EF
58 #:use-module (gnu packages fontutils)
59 #:use-module (gnu packages game-development)
ebbd30ff 60 #:use-module (gnu packages gcc)
3e40bb82 61 #:use-module (gnu packages gettext)
31f248fa 62 #:use-module (gnu packages ghostscript)
f3e22216 63 #:use-module (gnu packages gl)
8db824ba 64 #:use-module (gnu packages glib)
31f248fa
EF
65 #:use-module (gnu packages gnome)
66 #:use-module (gnu packages gnupg)
e2ec95c4 67 #:use-module (gnu packages gstreamer)
8db824ba 68 #:use-module (gnu packages gtk)
31f248fa
EF
69 #:use-module (gnu packages image)
70 #:use-module (gnu packages imagemagick)
1650cf92 71 #:use-module (gnu packages javascript)
31f248fa 72 #:use-module (gnu packages lesstif)
77e0cebc 73 #:use-module (gnu packages libffi)
31f248fa 74 #:use-module (gnu packages linux)
0f28ee34 75 #:use-module (gnu packages lua)
765f0ac8
RW
76 #:use-module (gnu packages pcre)
77 #:use-module (gnu packages perl)
31f248fa
EF
78 #:use-module (gnu packages photo)
79 #:use-module (gnu packages pkg-config)
ebbd30ff 80 #:use-module (gnu packages pulseaudio)
3fa2dc27 81 #:use-module (gnu packages python)
77e0cebc
HG
82 #:use-module (gnu packages python-check)
83 #:use-module (gnu packages python-web)
44d10b1f 84 #:use-module (gnu packages python-xyz)
31f248fa 85 #:use-module (gnu packages qt)
8d4169a1 86 #:use-module (gnu packages sdl)
9d0c291e 87 #:use-module (gnu packages sphinx)
cd0322a3 88 #:use-module (gnu packages sqlite)
ebbd30ff 89 #:use-module (gnu packages tex)
cc2b77df 90 #:use-module (gnu packages tls)
31f248fa 91 #:use-module (gnu packages xdisorg)
ebbd30ff 92 #:use-module (gnu packages xml)
31f248fa 93 #:use-module (gnu packages xorg)
8db824ba 94 #:use-module (srfi srfi-1))
135eb524
AE
95
96(define-public poppler
97 (package
98 (name "poppler")
e23dd493 99 (version "0.79.0")
135eb524
AE
100 (source (origin
101 (method url-fetch)
5cc3096c 102 (uri (string-append "https://poppler.freedesktop.org/poppler-"
8befb33d 103 version ".tar.xz"))
6983ba56
SB
104 (sha256
105 (base32
e23dd493 106 "1j18jlv1q6h21azb939gqjsgcbsh5qcd8dwxdmad54p5ixha91gr"))))
1b821701 107 (build-system cmake-build-system)
6983ba56 108 ;; FIXME:
a25fe6d6 109 ;; use libcurl: no
135eb524
AE
110 (inputs `(("fontconfig" ,fontconfig)
111 ("freetype" ,freetype)
1abe0554 112 ("libjpeg" ,libjpeg-turbo)
a25fe6d6 113 ("libpng" ,libpng)
135eb524 114 ("libtiff" ,libtiff)
927d4d9b 115 ("lcms" ,lcms)
301804d6 116 ("openjpeg" ,openjpeg)
8db824ba
LC
117 ("zlib" ,zlib)
118
119 ;; To build poppler-glib (as needed by Evince), we need Cairo and
120 ;; GLib. But of course, that Cairo must not depend on Poppler.
121 ("cairo" ,(package (inherit cairo)
122 (inputs (alist-delete "poppler"
eb637c64
MB
123 (package-inputs cairo)))))))
124 (propagated-inputs
125 ;; As per poppler-cairo and poppler-glib.pc.
126 ;; XXX: Ideally we'd propagate Cairo too, but that would require a
127 ;; different solution to the circular dependency mentioned above.
128 `(("glib" ,glib)))
c4c4cc05 129 (native-inputs
426adbe8 130 `(("pkg-config" ,pkg-config)
6983ba56
SB
131 ("glib" ,glib "bin") ; glib-mkenums, etc.
132 ("gobject-introspection" ,gobject-introspection)))
135eb524
AE
133 (arguments
134 `(#:tests? #f ; no test data provided with the tarball
a25fe6d6 135 #:configure-flags
1b821701
MB
136 (let* ((out (assoc-ref %outputs "out"))
137 (lib (string-append out "/lib")))
9df39750 138 (list "-DENABLE_UNSTABLE_API_ABI_HEADERS=ON" ;to install header files
1b821701
MB
139 "-DENABLE_ZLIB=ON"
140 (string-append "-DCMAKE_INSTALL_LIBDIR=" lib)
141 (string-append "-DCMAKE_INSTALL_RPATH=" lib)))))
35b9e423 142 (synopsis "PDF rendering library")
135eb524
AE
143 (description
144 "Poppler is a PDF rendering library based on the xpdf-3.0 code base.")
14ecc0ef 145 (license license:gpl2+)
5f8fc5e3 146 (home-page "https://poppler.freedesktop.org/")))
14ecc0ef 147
6d161406
LF
148(define-public poppler-data
149 (package
150 (name "poppler-data")
151 (version "0.4.9")
152 (source (origin
153 (method url-fetch)
154 (uri (string-append "https://poppler.freedesktop.org/poppler-data"
155 "-" version ".tar.gz"))
156 (sha256
157 (base32
158 "04i0wgdkn5lhda8cyxd1ll4a2p41pwqrwd47n9mdpl7cx5ypx70z"))))
159 (build-system gnu-build-system)
160 (arguments
161 '(#:tests? #f ; no test suite
162 #:make-flags (list (string-append "prefix=" (assoc-ref %outputs "out")))
163 #:phases
164 (modify-phases %standard-phases
165 ;; The package only provides some data files, so there is nothing to
166 ;; build.
167 (delete 'configure)
168 (delete 'build))))
169 (synopsis "Poppler encoding files for rendering of CJK and Cyrillic text")
170 (description "This package provides optional encoding files for Poppler.
171When present, Poppler is able to correctly render CJK and Cyrillic text.")
172 (home-page (package-home-page poppler))
173 ;; See COPYING in the source distribution for more information about
174 ;; the licensing.
175 (license (list license:bsd-3
176 license:gpl2))))
177
95bbaa02 178(define-public poppler-qt4
021bf6af 179 (package/inherit poppler
8410cb62
RW
180 (name "poppler-qt4")
181 (inputs `(("qt-4" ,qt-4)
182 ,@(package-inputs poppler)))
183 (synopsis "Qt4 frontend for the Poppler PDF rendering library")))
184
f22debac 185(define-public poppler-qt5
021bf6af 186 (package/inherit poppler
f22debac 187 (name "poppler-qt5")
13297861 188 (inputs `(("qtbase" ,qtbase)
f22debac
RJ
189 ,@(package-inputs poppler)))
190 (synopsis "Qt5 frontend for the Poppler PDF rendering library")))
191
99bcae94
RW
192(define-public python-poppler-qt5
193 (package
194 (name "python-poppler-qt5")
195 (version "0.24.2")
196 (source
197 (origin
198 (method url-fetch)
199 (uri (pypi-uri "python-poppler-qt5" version))
200 (sha256
201 (base32
202 "0l69llw1fzwz8y90q0qp9q5pifbrqjjbwii7di54dwghw5fc6w1r"))))
203 (build-system python-build-system)
204 (arguments
205 `(;; There are no tests. The check phase just causes a rebuild.
206 #:tests? #f
207 #:phases
208 (modify-phases %standard-phases
209 (replace 'build
210 (lambda* (#:key inputs #:allow-other-keys)
211 (substitute* "setup.py"
212 ;; This check always fails, so disable it.
213 (("if not check_qtxml\\(\\)")
0fe041bd 214 "if True"))
99bcae94
RW
215 ;; We need to pass an extra flag here. This cannot be in
216 ;; configure-flags because it should not be passed for the
217 ;; installation phase.
218 ((@@ (guix build python-build-system) call-setuppy)
219 "build_ext" (list (string-append "--pyqt-sip-dir="
220 (assoc-ref inputs "python-pyqt")
221 "/share/sip")) #t))))))
222 (native-inputs
223 `(("pkg-config" ,pkg-config)))
224 (inputs
225 `(("python-sip" ,python-sip)
226 ("python-pyqt" ,python-pyqt)
227 ("poppler-qt5" ,poppler-qt5)
228 ("qtbase" ,qtbase)))
229 (home-page "https://pypi.python.org/pypi/python-poppler-qt5")
230 (synopsis "Python bindings for Poppler-Qt5")
231 (description
232 "This package provides Python bindings for the Qt5 interface of the
233Poppler PDF rendering library.")
234 (license license:lgpl2.1+)))
235
aae8ba47
RW
236(define-public libharu
237 (package
238 (name "libharu")
239 (version "2.3.0")
240 (source (origin
2b2ab39c
RW
241 (method git-fetch)
242 (uri (git-reference
243 (url "https://github.com/libharu/libharu.git")
244 (commit (string-append
245 "RELEASE_"
246 (string-join (string-split version #\.) "_")))))
247 (file-name (git-file-name name version))
aae8ba47
RW
248 (sha256
249 (base32
2b2ab39c 250 "15s9hswnl3qqi7yh29jyrg0hma2n99haxznvcywmsp8kjqlyg75q"))))
aae8ba47
RW
251 (build-system gnu-build-system)
252 (arguments
253 `(#:configure-flags
254 (list (string-append "--with-zlib="
255 (assoc-ref %build-inputs "zlib"))
256 (string-append "--with-png="
6f3dd09f 257 (assoc-ref %build-inputs "libpng")))))
aae8ba47
RW
258 (inputs
259 `(("zlib" ,zlib)
260 ("libpng" ,libpng)))
261 (native-inputs
262 `(("autoconf" ,autoconf)
263 ("automake" ,automake)
264 ("libtool" ,libtool)))
265 (home-page "http://libharu.org/")
266 (synopsis "Library for generating PDF files")
267 (description
268 "libHaru is a library for generating PDF files. libHaru does not support
269reading and editing of existing PDF files.")
270 (license license:zlib)))
271
14ecc0ef
AE
272(define-public xpdf
273 (package
274 (name "xpdf")
f410c110 275 (version "3.04")
14ecc0ef
AE
276 (source (origin
277 (method url-fetch)
278 (uri (string-append "ftp://ftp.foolabs.com/pub/xpdf/xpdf-"
279 version ".tar.gz"))
280 (sha256 (base32
f410c110 281 "1rbp54mr3z2x3a3a1qmz8byzygzi223vckfam9ib5g1sfds0qf8i"))))
14ecc0ef
AE
282 (build-system gnu-build-system)
283 (inputs `(("freetype" ,freetype)
19cb5170 284 ("gs-fonts" ,gs-fonts)
14ecc0ef
AE
285 ("lesstif" ,lesstif)
286 ("libpaper" ,libpaper)
287 ("libx11" ,libx11)
288 ("libxext" ,libxext)
289 ("libxp" ,libxp)
290 ("libxpm" ,libxpm)
291 ("libxt" ,libxt)
f410c110 292 ("libpng" ,libpng)
01eafd38 293 ("zlib" ,zlib)))
14ecc0ef
AE
294 (arguments
295 `(#:tests? #f ; there is no check target
bdbf227f
AE
296 #:parallel-build? #f ; build fails randomly on 8-way machines
297 #:configure-flags
298 (list (string-append "--with-freetype2-includes="
299 (assoc-ref %build-inputs "freetype")
300 "/include/freetype2"))
19cb5170 301 #:phases
dc1d3cde
KK
302 (modify-phases %standard-phases
303 (replace 'install
304 (lambda* (#:key outputs inputs #:allow-other-keys #:rest args)
305 (let* ((install (assoc-ref %standard-phases 'install))
306 (out (assoc-ref outputs "out"))
307 (xpdfrc (string-append out "/etc/xpdfrc"))
308 (gs-fonts (assoc-ref inputs "gs-fonts")))
309 (apply install args)
310 (substitute* xpdfrc
19cb5170
AE
311 (("/usr/local/share/ghostscript/fonts")
312 (string-append gs-fonts "/share/fonts/type1/ghostscript"))
dc1d3cde
KK
313 (("#fontFile") "fontFile")))
314 #t)))))
9e771e3b 315 (synopsis "Viewer for PDF files based on the Motif toolkit")
14ecc0ef 316 (description
e881752c 317 "Xpdf is a viewer for Portable Document Format (PDF) files.")
14ecc0ef
AE
318 (license license:gpl3) ; or gpl2, but not gpl2+
319 (home-page "http://www.foolabs.com/xpdf/")))
0f28ee34 320
b3886e0c
PW
321(define-public zathura-cb
322 (package
323 (name "zathura-cb")
02fcc6f2 324 (version "0.1.8")
b3886e0c
PW
325 (source (origin
326 (method url-fetch)
327 (uri
328 (string-append "https://pwmt.org/projects/zathura-cb/download/zathura-cb-"
02fcc6f2 329 version ".tar.xz"))
b3886e0c
PW
330 (sha256
331 (base32
02fcc6f2 332 "1i6cf0vks501cggwvfsl6qb7mdaf3sszdymphimfvnspw810faj5"))))
b3886e0c 333 (native-inputs `(("pkg-config" ,pkg-config)))
b3886e0c 334 (inputs `(("libarchive" ,libarchive)
b3886e0c 335 ("zathura" ,zathura)))
02fcc6f2 336 (build-system meson-build-system)
b3886e0c 337 (arguments
02fcc6f2 338 `(#:tests? #f ; package does not contain tests
b3886e0c 339 #:phases
02fcc6f2
TGR
340 (modify-phases %standard-phases
341 (add-after 'unpack 'patch-plugin-directory
342 ;; Something of a regression in 0.1.8: the new Meson build system
343 ;; now hard-codes an incorrect plugin directory. Fix it.
344 (lambda* (#:key outputs #:allow-other-keys)
345 (substitute* "meson.build"
346 (("(install_dir:).*" _ key)
347 (string-append key
348 "'" (assoc-ref outputs "out") "/lib/zathura'\n")))
349 #t)))))
b3886e0c
PW
350 (home-page "https://pwmt.org/projects/zathura-cb/")
351 (synopsis "Comic book support for zathura (libarchive backend)")
352 (description "The zathura-cb plugin adds comic book support to zathura
353using libarchive.")
354 (license license:zlib)))
355
721a4f7d
PW
356(define-public zathura-ps
357 (package
358 (name "zathura-ps")
06dbfb5d 359 (version "0.2.6")
721a4f7d
PW
360 (source (origin
361 (method url-fetch)
362 (uri
363 (string-append "https://pwmt.org/projects/zathura-ps/download/zathura-ps-"
06dbfb5d 364 version ".tar.xz"))
721a4f7d
PW
365 (sha256
366 (base32
06dbfb5d 367 "0wygq89nyjrjnsq7vbpidqdsirjm6iq4w2rijzwpk2f83ys8bc3y"))))
721a4f7d 368 (native-inputs `(("pkg-config" ,pkg-config)))
721a4f7d 369 (inputs `(("libspectre" ,libspectre)
721a4f7d 370 ("zathura" ,zathura)))
06dbfb5d 371 (build-system meson-build-system)
721a4f7d 372 (arguments
06dbfb5d 373 `(#:tests? #f ; package does not contain tests
721a4f7d 374 #:phases
06dbfb5d
TGR
375 (modify-phases %standard-phases
376 (add-after 'unpack 'patch-plugin-directory
377 ;; Something of a regression in 0.2.6: the new Meson build system
378 ;; now hard-codes an incorrect plugin directory. Fix it.
379 (lambda* (#:key outputs #:allow-other-keys)
380 (substitute* "meson.build"
381 (("(install_dir:).*" _ key)
382 (string-append key
383 "'" (assoc-ref outputs "out") "/lib/zathura'\n")))
384 #t)))))
721a4f7d
PW
385 (home-page "https://pwmt.org/projects/zathura-ps/")
386 (synopsis "PS support for zathura (libspectre backend)")
387 (description "The zathura-ps plugin adds PS support to zathura
388using libspectre.")
389 (license license:zlib)))
390
bac31d1f
PW
391(define-public zathura-djvu
392 (package
393 (name "zathura-djvu")
7d475dd4 394 (version "0.2.8")
bac31d1f
PW
395 (source (origin
396 (method url-fetch)
397 (uri
398 (string-append "https://pwmt.org/projects/zathura-djvu/download/zathura-djvu-"
7d475dd4 399 version ".tar.xz"))
bac31d1f
PW
400 (sha256
401 (base32
7d475dd4 402 "0axkv1crdxn0z44whaqp2ibkdqcykhjnxk7qzms0dp1b67an9rnh"))))
bac31d1f 403 (native-inputs `(("pkg-config" ,pkg-config)))
bac31d1f
PW
404 (inputs
405 `(("djvulibre" ,djvulibre)
bac31d1f 406 ("zathura" ,zathura)))
7d475dd4 407 (build-system meson-build-system)
bac31d1f 408 (arguments
7d475dd4 409 `(#:tests? #f ; package does not contain tests
bac31d1f 410 #:phases
7d475dd4
TGR
411 (modify-phases %standard-phases
412 (add-after 'unpack 'patch-plugin-directory
413 ;; Something of a regression in 0.2.8: the new Meson build system
414 ;; now hard-codes an incorrect plugin directory. Fix it.
415 (lambda* (#:key outputs #:allow-other-keys)
416 (substitute* "meson.build"
417 (("(install_dir:).*" _ key)
418 (string-append key
419 "'" (assoc-ref outputs "out") "/lib/zathura'\n")))
420 #t)))))
bac31d1f
PW
421 (home-page "https://pwmt.org/projects/zathura-djvu/")
422 (synopsis "DjVu support for zathura (DjVuLibre backend)")
423 (description "The zathura-djvu plugin adds DjVu support to zathura
424using the DjVuLibre library.")
425 (license license:zlib)))
426
43dc47fa
MB
427(define-public zathura-pdf-mupdf
428 (package
429 (name "zathura-pdf-mupdf")
ecfdc95a 430 (version "0.3.5")
43dc47fa
MB
431 (source (origin
432 (method url-fetch)
433 (uri
434 (string-append "https://pwmt.org/projects/zathura-pdf-mupdf"
aac2006d 435 "/download/zathura-pdf-mupdf-" version ".tar.xz"))
43dc47fa
MB
436 (sha256
437 (base32
ecfdc95a 438 "1pjwsb7zwclxsvz229fl7y2saf1pv3ifwv3ay8viqxgrp9x3z9hq"))))
43dc47fa 439 (native-inputs `(("pkg-config" ,pkg-config)))
43dc47fa 440 (inputs
3bbd6469 441 `(("jbig2dec" ,jbig2dec)
43dc47fa 442 ("libjpeg" ,libjpeg)
b42b5afd 443 ("mujs" ,mujs)
43dc47fa
MB
444 ("mupdf" ,mupdf)
445 ("openjpeg" ,openjpeg)
446 ("openssl" ,openssl)
447 ("zathura" ,zathura)))
aac2006d 448 (build-system meson-build-system)
43dc47fa 449 (arguments
aac2006d 450 `(#:tests? #f ; package does not contain tests
a6f2afee
EF
451 #:configure-flags (list (string-append "-Dplugindir="
452 (assoc-ref %outputs "out")
7b046b1b
SB
453 "/lib/zathura")
454 "-Dlink-external=true")
455 #:phases
456 (modify-phases %standard-phases
457 (add-before 'configure 'add-mujs-to-dependencies
458 (lambda _
459 ;; Add mujs to the 'build_dependencies'.
460 (substitute* "meson.build"
461 (("^ libopenjp2 = dependency.*" x)
462 (string-append x " mujs = cc.find_library('mujs')\n"))
463 (("^ libopenjp2")
464 " libopenjp2, mujs")))))))
43dc47fa
MB
465 (home-page "https://pwmt.org/projects/zathura-pdf-mupdf/")
466 (synopsis "PDF support for zathura (mupdf backend)")
467 (description "The zathura-pdf-mupdf plugin adds PDF support to zathura
468by using the @code{mupdf} rendering library.")
469 (license license:zlib)))
470
7708557f
PW
471(define-public zathura-pdf-poppler
472 (package
473 (name "zathura-pdf-poppler")
0ed99053 474 (version "0.2.9")
7708557f
PW
475 (source (origin
476 (method url-fetch)
477 (uri
478 (string-append "https://pwmt.org/projects/zathura-pdf-poppler/download/zathura-pdf-poppler-"
0ed99053 479 version ".tar.xz"))
7708557f
PW
480 (sha256
481 (base32
0ed99053 482 "1p4jcny0jniygns78mcf0nlm298dszh49qpmjmackrm6dq8hc25y"))))
7708557f 483 (native-inputs `(("pkg-config" ,pkg-config)))
7708557f
PW
484 (inputs
485 `(("poppler" ,poppler)
3bbd6469 486 ("zathura" ,zathura)))
0ed99053 487 (build-system meson-build-system)
7708557f 488 (arguments
0ed99053 489 `(#:tests? #f ; package does not include tests
7708557f 490 #:phases
0ed99053
TGR
491 (modify-phases %standard-phases
492 (add-after 'unpack 'patch-plugin-directory
493 ;; Something of a regression in 0.2.9: the new Meson build system
494 ;; now hard-codes an incorrect plugin directory. Fix it.
495 (lambda* (#:key outputs #:allow-other-keys)
496 (substitute* "meson.build"
497 (("(install_dir:).*" _ key)
498 (string-append key
499 "'" (assoc-ref outputs "out") "/lib/zathura'\n")))
500 #t)))))
7708557f
PW
501 (home-page "https://pwmt.org/projects/zathura-pdf-poppler/")
502 (synopsis "PDF support for zathura (poppler backend)")
503 (description "The zathura-pdf-poppler plugin adds PDF support to zathura
504by using the poppler rendering engine.")
505 (license license:zlib)))
506
3e40bb82
PW
507(define-public zathura
508 (package
509 (name "zathura")
6bd8ba61 510 (version "0.4.3")
3e40bb82
PW
511 (source (origin
512 (method url-fetch)
513 (uri
514 (string-append "https://pwmt.org/projects/zathura/download/zathura-"
eb6a5dab 515 version ".tar.xz"))
3e40bb82
PW
516 (sha256
517 (base32
6bd8ba61 518 "0hgx5x09i6d0z45llzdmh4l348fxh1y102sb1w76f2fp4r21j4ky"))))
3e40bb82 519 (native-inputs `(("pkg-config" ,pkg-config)
f2984d70 520 ("gettext" ,gettext-minimal)
ac847543
MB
521 ("glib:bin" ,glib "bin")
522
eb6a5dab
TGR
523 ;; For building documentation.
524 ("python-sphinx" ,python-sphinx)
525
a42cb6f1
AG
526 ;; For building icons.
527 ("librsvg" ,librsvg)
528
ac847543
MB
529 ;; For tests.
530 ("check" ,check)
60ecc10f 531 ("xorg-server" ,xorg-server-for-tests)))
1d9032fc
MB
532 (inputs `(("sqlite" ,sqlite)))
533 ;; Listed in 'Requires.private' of 'zathura.pc'.
534 (propagated-inputs `(("cairo" ,cairo)
535 ("girara" ,girara)))
3e40bb82
PW
536 (native-search-paths
537 (list (search-path-specification
6bd8ba61 538 (variable "ZATHURA_PLUGINS_PATH")
3e40bb82 539 (files '("lib/zathura")))))
eb6a5dab 540 (build-system meson-build-system)
3e40bb82 541 (arguments
eb6a5dab 542 `(#:phases (modify-phases %standard-phases
ac847543
MB
543 (add-before 'check 'start-xserver
544 ;; Tests require a running X server.
545 (lambda* (#:key inputs #:allow-other-keys)
546 (let ((xorg-server (assoc-ref inputs "xorg-server"))
547 (display ":1"))
548 (setenv "DISPLAY" display)
f0eba502
MB
549
550 ;; On busy machines, tests may take longer than
551 ;; the default of four seconds.
552 (setenv "CK_DEFAULT_TIMEOUT" "20")
553
ac847543
MB
554 ;; Don't fail due to missing '/etc/machine-id'.
555 (setenv "DBUS_FATAL_WARNINGS" "0")
556 (zero? (system (string-append xorg-server "/bin/Xvfb "
557 display " &")))))))))
3e40bb82
PW
558 (home-page "https://pwmt.org/projects/zathura/")
559 (synopsis "Lightweight keyboard-driven PDF viewer")
560 (description "Zathura is a customizable document viewer. It provides a
561minimalistic interface and an interface that mainly focuses on keyboard
562interaction.")
563 (license license:zlib)))
564
0f28ee34
LC
565(define-public podofo
566 (package
567 (name "podofo")
22f00388 568 (version "0.9.6")
0f28ee34
LC
569 (source (origin
570 (method url-fetch)
de67e922
LF
571 (uri (string-append "mirror://sourceforge/podofo/podofo/" version
572 "/podofo-" version ".tar.gz"))
0f28ee34
LC
573 (sha256
574 (base32
37751b48
RW
575 "0wj0y4zcmj4q79wrn3vv3xq4bb0vhhxs8yifafwy9f2sjm83c5p9"))
576 (patches (search-patches "podofo-cmake-3.12.patch"))))
0f28ee34 577 (build-system cmake-build-system)
22f00388
EF
578 (native-inputs
579 `(("cppunit" ,cppunit)
580 ("pkg-config" ,pkg-config)))
581 (inputs
582 `(("libjpeg" ,libjpeg)
0f28ee34 583 ("libtiff" ,libtiff)
22f00388 584 ("fontconfig" ,fontconfig)
0f28ee34 585 ("freetype" ,freetype)
22f00388
EF
586 ("libpng" ,libpng)
587 ("lua" ,lua-5.1)
588 ("openssl" ,openssl)
0f28ee34 589 ("zlib" ,zlib)))
cb6a14ba
AE
590 (arguments
591 `(#:configure-flags '("-DPODOFO_BUILD_SHARED=ON"
dde70926
AE
592 "-DPODOFO_BUILD_STATIC=ON")
593 #:phases
dc1d3cde
KK
594 (modify-phases %standard-phases
595 (add-before 'configure 'patch
596 (lambda* (#:key inputs #:allow-other-keys)
597 (let ((freetype (assoc-ref inputs "freetype")))
598 ;; Look for freetype include files in the correct place.
599 (substitute* "cmake/modules/FindFREETYPE.cmake"
600 (("/usr/local") freetype)))
601 #t)))))
0f28ee34
LC
602 (home-page "http://podofo.sourceforge.net")
603 (synopsis "Tools to work with the PDF file format")
604 (description
605 "PoDoFo is a C++ library and set of command-line tools to work with the
606PDF file format. It can parse PDF files and load them into memory, and makes
607it easy to modify them and write the changes to disk. It is primarily useful
608for applications that wish to do lower level manipulation of PDF, such as
609extracting content or merging files.")
610 (license license:lgpl2.0+)))
c0b390ed
MB
611
612(define-public mupdf
613 (package
614 (name "mupdf")
d08dc99f 615 (version "1.16.1")
c0b390ed
MB
616 (source
617 (origin
618 (method url-fetch)
76379dca 619 (uri (string-append "https://mupdf.com/downloads/archive/"
dab2542f 620 name "-" version "-source.tar.xz"))
c0b390ed 621 (sha256
c41d97be 622 (base32
d08dc99f 623 "1npmy92lkj41nnc14b4fpq7z62pminy94zsdbrczj22jpn283rvg"))
c0b390ed 624 (modules '((guix build utils)))
b1435fe7
EF
625 (snippet
626 ;; We keep lcms2 since it is different than our lcms.
627 '(begin
628 (for-each
629 (lambda (dir)
630 (delete-file-recursively (string-append "thirdparty/" dir)))
3e4afe02 631 '("freeglut" "freetype" "harfbuzz" "jbig2dec"
b1435fe7
EF
632 "libjpeg" "mujs" "openjpeg" "zlib"))
633 #t))))
c0b390ed
MB
634 (build-system gnu-build-system)
635 (inputs
636 `(("curl" ,curl)
dab2542f 637 ("freeglut" ,freeglut)
c0b390ed 638 ("freetype" ,freetype)
c41d97be 639 ("harfbuzz" ,harfbuzz)
c0b390ed
MB
640 ("jbig2dec" ,jbig2dec)
641 ("libjpeg" ,libjpeg)
642 ("libx11" ,libx11)
643 ("libxext" ,libxext)
1650cf92 644 ("mujs" ,mujs)
c41d97be 645 ("openjpeg" ,openjpeg)
c0b390ed
MB
646 ("openssl" ,openssl)
647 ("zlib" ,zlib)))
648 (native-inputs
649 `(("pkg-config" ,pkg-config)))
650 (arguments
8e755b1b
AE
651 '(#:tests? #f ; no check target
652 #:make-flags (list "CC=gcc"
653 "XCFLAGS=-fpic"
b1435fe7
EF
654 "USE_SYSTEM_LIBS=yes"
655 "USE_SYSTEM_MUJS=yes"
8e755b1b
AE
656 (string-append "prefix=" (assoc-ref %outputs "out")))
657 #:phases (modify-phases %standard-phases
658 (delete 'configure))))
76379dca 659 (home-page "https://mupdf.com")
2274b816 660 (synopsis "Lightweight PDF viewer and toolkit")
c0b390ed
MB
661 (description
662 "MuPDF is a C library that implements a PDF and XPS parsing and
663rendering engine. It is used primarily to render pages into bitmaps,
664but also provides support for other operations such as searching and
665listing the table of contents and hyperlinks.
666
667The library ships with a rudimentary X11 viewer, and a set of command
7e0d513f
EF
668line tools for batch rendering @command{pdfdraw}, rewriting files
669@command{pdfclean}, and examining the file structure @command{pdfshow}.")
e726f093
EF
670 (license (list license:agpl3+
671 license:bsd-3 ; resources/cmaps
672 license:x11 ; thirdparty/lcms2
673 license:silofl1.1 ; resources/fonts/{han,noto,sil,urw}
674 license:asl2.0)))) ; resources/fonts/droid
765f0ac8
RW
675
676(define-public qpdf
677 (package
678 (name "qpdf")
db942cda 679 (version "9.1.0")
765f0ac8
RW
680 (source (origin
681 (method url-fetch)
de67e922
LF
682 (uri (string-append "mirror://sourceforge/qpdf/qpdf/" version
683 "/qpdf-" version ".tar.gz"))
8337cb21
EF
684 (sha256
685 (base32
db942cda 686 "0ygd80wxcmh613n04x2kmf8wlsl0drxyd5wwdcrm1rzj0xwvpfrs"))
503409b5
LC
687 (modules '((guix build utils)))
688 (snippet
689 ;; Replace shebang with the bi-lingual shell/Perl trick to remove
690 ;; dependency on Perl.
6cbee49d
MW
691 '(begin
692 (substitute* "qpdf/fix-qdf"
693 (("#!/usr/bin/env perl")
694 "\
503409b5
LC
695eval '(exit $?0)' && eval 'exec perl -wS \"$0\" ${1+\"$@\"}'
696 & eval 'exec perl -wS \"$0\" $argv:q'
6cbee49d
MW
697 if 0;\n"))
698 #t))))
765f0ac8
RW
699 (build-system gnu-build-system)
700 (arguments
503409b5 701 `(#:disallowed-references (,perl)
0adfe0cc
EF
702 #:phases
703 (modify-phases %standard-phases
704 (add-before 'configure 'patch-paths
705 (lambda _
706 (substitute* "make/libtool.mk"
707 (("SHELL=/bin/bash")
708 (string-append "SHELL=" (which "bash"))))
709 (substitute* (append
710 '("qtest/bin/qtest-driver")
711 (find-files "." "\\.test"))
b5e53019
MW
712 (("/usr/bin/env") (which "env")))
713 #t)))))
765f0ac8 714 (native-inputs
503409b5
LC
715 `(("pkg-config" ,pkg-config)
716 ("perl" ,perl)))
765f0ac8 717 (propagated-inputs
e9a9298b
MB
718 ;; In Requires.private of libqpdf.pc.
719 `(("libjpeg-turbo" ,libjpeg-turbo)
720 ("zlib" ,zlib)))
765f0ac8
RW
721 (synopsis "Command-line tools and library for transforming PDF files")
722 (description
723 "QPDF is a command-line program that does structural, content-preserving
724transformations on PDF files. It could have been called something like
725pdf-to-pdf. It includes support for merging and splitting PDFs and to
726manipulate the list of pages in a PDF file. It is not a PDF viewer or a
727program capable of converting PDF into other formats.")
e9a9298b
MB
728 ;; Prior to the 7.0 release, QPDF was licensed under Artistic 2.0.
729 ;; Users can still choose to use the old license at their option.
730 (license (list license:asl2.0 license:clarified-artistic))
765f0ac8 731 (home-page "http://qpdf.sourceforge.net/")))
7ad608e4
RW
732
733(define-public xournal
734 (package
735 (name "xournal")
d0e888c3 736 (version "0.4.8.2016")
7ad608e4
RW
737 (source
738 (origin
739 (method url-fetch)
de67e922
LF
740 (uri (string-append "mirror://sourceforge/xournal/xournal/" version
741 "/xournal-" version ".tar.gz"))
7ad608e4
RW
742 (sha256
743 (base32
d0e888c3 744 "09i88v3wacmx7f96dmq0l3afpyv95lh6jrx16xzm0jd1szdrhn5j"))))
7ad608e4
RW
745 (build-system gnu-build-system)
746 (inputs
747 `(("gtk" ,gtk+-2)
748 ("pango" ,pango)
749 ("poppler" ,poppler)
750 ("glib" ,glib)
751 ("libgnomecanvas" ,libgnomecanvas)))
752 (native-inputs
753 `(("pkg-config" ,pkg-config)))
754 (home-page "http://xournal.sourceforge.net/")
755 (synopsis "Notetaking using a stylus")
756 (description
757 "Xournal is an application for notetaking, sketching, keeping a journal
758using a stylus.")
759 (license license:gpl2+)))
3fa2dc27 760
ebbd30ff
NG
761(define-public xournalpp
762 (package
763 (name "xournalpp")
764 (version "1.0.17")
765 (source
766 (origin
767 (method git-fetch)
768 (uri (git-reference
769 (url "https://github.com/xournalpp/xournalpp.git")
770 (commit version)))
771 (file-name (git-file-name name version))
772 (sha256
773 (base32 "0xw2mcgnm4sa9hrhfgp669lfypw97drxjmz5w8i5whaprpvmkxzw"))))
774 (build-system cmake-build-system)
775 (arguments
776 `(#:configure-flags (list "-DENABLE_CPPUNIT=ON") ;enable tests
777 #:imported-modules ((guix build glib-or-gtk-build-system)
778 ,@%cmake-build-system-modules)
779 #:modules (((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
780 (guix build cmake-build-system)
781 (guix build utils))
782 #:phases
783 (modify-phases %standard-phases
784 (add-after 'unpack 'fix-permissions-on-po-files
785 (lambda _
786 ;; Always generate translations. A recent upstream patch
787 ;; disabled it.
788 (substitute* "po/CMakeLists.txt"
789 (("gettext_create_translations \\(\"\\$\\{potfile\\}\"\\)")
790 "gettext_create_translations (\"${potfile}\" ALL)"))
791 ;; Make sure 'msgmerge' can modify the PO files.
792 (for-each (lambda (po) (chmod po #o666))
793 (find-files "." "\\.po$"))
794 #t))
795 (add-after 'install 'glib-or-gtk-wrap
796 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
797 (native-inputs
798 `(("cppunit" ,cppunit)
799 ("gcc" ,gcc-8) ;requires gcc 8+
800 ("gettext" ,gettext-minimal)
801 ("pkg-config" ,pkg-config)))
802 (inputs
803 `(("alsa-lib" ,alsa-lib)
804 ("glib" ,glib)
805 ("gtk+" ,gtk+)
806 ("libsndfile" ,libsndfile)
807 ("libxml2" ,libxml2)
808 ("libzip" ,libzip)
809 ("lua" ,lua) ;FIXME: It cannot find the Lua library.
810 ("poppler" ,poppler)
811 ("portaudio" ,portaudio)
812 ("texlive-bin" ,texlive-bin)))
813 (home-page "https://github.com/xournalpp/xournalpp")
814 (synopsis "Handwriting notetaking software with PDF annotation support")
815 (description "Xournal++ is a hand note taking software written in
816C++ with the target of flexibility, functionality and speed. Stroke
817recognizer and other parts are based on Xournal code.
818
819Xournal++ features:
820
821@itemize
822@item Support for Pen pressure, e.g., Wacom Tablet
823@item Support for annotating PDFs
824@item Fill shape functionality
825@item PDF Export (with and without paper style)
826@item PNG Export (with and without transparent background)
827@item Allow to map different tools / colors etc. to stylus buttons /
828mouse buttons
829@item Sidebar with Page Previews with advanced page sorting, PDF
830Bookmarks and Layers (can be individually hidden, editing layer can be
831selected)
832@item enhanced support for image insertion
833@item Eraser with multiple configurations
834@item LaTeX support
835@item bug reporting, autosave, and auto backup tools
836@item Customizeable toolbar, with multiple configurations, e.g., to
837optimize toolbar for portrait / landscape
838@item Page Template definitions
839@item Shape drawing (line, arrow, circle, rectangle)
840@item Shape resizing and rotation
841@item Rotation snapping every 45 degrees
842@item Rect snapping to grid
843@item Audio recording and playback alongside with handwritten notes
844@item Multi Language Support, Like English, German, Italian...
845@item Plugins using LUA Scripting
846@end itemize")
847 (license license:gpl2+)))
848
3fa2dc27
MB
849(define-public python-reportlab
850 (package
851 (name "python-reportlab")
24aba982 852 (version "3.5.32")
3fa2dc27
MB
853 (source (origin
854 (method url-fetch)
855 (uri (pypi-uri "reportlab" version))
856 (sha256
857 (base32
24aba982 858 "0lf8hil9nbm74zl27l8rydxbhwnpr0pbghibsqrc9sglds9l9vw3"))))
3fa2dc27 859 (build-system python-build-system)
9e378e6a
MB
860 (arguments
861 '(;; FIXME: There is one test failure, but it does not cause the
862 ;; build to fail. No time to investigate right now.
863 #:test-target "tests"))
ab61ce37
RW
864 (inputs
865 `(("freetype" ,freetype)))
3fa2dc27
MB
866 (propagated-inputs
867 `(("python-pillow" ,python-pillow)))
16c76cc4 868 (home-page "https://www.reportlab.com")
3fa2dc27
MB
869 (synopsis "Python library for generating PDFs and graphics")
870 (description "This is the ReportLab PDF Toolkit. It allows rapid creation
871of rich PDF documents, and also creation of charts in a variety of bitmap and
872vector formats.")
d8013ee2 873 (license license:bsd-3)))
3fa2dc27
MB
874
875(define-public python2-reportlab
d8013ee2 876 (package-with-python2 python-reportlab))
8d4169a1
LC
877
878(define-public impressive
879 (package
880 (name "impressive")
7f0bccb5 881 (version "0.12.1")
8d4169a1
LC
882 (source (origin
883 (method url-fetch)
884 (uri (string-append
885 "mirror://sourceforge/impressive/Impressive/"
886 version "/Impressive-" version ".tar.gz"))
887 (sha256
888 (base32
7f0bccb5 889 "1r7ihv41awnlnlry1kymb8fka053wdhzibfwcarn78rr3vs338vl"))))
8d4169a1
LC
890 (build-system python-build-system)
891
892 ;; TODO: Add dependency on pdftk.
ed9b09e4 893 (inputs `(("python2-pygame" ,python2-pygame)
8d4169a1
LC
894 ("python2-pillow" ,python2-pillow)
895 ("sdl" ,sdl)
896 ("xpdf" ,xpdf)))
897
898 (arguments
899 `(#:python ,python-2
900 #:phases (modify-phases %standard-phases
901 (delete 'build)
902 (delete 'configure)
903 (delete 'check)
904 (replace 'install
905 (lambda* (#:key inputs outputs #:allow-other-keys)
906 ;; There's no 'setup.py' so install things manually.
907 (let* ((out (assoc-ref outputs "out"))
908 (bin (string-append out "/bin"))
909 (man1 (string-append out "/share/man/man1"))
910 (sdl (assoc-ref inputs "sdl"))
911 (xpdf (assoc-ref inputs "xpdf")))
912 (mkdir-p bin)
913 (copy-file "impressive.py"
914 (string-append bin "/impressive"))
915 (wrap-program (string-append bin "/impressive")
916 `("LIBRARY_PATH" ":" prefix ;for ctypes
917 (,(string-append sdl "/lib")))
918 `("PATH" ":" prefix ;for pdftoppm
919 (,(string-append xpdf "/bin"))))
8d4169a1
LC
920 (install-file "impressive.1" man1)
921 #t))))))
922 (home-page "http://impressive.sourceforge.net")
923 (synopsis "PDF presentation tool with visual effects")
924 (description
925 "Impressive is a tool to display PDF files that provides visual effects
926such as smooth alpha-blended slide transitions. It provides additional tools
927such as zooming, highlighting an area of the screen, and a tool to navigate
928the PDF pages.")
929 (license license:gpl2)))
f3e22216
JL
930
931(define-public fbida
932 (package
933 (name "fbida")
b3e5cb4c 934 (version "2.14")
f3e22216
JL
935 (home-page "https://www.kraxel.org/blog/linux/fbida/")
936 (source (origin
937 (method url-fetch)
938 (uri (string-append "https://www.kraxel.org/releases/fbida/"
91d42be7 939 "fbida-" version ".tar.gz"))
f3e22216
JL
940 (sha256
941 (base32
b3e5cb4c 942 "0f242mix20rgsqz1llibhsz4r2pbvx6k32rmky0zjvnbaqaw1dwm"))))
f3e22216
JL
943 (build-system gnu-build-system)
944 (arguments
dc1d3cde
KK
945 '(#:phases
946 (modify-phases %standard-phases
b3e5cb4c 947 (add-after 'unpack 'patch-FHS-file-names
dc1d3cde
KK
948 (lambda _
949 (substitute* "mk/Autoconf.mk"
b3e5cb4c 950 (("/bin/echo") "echo")
dc1d3cde
KK
951 (("/sbin/ldconfig -p") "echo lib")) #t))
952 (delete 'configure))
f3e22216
JL
953 #:tests? #f
954 #:make-flags (list "CC=gcc"
955 (string-append "prefix=" (assoc-ref %outputs "out")))))
956 (inputs `(("libjpeg" ,libjpeg)
957 ("curl" ,curl)
958 ("libtiff" ,libtiff)
959 ("libudev" ,eudev)
960 ("libwebp" ,libwebp)
961 ("libdrm" ,libdrm)
962 ("imagemagick" ,imagemagick)
963 ("giflib" ,giflib)
964 ("glib" ,glib)
965 ("cairo-xcb" ,cairo-xcb)
966 ("freetype" ,freetype)
967 ("fontconfig" ,fontconfig)
968 ("libexif" ,libexif)
969 ("mesa" ,mesa)
970 ("libepoxy" ,libepoxy)
971 ("libpng" ,libpng)
972 ("poppler" ,poppler)))
973 (native-inputs `(("pkg-config" ,pkg-config)))
974 (synopsis "Framebuffer and drm-based image viewer")
975 (description
976 "fbida contains a few applications for viewing and editing images on
977the framebuffer.")
978
979 (license license:gpl2+)))
5d68e9d6
AI
980
981(define-public pdf2svg
982 (package
983 (name "pdf2svg")
984 (version "0.2.3")
985 (source (origin
1300dc4b
RW
986 (method git-fetch)
987 (uri (git-reference
988 (url "https://github.com/dawbarton/pdf2svg.git")
989 (commit (string-append "v" version))))
990 (file-name (git-file-name name version))
5d68e9d6
AI
991 (sha256
992 (base32
1300dc4b 993 "14ffdm4y26imq99wjhkrhy9lp33165xci1l5ndwfia8hz53bl02k"))))
5d68e9d6
AI
994 (build-system gnu-build-system)
995 (inputs
996 `(("cairo" ,cairo)
997 ("poppler" ,poppler)))
998 (native-inputs
999 `(("pkg-config" ,pkg-config)))
1000 (home-page "http://www.cityinthesky.co.uk/opensource/pdf2svg/")
1001 (synopsis "PDF to SVG converter")
1002 (description "@command{pdf2svg} is a simple command-line PDF to SVG
1003converter using the Poppler and Cairo libraries.")
1004 (license license:gpl2+)))
ad5a7d49
HG
1005
1006(define-public python-pypdf2
1007 (package
1008 (name "python-pypdf2")
1009 (version "1.26.0")
1010 (source (origin
1011 (method url-fetch)
1012 (uri (pypi-uri "PyPDF2" version))
1013 (sha256
1014 (base32
1015 "11a3aqljg4sawjijkvzhs3irpw0y67zivqpbjpm065ha5wpr13z2"))))
1016 (build-system python-build-system)
1017 (arguments
1018 `(#:phases
1019 (modify-phases %standard-phases
1020 (add-after
1021 'unpack 'patch-test-suite
1022 (lambda _
1023 ;; The text-file needs to be opened in binary mode for Python 3,
1024 ;; so patch in the "b"
1025 (substitute* "Tests/tests.py"
1026 (("pdftext_file = open\\(.* 'crazyones.txt'\\), 'r" line)
1027 (string-append line "b")))
1028 #t))
1029 (replace 'check
1030 (lambda _
60b88466 1031 (invoke "python" "-m" "unittest" "Tests.tests"))))))
ad5a7d49
HG
1032 (home-page "http://mstamy2.github.com/PyPDF2")
1033 (synopsis "Pure Python PDF toolkit")
1034 (description "PyPDF2 is a pure Python PDF library capable of:
1035
1036@enumerate
1037@item extracting document information (title, author, …)
1038@item splitting documents page by page
1039@item merging documents page by page
1040@item cropping pages
1041@item merging multiple pages into a single page
1042@item encrypting and decrypting PDF files
1043@end enumerate
1044
1045By being pure Python, it should run on any Python platform without any
1046dependencies on external libraries. It can also work entirely on
1047@code{StringIO} objects rather than file streams, allowing for PDF
1048manipulation in memory. It is therefore a useful tool for websites that
1049manage or manipulate PDFs.")
1050 (license license:bsd-3)))
1051
1052(define-public python2-pypdf2
1053 (package-with-python2 python-pypdf2))
c68e8591
HG
1054
1055(define-public python2-pypdf
1056 (package
1057 (name "python2-pypdf")
1058 (version "1.13")
1059 (source (origin
1060 (method url-fetch)
1061 (uri (pypi-uri "pyPdf" version))
1062 (sha256
1063 (base32
1064 "0fqfvamir7k41w84c73rghzkiv891gdr17q5iz4hgbf6r71y9v9s"))))
1065 (build-system python-build-system)
1066 (arguments
1067 `(#:tests? #f ; no tests
1068 #:python ,python-2))
1069 (home-page "http://pybrary.net/pyPdf/")
1070 (synopsis "Pure Python PDF toolkit")
1071 (description "PyPDF2 is a pure Python PDF toolkit.
1072
1073Note: This module isn't maintained anymore. For new projects please use
1074python-pypdf2 instead.")
1075 (license license:bsd-3)))
99abcdbd 1076
0cd4a746
BS
1077(define-public pdfarranger
1078 (package
1079 (name "pdfarranger")
1080 (version "1.3.1")
1081 (source
1082 (origin
1083 (method git-fetch)
1084 (uri (git-reference
1085 (url "https://github.com/jeromerobert/pdfarranger.git")
1086 (commit version)))
1087 (file-name (git-file-name name version))
1088 (sha256
1089 (base32 "1f8m8r81322i97wkqpmf7a4kiwnq244n6cnbldh03jc49vwq2kxx"))))
1090 (build-system python-build-system)
1091 (arguments
8b438f85
LC
1092 '(#:tests? #f ;no tests
1093 #:phases (modify-phases %standard-phases
1094 (add-after 'install 'wrap-for-typelib
1095 (lambda* (#:key inputs outputs #:allow-other-keys)
1096 (let* ((out (assoc-ref outputs "out"))
1097 (program (string-append out "/bin/pdfarranger")))
1098 (wrap-program program
1099 `("GI_TYPELIB_PATH" ":" prefix
1100 (,(getenv "GI_TYPELIB_PATH"))))
1101 #t))))))
0cd4a746
BS
1102 (native-inputs
1103 `(("intltool" ,intltool)
1104 ("python-distutils-extra" ,python-distutils-extra)))
1105 (propagated-inputs
1106 `(("gtk+" ,gtk+)
1107 ("poppler" ,poppler)
1108 ("python-pycairo" ,python-pycairo)
1109 ("python-pygobject" ,python-pygobject)
1110 ("python-pypdf2" ,python-pypdf2)))
1111 (home-page "https://github.com/jeromerobert/pdfarranger")
1112 (synopsis "Merge, split and re-arrange pages from PDF documents")
1113 (description
1114 "PDF Arranger is a small application which allows one to merge or split
1115PDF documents and rotate, crop and rearrange their pages using an interactive
1116and intuitive graphical interface.
1117
1118PDF Arranger was formerly known as PDF-Shuffler.")
1119 (license license:gpl3+)))
1120
99abcdbd
HG
1121(define-public pdfposter
1122 (package
1123 (name "pdfposter")
60ba9d8c 1124 (version "0.7.post1")
99abcdbd
HG
1125 (source (origin
1126 (method url-fetch)
60ba9d8c 1127 (uri (pypi-uri "pdftools.pdfposter" version))
99abcdbd
HG
1128 (sha256
1129 (base32
60ba9d8c 1130 "0c1avpbr9q53yzq5ar2x485rmp9d0l3z27aham32bg7gplzd7w0j"))))
99abcdbd
HG
1131 (build-system python-build-system)
1132 (arguments
60ba9d8c 1133 `(#:tests? #f)) ; test-suite not included in source archive
99abcdbd 1134 (inputs
60ba9d8c 1135 `(("python-pypdf2" ,python-pypdf2)))
99abcdbd
HG
1136 (home-page "https://pythonhosted.org/pdftools.pdfposter/")
1137 (synopsis "Scale and tile PDF images/pages to print on multiple pages")
1138 (description "@command{pdfposter} can be used to create a large poster by
d6901d93 1139building it from multiple pages and/or printing it on large media. It expects
99abcdbd
HG
1140as input a PDF file, normally printing on a single page. The output is again
1141a PDF file, maybe containing multiple pages together building the poster. The
1142input page will be scaled to obtain the desired size.
1143
1144This is much like @command{poster} does for Postscript files, but working with
1145PDF. Since sometimes @command{poster} does not like your files converted from
1146PDF. Indeed @command{pdfposter} was inspired by @command{poster}.")
1147 (license license:gpl3+)))
e05fc441
RS
1148
1149(define-public pdfgrep
1150 (package
1151 (name "pdfgrep")
7da4dbb3 1152 (version "2.1.2")
e05fc441
RS
1153 (source
1154 (origin
1155 (method url-fetch)
1156 (uri (string-append "https://pdfgrep.org/download/"
1157 name "-" version ".tar.gz"))
1158 (sha256
1159 (base32
7da4dbb3 1160 "1fia10djcxxl7n9jw2prargw4yzbykk6izig2443ycj9syhxrwqf"))))
e05fc441
RS
1161 (build-system gnu-build-system)
1162 (native-inputs
1163 `(("pkg-config" ,pkg-config)))
1164 (inputs
1165 `(("libgcrypt" ,libgcrypt)
1166 ("pcre" ,pcre)
1167 ("poppler" ,poppler)))
1168 (home-page "https://pdfgrep.org")
1169 (synopsis "Command-line utility to search text in PDF files")
1170 (description
1171 "Pdfgrep searches in pdf files for strings matching a regular expression.
1172Support some GNU grep options as file name output, page number output,
1173optional case insensitivity, count occurrences, color highlights and search in
1174multiple files.")
1175 (license license:gpl2+)))
e2ec95c4
RW
1176
1177(define-public pdfpc
1178 (package
1179 (name "pdfpc")
9b01a729 1180 (version "4.3.4")
e2ec95c4
RW
1181 (source
1182 (origin
1183 (method git-fetch)
1184 (uri (git-reference
1185 (url "https://github.com/pdfpc/pdfpc.git")
1186 (commit (string-append "v" version))))
1187 (file-name (git-file-name name version))
1188 (sha256
9b01a729 1189 (base32 "07aafsm4jzdgpahz83p0ajv40hry7gviyadqi13ahr8xdhhwy2sd"))))
e2ec95c4
RW
1190 (build-system cmake-build-system)
1191 (arguments '(#:tests? #f)) ; no test target
1192 (inputs
1193 `(("cairo" ,cairo)
1194 ("gtk+" ,gtk+)
1195 ("gstreamer" ,gstreamer)
1196 ("gst-plugins-base" ,gst-plugins-base)
1197 ("libgee" ,libgee)
1198 ("poppler" ,poppler)
1199 ("pango" ,pango)
1200 ("vala" ,vala)))
1201 (native-inputs
1202 `(("pkg-config" ,pkg-config)))
1203 (home-page "https://pdfpc.github.io/")
1204 (synopsis "Presenter console with multi-monitor support for PDF files")
1205 (description
1206 "pdfpc is a presentation viewer application which uses multi-monitor
1207output to provide meta information to the speaker during the presentation. It
1208is able to show a normal presentation window on one screen, while showing a
1209more sophisticated overview on the other one providing information like a
1210picture of the next slide, as well as the left over time till the end of the
1211presentation. The input files processed by pdfpc are PDF documents.")
1212 (license license:gpl2+)))
a773f141
RW
1213
1214(define-public paps
a26b73b6
TGR
1215 (package
1216 (name "paps")
1217 (version "0.7.1")
1218 (source
1219 (origin
1220 (method url-fetch)
1221 (uri (string-append "https://github.com/dov/paps/releases/download/v"
1222 version "/paps-" version ".tar.gz"))
1223 (sha256
1224 (base32 "1z1w1fg2bvb8p92n1jlpqp3n9mq42szb2mqhh4xqmmnmfcdkpi9s"))))
1225 (build-system gnu-build-system)
1226 (inputs
1227 `(("pango" ,pango)))
1228 (native-inputs
1229 `(("intltool" ,intltool)
1230 ("pkg-config" ,pkg-config)))
1231 (home-page "https://github.com/dov/paps")
1232 (synopsis "Pango to PostScript converter")
1233 (description
1234 "Paps reads a UTF-8 encoded file and generates a PostScript language
a773f141
RW
1235rendering of the file. The rendering is done by creating outline curves
1236through the Pango @code{ft2} backend.")
a26b73b6 1237 (license license:lgpl2.0+)))
667c004c
AI
1238
1239(define-public stapler
1240 (package
1241 (name "stapler")
1242 (version "0.3.2")
1243 (source
1244 (origin
1245 (method git-fetch)
1246 (uri (git-reference
1247 (url "https://github.com/hellerbarde/stapler")
1248 (commit version)))
1249 (file-name (git-file-name name version))
1250 (sha256
1251 (base32
1252 "06w7xanzr7cicqik62g7zqs57j4y6fc7hflrc1rlmphxx40hkg6r"))))
1253 (build-system python-build-system)
1254 (inputs
1255 `(("python2-pypdf2" ,python2-pypdf2)))
1256 (arguments
1257 `(#:python ,python-2
1258 #:phases
1259 (modify-phases %standard-phases
1260 (add-after 'unpack 'fix-pypdf-version-requirement
1261 ;; A PyPDF2 version requirement of 1.25.1 is hard-coded in
1262 ;; setup.py. Relax it to work with any version of PyPDF2.
1263 (lambda _
1264 (substitute* "setup.py"
1265 (("PyPDF2==1.25.1") "PyPDF2"))
1266 #t)))))
1267 (home-page "https://github.com/hellerbarde/stapler")
1268 (synopsis "PDF manipulation tool")
1269 (description "Stapler is a pure Python alternative to PDFtk, a tool for
1270manipulating PDF documents from the command line. It supports
1271
1272@itemize
1273@item cherry-picking pages and concatenating them into a new file
1274@item splitting a PDF document into single pages each in its own file
1275@item merging PDF documents with their pages interleaved
1276@item displaying metadata in a PDF document
1277@item displaying the mapping between logical and physical page numbers
1278@end itemize")
1279 (license license:bsd-3)))
77e0cebc
HG
1280
1281(define-public weasyprint
1282 (package
1283 (name "weasyprint")
1284 (version "50")
1285 (source
1286 (origin
1287 (method url-fetch)
1288 (uri (pypi-uri "WeasyPrint" version))
1289 (sha256
1290 (base32 "0invs96zvmcr6wh5klj52jrcnr9qg150v9wpmbhcsf3vv1d1hbcw"))
1291 (patches (search-patches "weasyprint-library-paths.patch"))))
1292 (build-system python-build-system)
1293 (arguments
1294 `(#:phases
1295 (modify-phases %standard-phases
1296 (add-after 'unpack 'patch-library-paths
1297 (lambda* (#:key inputs #:allow-other-keys)
1298 (let ((fontconfig (assoc-ref inputs "fontconfig"))
1299 (glib (assoc-ref inputs "glib"))
1300 (pango (assoc-ref inputs "pango"))
1301 (pangoft2 (assoc-ref inputs "pangoft2")))
1302 (substitute* "weasyprint/fonts.py"
1303 (("@fontconfig@")
1304 (string-append fontconfig "/lib/libfontconfig.so"))
1305 (("@pangoft2@")
1306 (string-append pango "/lib/libpangoft2-1.0.so")))
1307 (substitute* "weasyprint/text.py"
1308 (("@gobject@")
1309 (string-append glib "/lib/libgobject-2.0.so"))
1310 (("@pango@")
1311 (string-append pango "/lib/libpango-1.0.so"))
1312 (("@pangocairo@")
1313 (string-append pango "/lib/libpangocairo-1.0.so"))))))
1314 (add-after 'unpack 'remove-pytest-options
1315 (lambda _
1316 (substitute* "setup.cfg"
1317 ;; flake8 and isort syntax checks fail, which is not our
1318 ;; business
1319 (("addopts = --flake8 --isort") ""))))
1320 (replace 'check
1321 (lambda _
1322 ;; run pytest, excluding one failing test
1323 (invoke "pytest" "-k" "not test_flex_column_wrap_reverse"))))))
1324 (inputs
1325 `(("fontconfig" ,fontconfig)
1326 ("glib" ,glib)
1327 ("pango" ,pango)))
1328 (propagated-inputs
1329 `(("gdk-pixbuf" ,gdk-pixbuf)
1330 ("python-cairocffi" ,python-cairocffi)
1331 ("python-cairosvg" ,python-cairosvg)
1332 ("python-cffi" ,python-cffi)
1333 ("python-cssselect2" ,python-cssselect2)
1334 ("python-html5lib" ,python-html5lib)
1335 ("python-pyphen" ,python-pyphen)
1336 ("python-tinycss2" ,python-tinycss2)))
1337 (native-inputs
1338 `(("python-pytest-cov" ,python-pytest-cov)
1339 ("python-pytest-runner" ,python-pytest-runner)))
1340 (home-page "https://weasyprint.org/")
1341 (synopsis "Document factory for creating PDF files from HTML")
1342 (description "WeasyPrint helps web developers to create PDF documents. It
1343turns simple HTML pages into gorgeous statistical reports, invoices, tickets,
1344etc.
1345
1346From a technical point of view, WeasyPrint is a visual rendering engine for
1347HTML and CSS that can export to PDF and PNG. It aims to support web standards
1348for printing.
1349
1350It is based on various libraries but not on a full rendering engine like
1351WebKit or Gecko. The CSS layout engine is written in Python, designed for
1352pagination, and meant to be easy to hack on. Weasyprint can also be used as a
1353python library.
1354
1355Keywords: html2pdf, htmltopdf")
1356 (license license:bsd-3)))