From patchwork Tue May 27 11:56:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jussi Timperi X-Patchwork-Id: 42932 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id AC85E27BC4B; Tue, 27 May 2025 12:58:52 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_BLOCKED, RCVD_IN_VALIDITY_CERTIFIED,RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE, SPF_HELO_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 2CA6027BC49 for ; Tue, 27 May 2025 12:58:52 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uJswm-0008WI-84; Tue, 27 May 2025 07:58:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uJswW-0008SK-FR for guix-patches@gnu.org; Tue, 27 May 2025 07:58:04 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uJswW-0004Np-57 for guix-patches@gnu.org; Tue, 27 May 2025 07:58:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:Date:From:To:In-Reply-To:References:Subject; bh=O0ynhjx2b3X3YsXYjiYm+/yD2JxXWs44osWDmEkK9CI=; b=b2U57zif9KnOifUr7mc7D2T2OCRQeNDjPT3dsdTLF+ZV5BUxjorX+6wqZIFoxRQL/M4pp1u+DhE5lJwsMDtUX3MmbsoGUWcHaOkZBcYggUs3BaX5axOTKuxLkpP4k1TwjEAUoC+XM/tcnMGVq3TwLjH1lBe1m2Rz2Nqh8LnkWNhK4qLnUD4MKc6tfQxZAoVq3Wc77/rd71oqw92b9DLj1LYewRpjGCFNZn6Cym93/zQ3rtkZYoSC63fYIUSQt5Yn+fzyr4JyGnLInOVpw3VWb9bzUhfAsITApdUsewtjshr/5Y0u6WizLovGPGQ/ks6I/orT655CN9h94mTjrlvdIg==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1uJswU-0000wD-FN; Tue, 27 May 2025 07:58:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#77915] [PATCH v2 1/2] gnu: Add ocaml-camlpdf. References: In-Reply-To: Resent-From: Jussi Timperi Original-Sender: "Debbugs-submit" Resent-CC: julien@lepiller.eu, pukkamustard@posteo.net, guix-patches@gnu.org Resent-Date: Tue, 27 May 2025 11:58:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 77915 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 77915@debbugs.gnu.org Cc: Jussi Timperi , Julien Lepiller , pukkamustard X-Debbugs-Original-Xcc: Julien Lepiller , pukkamustard Received: via spool by 77915-submit@debbugs.gnu.org id=B77915.17483470483464 (code B ref 77915); Tue, 27 May 2025 11:58:02 +0000 Received: (at 77915) by debbugs.gnu.org; 27 May 2025 11:57:28 +0000 Received: from localhost ([127.0.0.1]:39602 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uJsvw-0000tm-8f for submit@debbugs.gnu.org; Tue, 27 May 2025 07:57:28 -0400 Received: from mail-wm1-f47.google.com ([209.85.128.47]:56691) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uJsvr-0000t7-GB for 77915@debbugs.gnu.org; Tue, 27 May 2025 07:57:26 -0400 Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43edecbfb94so45108865e9.1 for <77915@debbugs.gnu.org>; Tue, 27 May 2025 04:57:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748347036; x=1748951836; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=O0ynhjx2b3X3YsXYjiYm+/yD2JxXWs44osWDmEkK9CI=; b=PVdpkqwdyGqhlAhd/t8BEG3lvGVtOR3WsPO4nwNl18EcEiGSA9AF6HPJDEQZiOtZuK ur9S9hr3zn24huHXPJlF16Ufskd1Y3kM7NykMdQYOUPvXhevCi3CZ4cBodluqvZtJSvt ua1CmpJt0oJzvpCorl5LW85LdwJ6JQ7GkHilzne1RHIUlErz+gz52wuzyVI6xORsx9pP q70cfj9SUV0qt3uZSwcvMWYgtul/oL83pLnBPjfE5SFmpQLUJa7d9SR8cF/jiLqLduIW n17ttH6uccM+uFSjz45twJV2iGVUf35wH5VdpVsp9xeqHSZfuoeLu9wN9yD9DOofgP/C M8Lg== X-Gm-Message-State: AOJu0YzgbEIme6Fx1b50ZMzBr0VwCM1EjWUX3+iFLSW96CrTP0ELP6Du xLbcAE/KiN1idEfoO9uht1jMbTTNlvgrtXURA4QAEQFiAf4gWkVannQX5pE+oQ== X-Gm-Gg: ASbGncuzW3CsEYgtQ+iQRF4+IpWfZZ5z30g5oDBN2RGA1/J4VAZTiiKq0JfNkx+HiD0 hg2D7d+B+IwczvZwU8oSro7pNBX4FR3e8N2sNCB4Mt25abIMSKRC2rO1snF9eRIRqd5PNU3eeJW 0CFFt7PcMVPTi6LQofuHLwpZODXCjywBdrleU8x98OygKzy0VN3IAen5b86tohnN7ZGWn4fiojv +f0ni0Pes5RxLIENFpdfFvHjqEMO0QiIc1bJqUWI2tf4+hSr+nGvmygMs0ig3pkwX9D2Gw6raf5 ohGNlM8OEkjvMDTWh5hWfVdb9KinFpxSRDhDl1xfuHWR4lKwrJEiBL+YQ6stjMg7LkwyDvMN+YP kQPUR2A/C X-Google-Smtp-Source: AGHT+IHGDdYgQhzCPiBDgJiL6PQaRrWgkRCe76tb6Udil/2uhLqOgeshbU5FEPtzhVLDLBnk5IOCyQ== X-Received: by 2002:a05:600c:64c5:b0:43c:fbbf:7bf1 with SMTP id 5b1f17b1804b1-44c935dbb26mr131007835e9.30.1748347035273; Tue, 27 May 2025 04:57:15 -0700 (PDT) Received: from localhost (83-148-250-16.static.lounea.fi. [83.148.250.16]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-447f6b297easm279033535e9.6.2025.05.27.04.57.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 May 2025 04:57:14 -0700 (PDT) From: Jussi Timperi Date: Tue, 27 May 2025 14:56:43 +0300 Message-ID: X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches * gnu/packages/ocaml.scm (ocaml-camlpdf): New variable. Change-Id: I097280bdd16eaf810f83fbca13f615a03e4d6702 --- gnu/packages/ocaml.scm | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) base-commit: da5d2b382e8db08fd8a99c4d14f2c8c2ef0150da diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm index 01aef23b2a..f6178ffbff 100644 --- a/gnu/packages/ocaml.scm +++ b/gnu/packages/ocaml.scm @@ -31,6 +31,7 @@ ;;; Copyright © 2023, 2024 Foundation Devices, Inc. ;;; Copyright © 2023 Arnaud DABY-SEESARAM ;;; Copyright © 2024 Sören Tempel +;;; Copyright © 2025 Jussi Timperi ;;; ;;; This file is part of GNU Guix. ;;; @@ -659,6 +660,45 @@ (define-public ocaml-extlib ;; With static-linking exception (license license:lgpl2.1+))) +(define-public ocaml-camlpdf + (package + (name "ocaml-camlpdf") + (version "2.8.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/johnwhitington/camlpdf") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1cbqgwh62cqnsbax4k4iv9gb63k1v545izmbffxj8gj1q6sm0k34")))) + (build-system ocaml-build-system) + (arguments + (list + #:tests? #f ;no tests + #:make-flags + #~(list (string-append "CC=" #$(cc-for-target))) + #:phases + #~(modify-phases %standard-phases + (delete 'configure) + (add-after 'unpack 'patch-makefile-shell + (lambda _ + (patch-makefile-SHELL "OCamlMakefile"))) + (add-after 'install 'install-doc + (lambda _ + (let ((doc (string-append #$output "/share/doc/" + #$name "-" #$version))) + (copy-recursively "doc/camlpdf/html" + (string-append doc "/html")))))))) + (home-page "https://github.com/johnwhitington/camlpdf") + (synopsis "OCaml library for PDF file manipulation") + (description + "CamlPDF is an OCaml library that provides functionality for reading, +writing, and modifying PDF files. It serves as the foundation for the +@command{cpdf} command-line tool and various API bindings.") + (license license:lgpl2.1+))) + (define-public ocaml-cudf (package (name "ocaml-cudf") From patchwork Tue May 27 11:56:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jussi Timperi X-Patchwork-Id: 42931 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id C441E27BC4B; Tue, 27 May 2025 12:58:39 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_BLOCKED, RCVD_IN_VALIDITY_CERTIFIED,RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE, SPF_HELO_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 02CE627BC49 for ; Tue, 27 May 2025 12:58:39 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uJswi-0008Ty-9t; Tue, 27 May 2025 07:58:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uJswV-0008SJ-D1 for guix-patches@gnu.org; Tue, 27 May 2025 07:58:04 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uJswV-0004Nk-4K for guix-patches@gnu.org; Tue, 27 May 2025 07:58:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=O6/KB9Ss9A0yL0bLvLHG2lYJl/RgkImKg3QUKFt5G5g=; b=Swf6pOQS1JCHVqetXjH1JQQtGmYaj7alzb++vOlcDdbW56iX1HDtcWZCVKpLC6mSt7n2qvo1KGLPn7qfVWUZ6umLhyG4Wy+kNv/M1U+9PnwKIX5pNX3HOztrWWBoRyyjrrBcrYq0OfZ6msYHc3NkHnBXVYuy6KH72BLyA6zEctLd/Qf3eVohgRwH9awRWh+3Ld38O5sytYNP+DrLt5tt7wk37+cToy62ZFiaDx2gRAzY7+MB7akdPtgznzAz3dwHCjcII6mz7UtqqkLJTmhSwwAZQCwwCwqw5V/aPsS8GFk3NSDZpi/Y9/auf+gSjNJXPM8PPV7qde0dYZL5vzD1Mw==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1uJswU-0000wN-Vc for guix-patches@gnu.org; Tue, 27 May 2025 07:58:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#77915] [PATCH v2 2/2] gnu: Add cpdf. Resent-From: Jussi Timperi Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 27 May 2025 11:58:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 77915 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 77915@debbugs.gnu.org Cc: Jussi Timperi Received: via spool by 77915-submit@debbugs.gnu.org id=B77915.17483470633542 (code B ref 77915); Tue, 27 May 2025 11:58:02 +0000 Received: (at 77915) by debbugs.gnu.org; 27 May 2025 11:57:43 +0000 Received: from localhost ([127.0.0.1]:39605 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uJswA-0000v0-Re for submit@debbugs.gnu.org; Tue, 27 May 2025 07:57:43 -0400 Received: from mail-wr1-f46.google.com ([209.85.221.46]:58580) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uJsw6-0000u5-R1 for 77915@debbugs.gnu.org; Tue, 27 May 2025 07:57:41 -0400 Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-3a375888197so1928683f8f.0 for <77915@debbugs.gnu.org>; Tue, 27 May 2025 04:57:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748347050; x=1748951850; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=O6/KB9Ss9A0yL0bLvLHG2lYJl/RgkImKg3QUKFt5G5g=; b=nKFXhK/YHh2jq6Dk1/NxjnichigQ1wyJGF2nvENlb5ZzZyr/CzafquBUW+b16M0yLW XV9SzseCW6yjlyq504oc/vO1zXi6THdJvKldOKc7M/sHRSTT27Zxq1UIDpKhTLe4y8fF 1pbjBlPbt4GvSrnb5EE5cpopWOLUutOPTj2KHEtpF7kU0p8vJSFKiUr7JepEma66JIuj SFI31K9IiD8psE6KZvbBKqfTojQ70WaZfDnLZlpzqD3sdjxot89dDswsT43kK5DB8vwQ 25YdJo0Gs5L77z0rV/BcSSvkHQA/27vjK1Mj0ABGx6gM6/DsalLv3dk34z9CKP7RG9ux WcmA== X-Gm-Message-State: AOJu0YzcCuzPa+Zv8I3g7PX6Sk3Yhn5sv1L9KTYuaxrV9t4ChvG7OWy1 oVU3tNrAuBQUg/2I4vIk5PSRaCAKFpjRMvmK01DqE+wnnkMKBCxJFi8bH7o0zQ== X-Gm-Gg: ASbGncvid+N2V+UYP73jQsZ+29gdjvSrqp94iZRBMFuoQiMl9mN14nQk7qN+6bQ0jPo izwabhVrhJqJwhlTMMrJDPCDGO9/ILHNkFbL+2sEe90NcIcVj58eG7ZSLKbreA2NyRXkYA2N33K //GtK5RSqbbfXoW4DucLmZijANmAIciiAnG3sItxryyGC5aX74VJ+ZJAjdlR6E8asseFRYkRJBp QVVjFgQSLKPSWyWhSzDjiAnROGbqCWSkzYEBN0XPIJJbboW2v4OUQZNK71dJ73O4XqEYXWqoZkT nPJON+B1SUSWVW/I75XB1nrWBTNOArX+GNMG179AK3V8/twEb2EkO1HbyQgpt7MiYOnSc+qpkNI S26N/1/mS X-Google-Smtp-Source: AGHT+IECGL5jUTLRnl2pybWJZ2HMEG9MgYqycqy8xIf4afx0mgArc/K8oFV9jp8ZEgQmQcImZV94xQ== X-Received: by 2002:a05:6000:290a:b0:3a4:e4ee:4c75 with SMTP id ffacd0b85a97d-3a4e4ee501dmr761782f8f.6.1748347049911; Tue, 27 May 2025 04:57:29 -0700 (PDT) Received: from localhost (83-148-250-16.static.lounea.fi. [83.148.250.16]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a4d4a24429sm7578349f8f.36.2025.05.27.04.57.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 May 2025 04:57:29 -0700 (PDT) From: Jussi Timperi Date: Tue, 27 May 2025 14:56:44 +0300 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches * gnu/packages/pdf.scm (cpdf): New variable. Change-Id: I16fa4bf7251f5d38bdd14f472adeef513c34623c --- gnu/packages/pdf.scm | 85 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm index 3e43b2c0fe..929901e55d 100644 --- a/gnu/packages/pdf.scm +++ b/gnu/packages/pdf.scm @@ -29,6 +29,7 @@ ;;; Copyright © 2023 Benjamin Slade ;;; Copyright © 2024 Artyom V. Poptsov ;;; Copyright © 2024 Aaron Covrig +;;; Copyright © 2025 Jussi Timperi ;;; ;;; This file is part of GNU Guix. ;;; @@ -56,6 +57,7 @@ (define-module (gnu packages pdf) #:use-module (guix build-system gnu) #:use-module (guix build-system cmake) #:use-module (guix build-system meson) + #:use-module (guix build-system ocaml) #:use-module (guix build-system pyproject) #:use-module (guix build-system python) #:use-module (guix build-system qt) @@ -95,6 +97,7 @@ (define-module (gnu packages pdf) #:use-module (gnu packages man) #:use-module (gnu packages markup) #:use-module (gnu packages nss) + #:use-module (gnu packages ocaml) #:use-module (gnu packages ocr) #:use-module (gnu packages pcre) #:use-module (gnu packages perl) @@ -159,6 +162,88 @@ (define-public capypdf convert data in any way.") (license license:asl2.0))) +(define-public cpdf + (package + (name "cpdf") + (version "2.8.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/johnwhitington/cpdf-source") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0dn4lxbnj7izrpxshil1wcvpc60yv9mwfy52dndpi9b66rm3rbih")))) + (build-system ocaml-build-system) + (arguments + (list + #:tests? #f ;no tests + #:phases + #~(modify-phases %standard-phases + (delete 'configure) + (add-after 'unpack 'patch-makefile-shell + (lambda _ + (patch-makefile-SHELL "OCamlMakefile"))) + (add-after 'install 'install-bin + (lambda _ + (let ((bin (string-append #$output "/bin"))) + (install-file "cpdf" bin)))) + (add-after 'install-bin 'install-doc + (lambda _ + (let ((doc (string-append #$output "/share/doc/" + #$name "-" #$version)) + (man1 (string-append #$output "/share/man/man1"))) + (install-file "cpdf.1" man1) + (install-file "cpdfmanual.pdf" doc) + (copy-recursively "doc/cpdf/html" + (string-append doc "/html")))))))) + (propagated-inputs (list ocaml-camlpdf)) + (home-page "https://www.coherentpdf.com") + (synopsis "Command-line tool for PDF manipulation") + (description + "Command-line tool and OCaml library designed for manipulating PDF +documents. Key Features include: + +@itemize @bullet +@item +Splitting and merging PDF files (including bookmark preservation and +splitting on bookmarks). +@item +Encryption and decryption (supports AES 128 and AES 256). +@item +Page manipulation: scaling, rotation, cropping, and flipping; fitting +pages to a specific size. +@item +Bookmark management: copying, removing, and adding bookmarks. +@item +Watermarking: stamping logos, page numbers, and multi-line text with +transparency support. +@item +Text and font handling: embedding TrueType fonts, supporting Unicode +UTF-8 input and output, and converting text to PDF. +@item +Presentation features: creating PDF-based presentations and arranging +multiple pages on a single page. +@item +Annotation management: listing, copying, setting, and removing +annotations. +@item +Metadata management: reading and setting document information and +metadata. +@item +Attachment handling: adding and removing file attachments to documents +or pages. +@item +Advanced features: thickening hairlines, blackening text, +reconstructing malformed files, detecting missing fonts and +low-resolution images, exporting/importing in JSON format, and +building table of contents. +@item +Drawing: Adding graphics and text directly onto PDF files. +@end itemize") + (license license:agpl3+))) + (define-public a4pdf (deprecated-package "a4pdf" capypdf))