Mercurial > hgrepos > Python2 > PyMuPDF
annotate src/__main__.py @ 46:7ee69f120f19 default tip
>>>>> tag v1.26.5+1 for changeset b74429b0f5c4
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 11 Oct 2025 17:17:30 +0200 |
| parents | 1d09e1dec1d9 |
| children |
| rev | line source |
|---|---|
|
1
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1 # ----------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
2 # Copyright 2020-2022, Harald Lieder, mailto:harald.lieder@outlook.com |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
3 # License: GNU AFFERO GPL 3.0, https://www.gnu.org/licenses/agpl-3.0.html |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
4 # Part of "PyMuPDF", Python bindings for "MuPDF" (http://mupdf.com), a |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
5 # lightweight PDF, XPS, and E-book viewer, renderer and toolkit which is |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
6 # maintained and developed by Artifex Software, Inc. https://artifex.com. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
7 # ----------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
8 import argparse |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
9 import bisect |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
10 import os |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
11 import sys |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
12 import statistics |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
13 from typing import Dict, List, Set |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
14 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
15 from . import pymupdf |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
16 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
17 def mycenter(x): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
18 return (" %s " % x).center(75, "-") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
19 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
20 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
21 def recoverpix(doc, item): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
22 """Return image for a given XREF.""" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
23 x = item[0] # xref of PDF image |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
24 s = item[1] # xref of its /SMask |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
25 if s == 0: # no smask: use direct image output |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
26 return doc.extract_image(x) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
27 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
28 def getimage(pix): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
29 if pix.colorspace.n != 4: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
30 return pix |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
31 tpix = pymupdf.Pixmap(pymupdf.csRGB, pix) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
32 return tpix |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
33 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
34 # we need to reconstruct the alpha channel with the smask |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
35 pix1 = pymupdf.Pixmap(doc, x) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
36 pix2 = pymupdf.Pixmap(doc, s) # create pixmap of the /SMask entry |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
37 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
38 """Sanity check: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
39 - both pixmaps must have the same rectangle |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
40 - both pixmaps must have alpha=0 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
41 - pix2 must consist of 1 byte per pixel |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
42 """ |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
43 if not (pix1.irect == pix2.irect and pix1.alpha == pix2.alpha == 0 and pix2.n == 1): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
44 pymupdf.message("Warning: unsupported /SMask %i for %i:" % (s, x)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
45 pymupdf.message(pix2) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
46 pix2 = None |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
47 return getimage(pix1) # return the pixmap as is |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
48 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
49 pix = pymupdf.Pixmap(pix1) # copy of pix1, with an alpha channel added |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
50 pix.set_alpha(pix2.samples) # treat pix2.samples as the alpha values |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
51 pix1 = pix2 = None # free temp pixmaps |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
52 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
53 # we may need to adjust something for CMYK pixmaps here: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
54 return getimage(pix) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
55 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
56 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
57 def open_file(filename, password, show=False, pdf=True): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
58 """Open and authenticate a document.""" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
59 doc = pymupdf.open(filename) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
60 if not doc.is_pdf and pdf is True: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
61 sys.exit("this command supports PDF files only") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
62 rc = -1 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
63 if not doc.needs_pass: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
64 return doc |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
65 if password: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
66 rc = doc.authenticate(password) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
67 if not rc: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
68 sys.exit("authentication unsuccessful") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
69 if show is True: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
70 pymupdf.message("authenticated as %s" % "owner" if rc > 2 else "user") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
71 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
72 sys.exit("'%s' requires a password" % doc.name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
73 return doc |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
74 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
75 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
76 def print_dict(item): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
77 """Print a Python dictionary.""" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
78 l = max([len(k) for k in item.keys()]) + 1 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
79 for k, v in item.items(): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
80 msg = "%s: %s" % (k.rjust(l), v) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
81 pymupdf.message(msg) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
82 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
83 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
84 def print_xref(doc, xref): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
85 """Print an object given by XREF number. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
86 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
87 Simulate the PDF source in "pretty" format. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
88 For a stream also print its size. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
89 """ |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
90 pymupdf.message("%i 0 obj" % xref) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
91 xref_str = doc.xref_object(xref) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
92 pymupdf.message(xref_str) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
93 if doc.xref_is_stream(xref): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
94 temp = xref_str.split() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
95 try: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
96 idx = temp.index("/Length") + 1 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
97 size = temp[idx] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
98 if size.endswith("0 R"): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
99 size = "unknown" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
100 except Exception: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
101 size = "unknown" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
102 pymupdf.message("stream\n...%s bytes" % size) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
103 pymupdf.message("endstream") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
104 pymupdf.message("endobj") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
105 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
106 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
107 def get_list(rlist, limit, what="page"): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
108 """Transform a page / xref specification into a list of integers. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
109 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
110 Args |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
111 ---- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
112 rlist: (str) the specification |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
113 limit: maximum number, i.e. number of pages, number of objects |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
114 what: a string to be used in error messages |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
115 Returns |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
116 ------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
117 A list of integers representing the specification. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
118 """ |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
119 N = str(limit - 1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
120 rlist = rlist.replace("N", N).replace(" ", "") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
121 rlist_arr = rlist.split(",") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
122 out_list = [] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
123 for seq, item in enumerate(rlist_arr): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
124 n = seq + 1 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
125 if item.isdecimal(): # a single integer |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
126 i = int(item) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
127 if 1 <= i < limit: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
128 out_list.append(int(item)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
129 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
130 sys.exit("bad %s specification at item %i" % (what, n)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
131 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
132 try: # this must be a range now, and all of the following must work: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
133 i1, i2 = item.split("-") # will fail if not 2 items produced |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
134 i1 = int(i1) # will fail on non-integers |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
135 i2 = int(i2) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
136 except Exception: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
137 sys.exit("bad %s range specification at item %i" % (what, n)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
138 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
139 if not (1 <= i1 < limit and 1 <= i2 < limit): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
140 sys.exit("bad %s range specification at item %i" % (what, n)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
141 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
142 if i1 == i2: # just in case: a range of equal numbers |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
143 out_list.append(i1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
144 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
145 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
146 if i1 < i2: # first less than second |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
147 out_list += list(range(i1, i2 + 1)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
148 else: # first larger than second |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
149 out_list += list(range(i1, i2 - 1, -1)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
150 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
151 return out_list |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
152 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
153 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
154 def show(args): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
155 doc = open_file(args.input, args.password, True) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
156 size = os.path.getsize(args.input) / 1024 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
157 flag = "KB" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
158 if size > 1000: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
159 size /= 1024 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
160 flag = "MB" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
161 size = round(size, 1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
162 meta = doc.metadata # pylint: disable=no-member |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
163 pymupdf.message( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
164 "'%s', pages: %i, objects: %i, %g %s, %s, encryption: %s" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
165 % ( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
166 args.input, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
167 doc.page_count, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
168 doc.xref_length() - 1, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
169 size, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
170 flag, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
171 meta["format"], |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
172 meta["encryption"], |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
173 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
174 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
175 n = doc.is_form_pdf |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
176 if n > 0: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
177 s = doc.get_sigflags() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
178 pymupdf.message( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
179 "document contains %i root form fields and is %ssigned" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
180 % (n, "not " if s != 3 else "") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
181 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
182 n = doc.embfile_count() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
183 if n > 0: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
184 pymupdf.message("document contains %i embedded files" % n) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
185 pymupdf.message() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
186 if args.catalog: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
187 pymupdf.message(mycenter("PDF catalog")) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
188 xref = doc.pdf_catalog() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
189 print_xref(doc, xref) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
190 pymupdf.message() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
191 if args.metadata: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
192 pymupdf.message(mycenter("PDF metadata")) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
193 print_dict(doc.metadata) # pylint: disable=no-member |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
194 pymupdf.message() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
195 if args.xrefs: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
196 pymupdf.message(mycenter("object information")) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
197 xrefl = get_list(args.xrefs, doc.xref_length(), what="xref") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
198 for xref in xrefl: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
199 print_xref(doc, xref) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
200 pymupdf.message() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
201 if args.pages: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
202 pymupdf.message(mycenter("page information")) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
203 pagel = get_list(args.pages, doc.page_count + 1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
204 for pno in pagel: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
205 n = pno - 1 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
206 xref = doc.page_xref(n) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
207 pymupdf.message("Page %i:" % pno) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
208 print_xref(doc, xref) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
209 pymupdf.message() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
210 if args.trailer: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
211 pymupdf.message(mycenter("PDF trailer")) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
212 pymupdf.message(doc.pdf_trailer()) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
213 pymupdf.message() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
214 doc.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
215 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
216 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
217 def clean(args): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
218 doc = open_file(args.input, args.password, pdf=True) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
219 encryption = args.encryption |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
220 encrypt = ("keep", "none", "rc4-40", "rc4-128", "aes-128", "aes-256").index( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
221 encryption |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
222 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
223 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
224 if not args.pages: # simple cleaning |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
225 doc.save( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
226 args.output, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
227 garbage=args.garbage, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
228 deflate=args.compress, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
229 pretty=args.pretty, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
230 clean=args.sanitize, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
231 ascii=args.ascii, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
232 linear=args.linear, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
233 encryption=encrypt, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
234 owner_pw=args.owner, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
235 user_pw=args.user, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
236 permissions=args.permission, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
237 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
238 return |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
239 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
240 # create sub document from page numbers |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
241 pages = get_list(args.pages, doc.page_count + 1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
242 outdoc = pymupdf.open() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
243 for pno in pages: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
244 n = pno - 1 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
245 outdoc.insert_pdf(doc, from_page=n, to_page=n) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
246 outdoc.save( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
247 args.output, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
248 garbage=args.garbage, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
249 deflate=args.compress, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
250 pretty=args.pretty, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
251 clean=args.sanitize, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
252 ascii=args.ascii, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
253 linear=args.linear, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
254 encryption=encrypt, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
255 owner_pw=args.owner, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
256 user_pw=args.user, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
257 permissions=args.permission, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
258 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
259 doc.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
260 outdoc.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
261 return |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
262 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
263 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
264 def doc_join(args): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
265 """Join pages from several PDF documents.""" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
266 doc_list = args.input # a list of input PDFs |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
267 doc = pymupdf.open() # output PDF |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
268 for src_item in doc_list: # process one input PDF |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
269 src_list = src_item.split(",") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
270 password = src_list[1] if len(src_list) > 1 else None |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
271 src = open_file(src_list[0], password, pdf=True) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
272 pages = ",".join(src_list[2:]) # get 'pages' specifications |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
273 if pages: # if anything there, retrieve a list of desired pages |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
274 page_list = get_list(",".join(src_list[2:]), src.page_count + 1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
275 else: # take all pages |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
276 page_list = range(1, src.page_count + 1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
277 for i in page_list: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
278 doc.insert_pdf(src, from_page=i - 1, to_page=i - 1) # copy each source page |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
279 src.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
280 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
281 doc.save(args.output, garbage=4, deflate=True) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
282 doc.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
283 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
284 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
285 def embedded_copy(args): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
286 """Copy embedded files between PDFs.""" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
287 doc = open_file(args.input, args.password, pdf=True) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
288 if not doc.can_save_incrementally() and ( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
289 not args.output or args.output == args.input |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
290 ): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
291 sys.exit("cannot save PDF incrementally") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
292 src = open_file(args.source, args.pwdsource) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
293 names = set(args.name) if args.name else set() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
294 src_names = set(src.embfile_names()) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
295 if names: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
296 if not names <= src_names: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
297 sys.exit("not all names are contained in source") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
298 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
299 names = src_names |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
300 if not names: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
301 sys.exit("nothing to copy") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
302 intersect = names & set(doc.embfile_names()) # any equal name already in target? |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
303 if intersect: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
304 sys.exit("following names already exist in receiving PDF: %s" % str(intersect)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
305 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
306 for item in names: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
307 info = src.embfile_info(item) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
308 buff = src.embfile_get(item) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
309 doc.embfile_add( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
310 item, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
311 buff, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
312 filename=info["filename"], |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
313 ufilename=info["ufilename"], |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
314 desc=info["desc"], |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
315 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
316 pymupdf.message("copied entry '%s' from '%s'" % (item, src.name)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
317 src.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
318 if args.output and args.output != args.input: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
319 doc.save(args.output, garbage=3) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
320 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
321 doc.saveIncr() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
322 doc.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
323 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
324 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
325 def embedded_del(args): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
326 """Delete an embedded file entry.""" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
327 doc = open_file(args.input, args.password, pdf=True) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
328 if not doc.can_save_incrementally() and ( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
329 not args.output or args.output == args.input |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
330 ): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
331 sys.exit("cannot save PDF incrementally") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
332 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
333 try: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
334 doc.embfile_del(args.name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
335 except (ValueError, pymupdf.mupdf.FzErrorBase) as e: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
336 sys.exit(f'no such embedded file {args.name!r}: {e}') |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
337 if not args.output or args.output == args.input: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
338 doc.saveIncr() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
339 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
340 doc.save(args.output, garbage=1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
341 doc.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
342 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
343 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
344 def embedded_get(args): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
345 """Retrieve contents of an embedded file.""" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
346 doc = open_file(args.input, args.password, pdf=True) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
347 try: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
348 stream = doc.embfile_get(args.name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
349 d = doc.embfile_info(args.name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
350 except (ValueError, pymupdf.mupdf.FzErrorBase) as e: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
351 sys.exit(f'no such embedded file {args.name!r}: {e}') |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
352 filename = args.output if args.output else d["filename"] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
353 with open(filename, "wb") as output: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
354 output.write(stream) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
355 pymupdf.message("saved entry '%s' as '%s'" % (args.name, filename)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
356 doc.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
357 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
358 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
359 def embedded_add(args): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
360 """Insert a new embedded file.""" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
361 doc = open_file(args.input, args.password, pdf=True) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
362 if not doc.can_save_incrementally() and ( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
363 args.output is None or args.output == args.input |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
364 ): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
365 sys.exit("cannot save PDF incrementally") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
366 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
367 try: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
368 doc.embfile_del(args.name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
369 sys.exit("entry '%s' already exists" % args.name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
370 except Exception: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
371 pass |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
372 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
373 if not os.path.exists(args.path) or not os.path.isfile(args.path): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
374 sys.exit("no such file '%s'" % args.path) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
375 with open(args.path, "rb") as f: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
376 stream = f.read() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
377 filename = args.path |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
378 ufilename = filename |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
379 if not args.desc: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
380 desc = filename |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
381 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
382 desc = args.desc |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
383 doc.embfile_add( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
384 args.name, stream, filename=filename, ufilename=ufilename, desc=desc |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
385 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
386 if not args.output or args.output == args.input: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
387 doc.saveIncr() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
388 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
389 doc.save(args.output, garbage=3) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
390 doc.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
391 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
392 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
393 def embedded_upd(args): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
394 """Update contents or metadata of an embedded file.""" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
395 doc = open_file(args.input, args.password, pdf=True) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
396 if not doc.can_save_incrementally() and ( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
397 args.output is None or args.output == args.input |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
398 ): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
399 sys.exit("cannot save PDF incrementally") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
400 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
401 try: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
402 doc.embfile_info(args.name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
403 except Exception: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
404 sys.exit("no such embedded file '%s'" % args.name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
405 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
406 if ( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
407 args.path is not None |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
408 and os.path.exists(args.path) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
409 and os.path.isfile(args.path) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
410 ): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
411 with open(args.path, "rb") as f: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
412 stream = f.read() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
413 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
414 stream = None |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
415 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
416 if args.filename: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
417 filename = args.filename |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
418 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
419 filename = None |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
420 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
421 if args.ufilename: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
422 ufilename = args.ufilename |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
423 elif args.filename: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
424 ufilename = args.filename |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
425 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
426 ufilename = None |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
427 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
428 if args.desc: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
429 desc = args.desc |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
430 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
431 desc = None |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
432 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
433 doc.embfile_upd( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
434 args.name, stream, filename=filename, ufilename=ufilename, desc=desc |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
435 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
436 if args.output is None or args.output == args.input: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
437 doc.saveIncr() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
438 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
439 doc.save(args.output, garbage=3) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
440 doc.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
441 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
442 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
443 def embedded_list(args): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
444 """List embedded files.""" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
445 doc = open_file(args.input, args.password, pdf=True) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
446 names = doc.embfile_names() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
447 if args.name is not None: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
448 if args.name not in names: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
449 sys.exit("no such embedded file '%s'" % args.name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
450 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
451 pymupdf.message() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
452 pymupdf.message( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
453 "printing 1 of %i embedded file%s:" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
454 % (len(names), "s" if len(names) > 1 else "") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
455 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
456 pymupdf.message() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
457 print_dict(doc.embfile_info(args.name)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
458 pymupdf.message() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
459 return |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
460 if not names: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
461 pymupdf.message("'%s' contains no embedded files" % doc.name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
462 return |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
463 if len(names) > 1: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
464 msg = "'%s' contains the following %i embedded files" % (doc.name, len(names)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
465 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
466 msg = "'%s' contains the following embedded file" % doc.name |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
467 pymupdf.message(msg) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
468 pymupdf.message() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
469 for name in names: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
470 if not args.detail: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
471 pymupdf.message(name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
472 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
473 _ = doc.embfile_info(name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
474 print_dict(doc.embfile_info(name)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
475 pymupdf.message() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
476 doc.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
477 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
478 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
479 def extract_objects(args): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
480 """Extract images and / or fonts from a PDF.""" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
481 if not args.fonts and not args.images: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
482 sys.exit("neither fonts nor images requested") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
483 doc = open_file(args.input, args.password, pdf=True) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
484 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
485 if args.pages: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
486 pages = get_list(args.pages, doc.page_count + 1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
487 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
488 pages = range(1, doc.page_count + 1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
489 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
490 if not args.output: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
491 out_dir = os.path.abspath(os.curdir) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
492 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
493 out_dir = args.output |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
494 if not (os.path.exists(out_dir) and os.path.isdir(out_dir)): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
495 sys.exit("output directory %s does not exist" % out_dir) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
496 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
497 font_xrefs = set() # already saved fonts |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
498 image_xrefs = set() # already saved images |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
499 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
500 for pno in pages: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
501 if args.fonts: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
502 itemlist = doc.get_page_fonts(pno - 1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
503 for item in itemlist: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
504 xref = item[0] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
505 if xref not in font_xrefs: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
506 font_xrefs.add(xref) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
507 fontname, ext, _, buffer = doc.extract_font(xref) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
508 if ext == "n/a" or not buffer: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
509 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
510 outname = os.path.join( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
511 out_dir, f"{fontname.replace(' ', '-')}-{xref}.{ext}" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
512 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
513 with open(outname, "wb") as outfile: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
514 outfile.write(buffer) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
515 buffer = None |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
516 if args.images: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
517 itemlist = doc.get_page_images(pno - 1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
518 for item in itemlist: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
519 xref = item[0] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
520 if xref not in image_xrefs: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
521 image_xrefs.add(xref) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
522 pix = recoverpix(doc, item) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
523 if type(pix) is dict: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
524 ext = pix["ext"] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
525 imgdata = pix["image"] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
526 outname = os.path.join(out_dir, "img-%i.%s" % (xref, ext)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
527 with open(outname, "wb") as outfile: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
528 outfile.write(imgdata) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
529 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
530 outname = os.path.join(out_dir, "img-%i.png" % xref) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
531 pix2 = ( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
532 pix |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
533 if pix.colorspace.n < 4 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
534 else pymupdf.Pixmap(pymupdf.csRGB, pix) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
535 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
536 pix2.save(outname) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
537 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
538 if args.fonts: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
539 pymupdf.message("saved %i fonts to '%s'" % (len(font_xrefs), out_dir)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
540 if args.images: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
541 pymupdf.message("saved %i images to '%s'" % (len(image_xrefs), out_dir)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
542 doc.close() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
543 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
544 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
545 def page_simple(page, textout, GRID, fontsize, noformfeed, skip_empty, flags): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
546 eop = b"\n" if noformfeed else bytes([12]) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
547 text = page.get_text("text", flags=flags) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
548 if not text: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
549 if not skip_empty: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
550 textout.write(eop) # write formfeed |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
551 return |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
552 textout.write(text.encode("utf8", errors="surrogatepass")) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
553 textout.write(eop) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
554 return |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
555 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
556 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
557 def page_blocksort(page, textout, GRID, fontsize, noformfeed, skip_empty, flags): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
558 eop = b"\n" if noformfeed else bytes([12]) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
559 blocks = page.get_text("blocks", flags=flags) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
560 if blocks == []: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
561 if not skip_empty: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
562 textout.write(eop) # write formfeed |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
563 return |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
564 blocks.sort(key=lambda b: (b[3], b[0])) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
565 for b in blocks: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
566 textout.write(b[4].encode("utf8", errors="surrogatepass")) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
567 textout.write(eop) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
568 return |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
569 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
570 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
571 def page_layout(page, textout, GRID, fontsize, noformfeed, skip_empty, flags): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
572 eop = b"\n" if noformfeed else bytes([12]) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
573 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
574 # -------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
575 def find_line_index(values: List[int], value: int) -> int: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
576 """Find the right row coordinate. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
577 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
578 Args: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
579 values: (list) y-coordinates of rows. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
580 value: (int) lookup for this value (y-origin of char). |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
581 Returns: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
582 y-ccordinate of appropriate line for value. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
583 """ |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
584 i = bisect.bisect_right(values, value) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
585 if i: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
586 return values[i - 1] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
587 raise RuntimeError("Line for %g not found in %s" % (value, values)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
588 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
589 # -------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
590 def curate_rows(rows: Set[int], GRID) -> List: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
591 rows = list(rows) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
592 rows.sort() # sort ascending |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
593 nrows = [rows[0]] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
594 for h in rows[1:]: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
595 if h >= nrows[-1] + GRID: # only keep significant differences |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
596 nrows.append(h) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
597 return nrows # curated list of line bottom coordinates |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
598 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
599 def process_blocks(blocks: List[Dict], page: pymupdf.Page): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
600 rows = set() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
601 page_width = page.rect.width |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
602 page_height = page.rect.height |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
603 rowheight = page_height |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
604 left = page_width |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
605 right = 0 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
606 chars = [] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
607 for block in blocks: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
608 for line in block["lines"]: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
609 if line["dir"] != (1, 0): # ignore non-horizontal text |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
610 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
611 x0, y0, x1, y1 = line["bbox"] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
612 if y1 < 0 or y0 > page.rect.height: # ignore if outside CropBox |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
613 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
614 # upd row height |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
615 height = y1 - y0 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
616 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
617 if rowheight > height: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
618 rowheight = height |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
619 for span in line["spans"]: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
620 if span["size"] <= fontsize: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
621 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
622 for c in span["chars"]: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
623 x0, _, x1, _ = c["bbox"] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
624 cwidth = x1 - x0 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
625 ox, oy = c["origin"] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
626 oy = int(round(oy)) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
627 rows.add(oy) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
628 ch = c["c"] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
629 if left > ox and ch != " ": |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
630 left = ox # update left coordinate |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
631 if right < x1: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
632 right = x1 # update right coordinate |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
633 # handle ligatures: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
634 if cwidth == 0 and chars != []: # potential ligature |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
635 old_ch, old_ox, old_oy, old_cwidth = chars[-1] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
636 if old_oy == oy: # ligature |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
637 if old_ch != chr(0xFB00): # previous "ff" char lig? |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
638 lig = joinligature(old_ch + ch) # no |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
639 # convert to one of the 3-char ligatures: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
640 elif ch == "i": |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
641 lig = chr(0xFB03) # "ffi" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
642 elif ch == "l": |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
643 lig = chr(0xFB04) # "ffl" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
644 else: # something wrong, leave old char in place |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
645 lig = old_ch |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
646 chars[-1] = (lig, old_ox, old_oy, old_cwidth) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
647 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
648 chars.append((ch, ox, oy, cwidth)) # all chars on page |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
649 return chars, rows, left, right, rowheight |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
650 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
651 def joinligature(lig: str) -> str: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
652 """Return ligature character for a given pair / triple of characters. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
653 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
654 Args: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
655 lig: (str) 2/3 characters, e.g. "ff" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
656 Returns: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
657 Ligature, e.g. "ff" -> chr(0xFB00) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
658 """ |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
659 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
660 if lig == "ff": |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
661 return chr(0xFB00) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
662 elif lig == "fi": |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
663 return chr(0xFB01) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
664 elif lig == "fl": |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
665 return chr(0xFB02) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
666 elif lig == "ffi": |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
667 return chr(0xFB03) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
668 elif lig == "ffl": |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
669 return chr(0xFB04) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
670 elif lig == "ft": |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
671 return chr(0xFB05) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
672 elif lig == "st": |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
673 return chr(0xFB06) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
674 return lig |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
675 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
676 # -------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
677 def make_textline(left, slot, minslot, lchars): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
678 """Produce the text of one output line. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
679 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
680 Args: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
681 left: (float) left most coordinate used on page |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
682 slot: (float) avg width of one character in any font in use. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
683 minslot: (float) min width for the characters in this line. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
684 chars: (list[tuple]) characters of this line. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
685 Returns: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
686 text: (str) text string for this line |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
687 """ |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
688 text = "" # we output this |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
689 old_char = "" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
690 old_x1 = 0 # end coordinate of last char |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
691 old_ox = 0 # x-origin of last char |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
692 if minslot <= pymupdf.EPSILON: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
693 raise RuntimeError("program error: minslot too small = %g" % minslot) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
694 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
695 for c in lchars: # loop over characters |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
696 char, ox, _, cwidth = c |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
697 ox = ox - left # its (relative) start coordinate |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
698 x1 = ox + cwidth # ending coordinate |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
699 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
700 # eliminate overprint effect |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
701 if old_char == char and ox - old_ox <= cwidth * 0.2: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
702 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
703 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
704 # omit spaces overlapping previous char |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
705 if char == " " and (old_x1 - ox) / cwidth > 0.8: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
706 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
707 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
708 old_char = char |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
709 # close enough to previous? |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
710 if ox < old_x1 + minslot: # assume char adjacent to previous |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
711 text += char # append to output |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
712 old_x1 = x1 # new end coord |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
713 old_ox = ox # new origin.x |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
714 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
715 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
716 # else next char starts after some gap: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
717 # fill in right number of spaces, so char is positioned |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
718 # in the right slot of the line |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
719 if char == " ": # rest relevant for non-space only |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
720 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
721 delta = int(ox / slot) - len(text) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
722 if ox > old_x1 and delta > 1: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
723 text += " " * delta |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
724 # now append char |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
725 text += char |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
726 old_x1 = x1 # new end coordinate |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
727 old_ox = ox # new origin |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
728 return text.rstrip() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
729 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
730 # extract page text by single characters ("rawdict") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
731 blocks = page.get_text("rawdict", flags=flags)["blocks"] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
732 chars, rows, left, right, rowheight = process_blocks(blocks, page) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
733 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
734 if chars == []: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
735 if not skip_empty: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
736 textout.write(eop) # write formfeed |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
737 return |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
738 # compute list of line coordinates - ignoring small (GRID) differences |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
739 rows = curate_rows(rows, GRID) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
740 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
741 # sort all chars by x-coordinates, so every line will receive char info, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
742 # sorted from left to right. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
743 chars.sort(key=lambda c: c[1]) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
744 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
745 # populate the lines with their char info |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
746 lines = {} # key: y1-ccordinate, value: char list |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
747 for c in chars: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
748 _, _, oy, _ = c |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
749 y = find_line_index(rows, oy) # y-coord of the right line |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
750 lchars = lines.get(y, []) # read line chars so far |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
751 lchars.append(c) # append this char |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
752 lines[y] = lchars # write back to line |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
753 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
754 # ensure line coordinates are ascending |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
755 keys = list(lines.keys()) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
756 keys.sort() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
757 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
758 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
759 # Compute "char resolution" for the page: the char width corresponding to |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
760 # 1 text char position on output - call it 'slot'. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
761 # For each line, compute median of its char widths. The minimum across all |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
762 # lines is 'slot'. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
763 # The minimum char width of each line is used to determine if spaces must |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
764 # be inserted in between two characters. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
765 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
766 slot = right - left |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
767 minslots = {} |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
768 for k in keys: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
769 lchars = lines[k] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
770 ccount = len(lchars) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
771 if ccount < 2: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
772 minslots[k] = 1 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
773 continue |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
774 widths = [c[3] for c in lchars] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
775 widths.sort() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
776 this_slot = statistics.median(widths) # take median value |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
777 if this_slot < slot: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
778 slot = this_slot |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
779 minslots[k] = widths[0] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
780 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
781 # compute line advance in text output |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
782 rowheight = rowheight * (rows[-1] - rows[0]) / (rowheight * len(rows)) * 1.2 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
783 rowpos = rows[0] # first line positioned here |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
784 textout.write(b"\n") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
785 for k in keys: # walk through the lines |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
786 while rowpos < k: # honor distance between lines |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
787 textout.write(b"\n") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
788 rowpos += rowheight |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
789 text = make_textline(left, slot, minslots[k], lines[k]) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
790 textout.write((text + "\n").encode("utf8", errors="surrogatepass")) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
791 rowpos = k + rowheight |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
792 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
793 textout.write(eop) # write formfeed |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
794 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
795 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
796 def gettext(args): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
797 doc = open_file(args.input, args.password, pdf=False) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
798 pagel = get_list(args.pages, doc.page_count + 1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
799 output = args.output |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
800 if output is None: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
801 filename, _ = os.path.splitext(doc.name) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
802 output = filename + ".txt" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
803 with open(output, "wb") as textout: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
804 flags = pymupdf.TEXT_PRESERVE_LIGATURES | pymupdf.TEXT_PRESERVE_WHITESPACE |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
805 if args.convert_white: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
806 flags ^= pymupdf.TEXT_PRESERVE_WHITESPACE |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
807 if args.noligatures: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
808 flags ^= pymupdf.TEXT_PRESERVE_LIGATURES |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
809 if args.extra_spaces: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
810 flags ^= pymupdf.TEXT_INHIBIT_SPACES |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
811 func = { |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
812 "simple": page_simple, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
813 "blocks": page_blocksort, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
814 "layout": page_layout, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
815 } |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
816 for pno in pagel: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
817 page = doc[pno - 1] |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
818 func[args.mode]( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
819 page, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
820 textout, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
821 args.grid, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
822 args.fontsize, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
823 args.noformfeed, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
824 args.skip_empty, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
825 flags=flags, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
826 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
827 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
828 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
829 def _internal(args): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
830 pymupdf.message('This is from PyMuPDF message().') |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
831 pymupdf.log('This is from PyMuPDF log().') |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
832 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
833 def main(): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
834 """Define command configurations.""" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
835 parser = argparse.ArgumentParser( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
836 prog="pymupdf", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
837 description=mycenter("Basic PyMuPDF Functions"), |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
838 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
839 subps = parser.add_subparsers( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
840 title="Subcommands", help="Enter 'command -h' for subcommand specific help" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
841 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
842 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
843 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
844 # 'show' command |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
845 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
846 ps_show = subps.add_parser("show", description=mycenter("display PDF information")) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
847 ps_show.add_argument("input", type=str, help="PDF filename") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
848 ps_show.add_argument("-password", help="password") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
849 ps_show.add_argument("-catalog", action="store_true", help="show PDF catalog") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
850 ps_show.add_argument("-trailer", action="store_true", help="show PDF trailer") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
851 ps_show.add_argument("-metadata", action="store_true", help="show PDF metadata") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
852 ps_show.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
853 "-xrefs", type=str, help="show selected objects, format: 1,5-7,N" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
854 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
855 ps_show.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
856 "-pages", type=str, help="show selected pages, format: 1,5-7,50-N" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
857 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
858 ps_show.set_defaults(func=show) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
859 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
860 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
861 # 'clean' command |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
862 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
863 ps_clean = subps.add_parser( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
864 "clean", description=mycenter("optimize PDF, or create sub-PDF if pages given") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
865 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
866 ps_clean.add_argument("input", type=str, help="PDF filename") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
867 ps_clean.add_argument("output", type=str, help="output PDF filename") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
868 ps_clean.add_argument("-password", help="password") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
869 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
870 ps_clean.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
871 "-encryption", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
872 help="encryption method", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
873 choices=("keep", "none", "rc4-40", "rc4-128", "aes-128", "aes-256"), |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
874 default="none", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
875 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
876 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
877 ps_clean.add_argument("-owner", type=str, help="owner password") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
878 ps_clean.add_argument("-user", type=str, help="user password") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
879 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
880 ps_clean.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
881 "-garbage", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
882 type=int, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
883 help="garbage collection level", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
884 choices=range(5), |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
885 default=0, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
886 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
887 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
888 ps_clean.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
889 "-compress", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
890 action="store_true", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
891 default=False, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
892 help="compress (deflate) output", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
893 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
894 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
895 ps_clean.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
896 "-ascii", action="store_true", default=False, help="ASCII encode binary data" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
897 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
898 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
899 ps_clean.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
900 "-linear", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
901 action="store_true", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
902 default=False, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
903 help="format for fast web display", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
904 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
905 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
906 ps_clean.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
907 "-permission", type=int, default=-1, help="integer with permission levels" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
908 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
909 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
910 ps_clean.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
911 "-sanitize", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
912 action="store_true", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
913 default=False, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
914 help="sanitize / clean contents", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
915 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
916 ps_clean.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
917 "-pretty", action="store_true", default=False, help="prettify PDF structure" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
918 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
919 ps_clean.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
920 "-pages", help="output selected pages pages, format: 1,5-7,50-N" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
921 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
922 ps_clean.set_defaults(func=clean) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
923 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
924 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
925 # 'join' command |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
926 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
927 ps_join = subps.add_parser( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
928 "join", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
929 description=mycenter("join PDF documents"), |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
930 epilog="specify each input as 'filename[,password[,pages]]'", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
931 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
932 ps_join.add_argument("input", nargs="*", help="input filenames") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
933 ps_join.add_argument("-output", required=True, help="output filename") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
934 ps_join.set_defaults(func=doc_join) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
935 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
936 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
937 # 'extract' command |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
938 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
939 ps_extract = subps.add_parser( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
940 "extract", description=mycenter("extract images and fonts to disk") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
941 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
942 ps_extract.add_argument("input", type=str, help="PDF filename") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
943 ps_extract.add_argument("-images", action="store_true", help="extract images") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
944 ps_extract.add_argument("-fonts", action="store_true", help="extract fonts") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
945 ps_extract.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
946 "-output", help="folder to receive output, defaults to current" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
947 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
948 ps_extract.add_argument("-password", help="password") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
949 ps_extract.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
950 "-pages", type=str, help="consider these pages only, format: 1,5-7,50-N" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
951 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
952 ps_extract.set_defaults(func=extract_objects) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
953 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
954 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
955 # 'embed-info' |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
956 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
957 ps_show = subps.add_parser( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
958 "embed-info", description=mycenter("list embedded files") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
959 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
960 ps_show.add_argument("input", help="PDF filename") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
961 ps_show.add_argument("-name", help="if given, report only this one") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
962 ps_show.add_argument("-detail", action="store_true", help="detail information") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
963 ps_show.add_argument("-password", help="password") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
964 ps_show.set_defaults(func=embedded_list) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
965 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
966 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
967 # 'embed-add' command |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
968 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
969 ps_embed_add = subps.add_parser( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
970 "embed-add", description=mycenter("add embedded file") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
971 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
972 ps_embed_add.add_argument("input", help="PDF filename") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
973 ps_embed_add.add_argument("-password", help="password") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
974 ps_embed_add.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
975 "-output", help="output PDF filename, incremental save if none" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
976 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
977 ps_embed_add.add_argument("-name", required=True, help="name of new entry") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
978 ps_embed_add.add_argument("-path", required=True, help="path to data for new entry") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
979 ps_embed_add.add_argument("-desc", help="description of new entry") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
980 ps_embed_add.set_defaults(func=embedded_add) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
981 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
982 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
983 # 'embed-del' command |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
984 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
985 ps_embed_del = subps.add_parser( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
986 "embed-del", description=mycenter("delete embedded file") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
987 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
988 ps_embed_del.add_argument("input", help="PDF filename") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
989 ps_embed_del.add_argument("-password", help="password") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
990 ps_embed_del.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
991 "-output", help="output PDF filename, incremental save if none" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
992 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
993 ps_embed_del.add_argument("-name", required=True, help="name of entry to delete") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
994 ps_embed_del.set_defaults(func=embedded_del) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
995 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
996 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
997 # 'embed-upd' command |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
998 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
999 ps_embed_upd = subps.add_parser( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1000 "embed-upd", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1001 description=mycenter("update embedded file"), |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1002 epilog="except '-name' all parameters are optional", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1003 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1004 ps_embed_upd.add_argument("input", help="PDF filename") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1005 ps_embed_upd.add_argument("-name", required=True, help="name of entry") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1006 ps_embed_upd.add_argument("-password", help="password") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1007 ps_embed_upd.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1008 "-output", help="Output PDF filename, incremental save if none" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1009 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1010 ps_embed_upd.add_argument("-path", help="path to new data for entry") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1011 ps_embed_upd.add_argument("-filename", help="new filename to store in entry") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1012 ps_embed_upd.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1013 "-ufilename", help="new unicode filename to store in entry" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1014 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1015 ps_embed_upd.add_argument("-desc", help="new description to store in entry") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1016 ps_embed_upd.set_defaults(func=embedded_upd) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1017 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1018 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1019 # 'embed-extract' command |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1020 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1021 ps_embed_extract = subps.add_parser( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1022 "embed-extract", description=mycenter("extract embedded file to disk") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1023 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1024 ps_embed_extract.add_argument("input", type=str, help="PDF filename") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1025 ps_embed_extract.add_argument("-name", required=True, help="name of entry") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1026 ps_embed_extract.add_argument("-password", help="password") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1027 ps_embed_extract.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1028 "-output", help="output filename, default is stored name" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1029 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1030 ps_embed_extract.set_defaults(func=embedded_get) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1031 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1032 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1033 # 'embed-copy' command |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1034 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1035 ps_embed_copy = subps.add_parser( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1036 "embed-copy", description=mycenter("copy embedded files between PDFs") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1037 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1038 ps_embed_copy.add_argument("input", type=str, help="PDF to receive embedded files") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1039 ps_embed_copy.add_argument("-password", help="password of input") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1040 ps_embed_copy.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1041 "-output", help="output PDF, incremental save to 'input' if omitted" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1042 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1043 ps_embed_copy.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1044 "-source", required=True, help="copy embedded files from here" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1045 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1046 ps_embed_copy.add_argument("-pwdsource", help="password of 'source' PDF") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1047 ps_embed_copy.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1048 "-name", nargs="*", help="restrict copy to these entries" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1049 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1050 ps_embed_copy.set_defaults(func=embedded_copy) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1051 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1052 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1053 # 'textlayout' command |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1054 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1055 ps_gettext = subps.add_parser( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1056 "gettext", description=mycenter("extract text in various formatting modes") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1057 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1058 ps_gettext.add_argument("input", type=str, help="input document filename") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1059 ps_gettext.add_argument("-password", help="password for input document") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1060 ps_gettext.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1061 "-mode", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1062 type=str, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1063 help="mode: simple, block sort, or layout (default)", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1064 choices=("simple", "blocks", "layout"), |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1065 default="layout", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1066 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1067 ps_gettext.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1068 "-pages", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1069 type=str, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1070 help="select pages, format: 1,5-7,50-N", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1071 default="1-N", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1072 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1073 ps_gettext.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1074 "-noligatures", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1075 action="store_true", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1076 help="expand ligature characters (default False)", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1077 default=False, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1078 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1079 ps_gettext.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1080 "-convert-white", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1081 action="store_true", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1082 help="convert whitespace characters to white (default False)", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1083 default=False, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1084 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1085 ps_gettext.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1086 "-extra-spaces", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1087 action="store_true", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1088 help="fill gaps with spaces (default False)", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1089 default=False, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1090 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1091 ps_gettext.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1092 "-noformfeed", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1093 action="store_true", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1094 help="write linefeeds, no formfeeds (default False)", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1095 default=False, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1096 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1097 ps_gettext.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1098 "-skip-empty", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1099 action="store_true", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1100 help="suppress pages with no text (default False)", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1101 default=False, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1102 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1103 ps_gettext.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1104 "-output", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1105 help="store text in this file (default inputfilename.txt)", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1106 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1107 ps_gettext.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1108 "-grid", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1109 type=float, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1110 help="merge lines if closer than this (default 2)", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1111 default=2, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1112 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1113 ps_gettext.add_argument( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1114 "-fontsize", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1115 type=float, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1116 help="only include text with a larger fontsize (default 3)", |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1117 default=3, |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1118 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1119 ps_gettext.set_defaults(func=gettext) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1120 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1121 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1122 # '_internal' command |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1123 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1124 ps_internal = subps.add_parser( |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1125 "internal", description=mycenter("internal testing") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1126 ) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1127 ps_internal.set_defaults(func=_internal) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1128 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1129 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1130 # start program |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1131 # ------------------------------------------------------------------------- |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1132 args = parser.parse_args() # create parameter arguments class |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1133 if not hasattr(args, "func"): # no function selected |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1134 parser.print_help() # so print top level help |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1135 else: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1136 args.func(args) # execute requested command |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1137 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1138 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1139 if __name__ == "__main__": |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1140 main() |
