convert-stream 1.2.3__tar.gz → 1.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of convert-stream might be problematic. Click here for more details.
- {convert_stream-1.2.3 → convert_stream-1.3.1}/PKG-INFO +9 -9
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/__init__.py +5 -6
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/__main__.py +2 -11
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/_version.py +2 -2
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/convert.py +242 -86
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/image_to_pdf.py +88 -36
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/models/__init__.py +1 -2
- convert_stream-1.3.1/convert_stream/models/models_pdf.py +98 -0
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/pdf_compress.py +2 -2
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/pdf_document.py +397 -207
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/pdf_page.py +3 -2
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/pdf_to_images.py +61 -28
- convert_stream-1.3.1/convert_stream/progress/__init__.py +1 -0
- convert_stream-1.3.1/convert_stream/progress/progress_bar.py +24 -0
- convert_stream-1.3.1/convert_stream/table_files.py +215 -0
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream.egg-info/PKG-INFO +9 -9
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream.egg-info/SOURCES.txt +1 -0
- convert_stream-1.3.1/convert_stream.egg-info/requires.txt +9 -0
- {convert_stream-1.2.3 → convert_stream-1.3.1}/pyproject.toml +10 -9
- convert_stream-1.2.3/convert_stream/models/models_pdf.py +0 -372
- convert_stream-1.2.3/convert_stream/progress/__init__.py +0 -0
- convert_stream-1.2.3/convert_stream/progress/progress_bar.py +0 -157
- convert_stream-1.2.3/convert_stream.egg-info/requires.txt +0 -9
- {convert_stream-1.2.3 → convert_stream-1.3.1}/README.md +0 -0
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/imagelib.py +0 -0
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/models/m_text.py +0 -0
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/models/models_image.py +0 -0
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/text.py +0 -0
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream.egg-info/dependency_links.txt +0 -0
- {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream.egg-info/top_level.txt +0 -0
- {convert_stream-1.2.3 → convert_stream-1.3.1}/setup.cfg +0 -0
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: convert_stream
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.1
|
|
4
4
|
Summary: Manipulação de documentos PDF e Imagens. Converter, Ler, rotacionar exportar etc.
|
|
5
5
|
Author: Bruno Chaves
|
|
6
6
|
Requires-Python: >=3.11
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Requires-Dist: soup_files
|
|
9
|
-
Requires-Dist: PyPDF2
|
|
10
|
-
Requires-Dist: PyMuPDF
|
|
11
|
-
Requires-Dist: reportlab
|
|
12
|
-
Requires-Dist: openpyxl
|
|
13
|
-
Requires-Dist: pandas
|
|
14
|
-
Requires-Dist: Pillow
|
|
15
|
-
Requires-Dist: opencv-python
|
|
16
|
-
Requires-Dist: requests
|
|
9
|
+
Requires-Dist: PyPDF2
|
|
10
|
+
Requires-Dist: PyMuPDF
|
|
11
|
+
Requires-Dist: reportlab
|
|
12
|
+
Requires-Dist: openpyxl
|
|
13
|
+
Requires-Dist: pandas
|
|
14
|
+
Requires-Dist: Pillow>=11.3.0
|
|
15
|
+
Requires-Dist: opencv-python
|
|
16
|
+
Requires-Dist: requests>=2.32.4
|
|
17
17
|
|
|
18
18
|
# Configuração instalação:
|
|
19
19
|
pip3 install -r requirements.txt
|
|
@@ -12,17 +12,16 @@ from .text import (
|
|
|
12
12
|
LibraryDates, print_title, print_line, save_data
|
|
13
13
|
)
|
|
14
14
|
|
|
15
|
-
from
|
|
16
|
-
|
|
17
|
-
ProgressBarTqdm, ABCProgressBar
|
|
18
|
-
)
|
|
19
|
-
|
|
15
|
+
from .models import LibConvertPDF, LibraryPDF, LibImageToPDF
|
|
16
|
+
from .progress.progress_bar import CreatePbar
|
|
20
17
|
from .models.models_pdf import LibraryPDF
|
|
21
18
|
from .imagelib import ImageObject, ImageInverColor, LibraryImage
|
|
22
19
|
from .pdf_page import PageDocumentPdf, PagePdfFitz, PagePyPdf2
|
|
23
20
|
from .pdf_document import DocumentPdf, FileDocumentPdf
|
|
24
21
|
from .pdf_to_images import ConvertPdfToImage
|
|
25
|
-
from .image_to_pdf import
|
|
22
|
+
from .image_to_pdf import ImageToPdf
|
|
26
23
|
from .convert import PdfStream, ImageStream, get_data_from_pdfs
|
|
27
24
|
from .pdf_compress import CompressDocument
|
|
25
|
+
from .table_files import FileToTable
|
|
26
|
+
|
|
28
27
|
|
|
@@ -18,23 +18,14 @@ this_file = os.path.abspath(os.path.relpath(__file__))
|
|
|
18
18
|
dir_of_project = os.path.dirname(this_file)
|
|
19
19
|
sys.path.insert(0, dir_of_project)
|
|
20
20
|
|
|
21
|
+
|
|
21
22
|
from convert_stream import (
|
|
22
23
|
version, __module_name__, __modify_date__, print_title
|
|
23
24
|
)
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
def test():
|
|
27
|
-
|
|
28
|
-
FileDocumentPdf, CompressDocument, DocumentPdf, LibraryPDF,
|
|
29
|
-
PdfStream, ImageStream, PageDocumentPdf,
|
|
30
|
-
)
|
|
31
|
-
from soup_files import (
|
|
32
|
-
Directory, File, UserFileSystem, InputFiles
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
outdir: Directory = UserFileSystem().userDownloads.concat('output', create=True)
|
|
36
|
-
indir: Directory = UserFileSystem().userDownloads.concat('TESTE-PDF', create=True)
|
|
37
|
-
base = indir.join_file('base.pdf')
|
|
28
|
+
pass
|
|
38
29
|
|
|
39
30
|
|
|
40
31
|
def main():
|
|
@@ -2,22 +2,125 @@
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
from typing import List
|
|
5
|
+
from abc import ABC, abstractmethod
|
|
5
6
|
import pandas
|
|
6
7
|
|
|
7
|
-
from convert_stream.models import
|
|
8
|
+
from convert_stream.models import LibraryImage, LibraryPDF, LibImageToPDF, LibConvertPDF
|
|
8
9
|
from convert_stream.imagelib import ImageObject
|
|
9
|
-
from convert_stream.progress.progress_bar import
|
|
10
|
+
from convert_stream.progress.progress_bar import CreatePbar
|
|
10
11
|
from convert_stream.pdf_page import PageDocumentPdf
|
|
11
12
|
from convert_stream.pdf_document import DocumentPdf
|
|
12
13
|
from convert_stream.pdf_to_images import ConvertPdfToImage
|
|
13
|
-
from convert_stream.image_to_pdf import
|
|
14
|
-
from soup_files import File, Directory
|
|
15
|
-
|
|
14
|
+
from convert_stream.image_to_pdf import ImageToPdf
|
|
15
|
+
from soup_files import File, Directory, ProgressBarAdapter, InputFiles, LibraryDocs
|
|
16
|
+
|
|
17
|
+
|
|
16
18
|
#==================================================================#
|
|
17
19
|
# PDF
|
|
18
20
|
#==================================================================#
|
|
19
21
|
|
|
20
22
|
|
|
23
|
+
class ABCDocumentStream(ABC):
|
|
24
|
+
"""
|
|
25
|
+
Objeto para manipular a exportação de dados PDF
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self, *,
|
|
30
|
+
library_pdf: LibraryPDF = LibraryPDF.FITZ,
|
|
31
|
+
library_image: LibraryImage = LibraryImage.OPENCV,
|
|
32
|
+
progress_bar: ProgressBarAdapter = CreatePbar().get(),
|
|
33
|
+
):
|
|
34
|
+
self.library_pdf: LibraryPDF = library_pdf
|
|
35
|
+
self.liabrary_image: LibraryImage = library_image
|
|
36
|
+
self.progress_bar: ProgressBarAdapter = progress_bar
|
|
37
|
+
|
|
38
|
+
@abstractmethod
|
|
39
|
+
def is_null(self) -> bool:
|
|
40
|
+
pass
|
|
41
|
+
|
|
42
|
+
@abstractmethod
|
|
43
|
+
def clear(self):
|
|
44
|
+
pass
|
|
45
|
+
|
|
46
|
+
@abstractmethod
|
|
47
|
+
def to_file_pdf(self, f: File):
|
|
48
|
+
"""
|
|
49
|
+
Exporta os dados para um arquivo PDF no disco.
|
|
50
|
+
"""
|
|
51
|
+
pass
|
|
52
|
+
|
|
53
|
+
@abstractmethod
|
|
54
|
+
def to_files_pdf(self, outdir: Directory, *, prefix='pag'):
|
|
55
|
+
"""Exporta cada página para um novo arquivo PDF no disco"""
|
|
56
|
+
pass
|
|
57
|
+
|
|
58
|
+
@abstractmethod
|
|
59
|
+
def to_files_image(self, d: Directory, *, prefix: str = 'página-para-imagem'):
|
|
60
|
+
"""
|
|
61
|
+
Exporta cada página PDF como um arquivo de imagem.
|
|
62
|
+
"""
|
|
63
|
+
pass
|
|
64
|
+
|
|
65
|
+
@abstractmethod
|
|
66
|
+
def to_images(self) -> List[ImageObject]:
|
|
67
|
+
"""Retorna uma lista de imagens, dos documentos adicionados."""
|
|
68
|
+
pass
|
|
69
|
+
|
|
70
|
+
@abstractmethod
|
|
71
|
+
def to_document(self) -> DocumentPdf:
|
|
72
|
+
"""Converte os itens adicionados em documento"""
|
|
73
|
+
pass
|
|
74
|
+
|
|
75
|
+
def inner_images(self) -> List[ImageObject]:
|
|
76
|
+
"""
|
|
77
|
+
Retorna uma lista com todas as imagens presentes em todas as páginas
|
|
78
|
+
"""
|
|
79
|
+
pass
|
|
80
|
+
|
|
81
|
+
@abstractmethod
|
|
82
|
+
def inner_images_to_files(self, d: Directory, prefix: str = 'página-para-imagens') -> None:
|
|
83
|
+
"""
|
|
84
|
+
Salva todas as imagens presentes nas páginas em arquivos de imagem.
|
|
85
|
+
"""
|
|
86
|
+
pass
|
|
87
|
+
|
|
88
|
+
@abstractmethod
|
|
89
|
+
def add_page(self, p: PageDocumentPdf):
|
|
90
|
+
"""Adiciona uma página PDF"""
|
|
91
|
+
pass
|
|
92
|
+
|
|
93
|
+
@abstractmethod
|
|
94
|
+
def add_pages(self, pages: List[PageDocumentPdf]):
|
|
95
|
+
pass
|
|
96
|
+
|
|
97
|
+
@abstractmethod
|
|
98
|
+
def add_page_pdf_bytes(self, bt: bytes):
|
|
99
|
+
"""Adicona os bytes de uma página PDF."""
|
|
100
|
+
pass
|
|
101
|
+
|
|
102
|
+
@abstractmethod
|
|
103
|
+
def add_file_pdf(self, f: File):
|
|
104
|
+
pass
|
|
105
|
+
|
|
106
|
+
@abstractmethod
|
|
107
|
+
def add_files_pdf(self, files: List[File]):
|
|
108
|
+
pass
|
|
109
|
+
|
|
110
|
+
@abstractmethod
|
|
111
|
+
def add_document(self, doc: DocumentPdf):
|
|
112
|
+
pass
|
|
113
|
+
|
|
114
|
+
@abstractmethod
|
|
115
|
+
def add_image(self, image: ImageObject):
|
|
116
|
+
pass
|
|
117
|
+
|
|
118
|
+
@abstractmethod
|
|
119
|
+
def set_paisagem(self):
|
|
120
|
+
"""Define todas as páginas como paisagem."""
|
|
121
|
+
pass
|
|
122
|
+
|
|
123
|
+
|
|
21
124
|
class PdfStream(ABCDocumentStream):
|
|
22
125
|
"""
|
|
23
126
|
Objeto para manipular a exportação de dados PDF
|
|
@@ -27,35 +130,43 @@ class PdfStream(ABCDocumentStream):
|
|
|
27
130
|
self, *,
|
|
28
131
|
library_pdf: LibraryPDF = LibraryPDF.FITZ,
|
|
29
132
|
library_image: LibraryImage = LibraryImage.OPENCV,
|
|
30
|
-
|
|
133
|
+
lib_image_to_pdf: LibImageToPDF = LibImageToPDF.PILPDF,
|
|
134
|
+
progress_bar: ProgressBarAdapter = CreatePbar().get(),
|
|
135
|
+
maximum_pages: int = 3500
|
|
31
136
|
):
|
|
32
137
|
super().__init__(library_pdf=library_pdf, library_image=library_image, progress_bar=progress_bar)
|
|
33
|
-
self.num_pages: int = 0
|
|
34
138
|
self.library_pdf: LibraryPDF = library_pdf
|
|
35
139
|
self.library_image: LibraryImage = library_image
|
|
36
|
-
self.
|
|
37
|
-
self.
|
|
38
|
-
|
|
140
|
+
self.lib_image_to_pdf: LibImageToPDF = lib_image_to_pdf
|
|
141
|
+
self.document: DocumentPdf = DocumentPdf(
|
|
142
|
+
self.library_pdf, progress_bar=progress_bar, maximum_pages=maximum_pages
|
|
39
143
|
)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
self.
|
|
43
|
-
|
|
44
|
-
|
|
144
|
+
#
|
|
145
|
+
self.convert_pdf_to_images = ConvertPdfToImage.create(
|
|
146
|
+
self.library_image,
|
|
147
|
+
pbar=self.progress_bar,
|
|
148
|
+
lib_convert_pdf=LibConvertPDF.FITZ
|
|
149
|
+
)
|
|
150
|
+
if self.lib_image_to_pdf == LibImageToPDF.CANVAS:
|
|
151
|
+
self.convert_images_to_pdf: ImageToPdf = ImageToPdf.create_from_canvas(self.library_image)
|
|
152
|
+
elif self.lib_image_to_pdf == LibImageToPDF.PILPDF:
|
|
153
|
+
self.convert_images_to_pdf: ImageToPdf = ImageToPdf.create_from_pil(LibraryImage.PIL)
|
|
154
|
+
elif self.lib_image_to_pdf == LibImageToPDF.FITZ:
|
|
155
|
+
self.convert_images_to_pdf: ImageToPdf = ImageToPdf.create_from_fitz(LibraryImage.PIL)
|
|
45
156
|
else:
|
|
46
|
-
self.convert_images_to_pdf:
|
|
157
|
+
self.convert_images_to_pdf: ImageToPdf = ImageToPdf.create_from_pil(self.library_image)
|
|
47
158
|
|
|
48
159
|
@property
|
|
49
160
|
def num_pages(self) -> int:
|
|
50
|
-
return self.document.
|
|
161
|
+
return self.document.get_num_pages()
|
|
51
162
|
|
|
52
163
|
@num_pages.setter
|
|
53
164
|
def num_pages(self, num: int):
|
|
54
|
-
|
|
165
|
+
self.document.set_num_pages(num)
|
|
55
166
|
|
|
56
167
|
@property
|
|
57
168
|
def pages(self) -> List[PageDocumentPdf]:
|
|
58
|
-
return self.document.
|
|
169
|
+
return self.document.get_pages()
|
|
59
170
|
|
|
60
171
|
@pages.setter
|
|
61
172
|
def pages(self, new: List[PageDocumentPdf]):
|
|
@@ -90,21 +201,30 @@ class PdfStream(ABCDocumentStream):
|
|
|
90
201
|
self.add_page(p)
|
|
91
202
|
self.progress_bar.stop()
|
|
92
203
|
|
|
204
|
+
def add_folder(
|
|
205
|
+
self, d: Directory, *,
|
|
206
|
+
file_type: LibraryDocs = LibraryDocs.PDF,
|
|
207
|
+
max_files: int = 4000
|
|
208
|
+
):
|
|
209
|
+
files = InputFiles(d, maxFiles=max_files).get_files(file_type=file_type)
|
|
210
|
+
if file_type == LibraryDocs.PDF:
|
|
211
|
+
self.add_files_pdf(files)
|
|
212
|
+
elif file_type == LibraryDocs.IMAGE:
|
|
213
|
+
self.add_images([ImageObject.create_from_file(f) for f in files])
|
|
214
|
+
|
|
93
215
|
def add_page_pdf_bytes(self, bt: bytes):
|
|
94
216
|
_page = PageDocumentPdf.create_from_page_bytes(bt, library=self.library_pdf)
|
|
95
217
|
self.add_page(_page)
|
|
96
218
|
|
|
97
219
|
def add_file_pdf(self, f: File):
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
self.add_pages(doc.pages)
|
|
101
|
-
|
|
220
|
+
self.document.add_file_pdf(f)
|
|
221
|
+
|
|
102
222
|
def add_files_pdf(self, files: List[File]):
|
|
103
223
|
for f in files:
|
|
104
224
|
self.add_file_pdf(f)
|
|
105
225
|
|
|
106
|
-
def add_document(self, doc:DocumentPdf):
|
|
107
|
-
self.add_pages(doc.
|
|
226
|
+
def add_document(self, doc: DocumentPdf):
|
|
227
|
+
self.add_pages(doc.get_pages())
|
|
108
228
|
|
|
109
229
|
def add_image(self, image: ImageObject):
|
|
110
230
|
pg: PageDocumentPdf = self.convert_images_to_pdf.from_image(image)
|
|
@@ -131,35 +251,33 @@ class PdfStream(ABCDocumentStream):
|
|
|
131
251
|
)
|
|
132
252
|
docpdf.to_file_pdf(f)
|
|
133
253
|
|
|
134
|
-
def to_files_pdf(self, outdir: Directory, *, prefix='documento
|
|
254
|
+
def to_files_pdf(self, outdir: Directory, *, prefix='documento', replace: bool = False):
|
|
135
255
|
if self.is_null():
|
|
136
256
|
print(
|
|
137
257
|
f'{__class__.__name__} Adicione páginas ao documento para prosseguir!'
|
|
138
258
|
)
|
|
139
259
|
return
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
filename: str = f'{prefix}-{num+1}.pdf'
|
|
144
|
-
self.progress_bar.update_text(
|
|
145
|
-
f'Exportando página: {p.page_number} de {self.num_pages} | [{filename}]'
|
|
146
|
-
)
|
|
147
|
-
_document.add_page(p)
|
|
148
|
-
_document.to_file_pdf(outdir.join_file(filename))
|
|
149
|
-
_document.clear()
|
|
150
|
-
|
|
151
|
-
def to_files_image(self, d: Directory, *, prefix: str = 'pdf-para-imagem'):
|
|
260
|
+
self.document.to_files_pdf(outdir, prefix, replace=replace)
|
|
261
|
+
|
|
262
|
+
def to_files_image(self, d: Directory, *, prefix: str = 'pdf-para-imagem', replace: bool = False):
|
|
152
263
|
"""
|
|
153
264
|
Exporta cada página PDF como um arquivo de imagem.
|
|
154
265
|
"""
|
|
155
266
|
d.mkdir()
|
|
267
|
+
self.progress_bar.start()
|
|
156
268
|
for num, page in enumerate(self.pages):
|
|
157
|
-
|
|
269
|
+
output_file: File = d.join_file(f'{prefix}_{page.page_number}.png')
|
|
270
|
+
if not replace:
|
|
271
|
+
if output_file.exists():
|
|
272
|
+
print(f'[A IMAGEM JÁ EXISTE]: {output_file.absolute()}')
|
|
273
|
+
continue
|
|
158
274
|
img = self.convert_pdf_to_images.from_page_pdf(page)
|
|
159
275
|
self.progress_bar.update_text(
|
|
160
|
-
f'Exportando página PDF para imagem: [{num+1} de {self.num_pages}] {
|
|
276
|
+
f'Exportando página PDF para imagem: [{num+1} de {self.num_pages}] {output_file.basename()}'
|
|
161
277
|
)
|
|
162
|
-
img.to_file(
|
|
278
|
+
img.to_file(output_file)
|
|
279
|
+
print()
|
|
280
|
+
self.progress_bar.stop()
|
|
163
281
|
|
|
164
282
|
def to_images(self) -> List[ImageObject]:
|
|
165
283
|
images_obj: List[ImageObject] = []
|
|
@@ -170,7 +288,10 @@ class PdfStream(ABCDocumentStream):
|
|
|
170
288
|
|
|
171
289
|
def to_document(self) -> DocumentPdf:
|
|
172
290
|
return DocumentPdf(
|
|
173
|
-
self.library_pdf,
|
|
291
|
+
self.library_pdf,
|
|
292
|
+
progress_bar=self.progress_bar,
|
|
293
|
+
pages=self.pages,
|
|
294
|
+
maximum_pages=self.document.get_maximum_pages(),
|
|
174
295
|
)
|
|
175
296
|
|
|
176
297
|
def inner_images(self) -> List[ImageObject]:
|
|
@@ -206,36 +327,39 @@ class PdfStream(ABCDocumentStream):
|
|
|
206
327
|
# Imagens
|
|
207
328
|
#==================================================================#
|
|
208
329
|
|
|
330
|
+
|
|
209
331
|
class ImageStream(object):
|
|
332
|
+
"""
|
|
333
|
+
Conversão de imagens.
|
|
334
|
+
"""
|
|
210
335
|
def __init__(
|
|
211
336
|
self, *,
|
|
212
337
|
library_image: LibraryImage = LibraryImage.OPENCV,
|
|
213
|
-
library_pdf: LibraryPDF = LibraryPDF.
|
|
214
|
-
|
|
338
|
+
library_pdf: LibraryPDF = LibraryPDF.FITZ,
|
|
339
|
+
lib_image_to_pdf: LibImageToPDF = LibImageToPDF.FITZ,
|
|
340
|
+
progress_bar: ProgressBarAdapter = CreatePbar().get(),
|
|
215
341
|
):
|
|
216
|
-
self.
|
|
217
|
-
self.num_images: int = len(self.
|
|
218
|
-
#self.progress_bar: ProgressBarAdapter = progress_bar
|
|
342
|
+
self._images: List[ImageObject] = []
|
|
343
|
+
self.num_images: int = len(self._images)
|
|
219
344
|
self.library_image: LibraryImage = library_image
|
|
220
345
|
self.library_pdf: LibraryPDF = library_pdf
|
|
346
|
+
self.lib_image_to_pdf: LibImageToPDF = lib_image_to_pdf
|
|
347
|
+
|
|
348
|
+
self.convert_pdf_to_images = ConvertPdfToImage.create(
|
|
349
|
+
self.library_image,
|
|
350
|
+
pbar=progress_bar,
|
|
351
|
+
lib_convert_pdf=LibConvertPDF.FITZ
|
|
352
|
+
)
|
|
221
353
|
|
|
222
|
-
# Objeto para converter
|
|
223
|
-
if
|
|
224
|
-
self.convert_image_to_pdf:
|
|
225
|
-
elif
|
|
226
|
-
self.convert_image_to_pdf:
|
|
227
|
-
elif
|
|
228
|
-
self.convert_image_to_pdf:
|
|
354
|
+
# Objeto para converter PDF em imagem.
|
|
355
|
+
if self.lib_image_to_pdf == LibImageToPDF.PILPDF:
|
|
356
|
+
self.convert_image_to_pdf: ImageToPdf = ImageToPdf.create_from_pil(library_image)
|
|
357
|
+
elif self.lib_image_to_pdf == LibImageToPDF.FITZ:
|
|
358
|
+
self.convert_image_to_pdf: ImageToPdf = ImageToPdf.create_from_fitz(library_image)
|
|
359
|
+
elif self.lib_image_to_pdf == LibImageToPDF.CANVAS:
|
|
360
|
+
self.convert_image_to_pdf: ImageToPdf = ImageToPdf.create_from_canvas(library_image)
|
|
229
361
|
else:
|
|
230
|
-
raise
|
|
231
|
-
|
|
232
|
-
# Objeto para converter PDF em imagem
|
|
233
|
-
self.convert_pdf_to_images: ConvertPdfToImage = ConvertPdfToImage(
|
|
234
|
-
library_pdf=LibraryPDF.FITZ,
|
|
235
|
-
library_image=library_image,
|
|
236
|
-
dpi=150,
|
|
237
|
-
progress_bar=progress_bar,
|
|
238
|
-
)
|
|
362
|
+
raise NotImplementedError()
|
|
239
363
|
|
|
240
364
|
@property
|
|
241
365
|
def progress_bar(self) -> ProgressBarAdapter:
|
|
@@ -243,7 +367,7 @@ class ImageStream(object):
|
|
|
243
367
|
|
|
244
368
|
@property
|
|
245
369
|
def images(self) -> List[ImageObject]:
|
|
246
|
-
return self.
|
|
370
|
+
return self._images
|
|
247
371
|
|
|
248
372
|
@images.setter
|
|
249
373
|
def images(self, imgs: List[ImageObject]) -> None:
|
|
@@ -257,17 +381,13 @@ class ImageStream(object):
|
|
|
257
381
|
def add_image(self, img: ImageObject) -> None:
|
|
258
382
|
if not isinstance(img, ImageObject):
|
|
259
383
|
return
|
|
260
|
-
self.
|
|
384
|
+
self._images.append(img)
|
|
261
385
|
self.num_images += 1
|
|
262
386
|
|
|
263
387
|
def add_images(self, images: List[ImageObject]):
|
|
264
388
|
maxnum: int = len(images)
|
|
265
389
|
self.progress_bar.start()
|
|
266
390
|
for num, i in enumerate(images):
|
|
267
|
-
self.progress_bar.update(
|
|
268
|
-
((num+1)/maxnum) * 100,
|
|
269
|
-
f'Adicionando imagens: [{num+1} de {maxnum}]'
|
|
270
|
-
)
|
|
271
391
|
self.add_image(i)
|
|
272
392
|
self.progress_bar.stop()
|
|
273
393
|
|
|
@@ -278,11 +398,9 @@ class ImageStream(object):
|
|
|
278
398
|
def add_files_image(self, files: List[File]):
|
|
279
399
|
maxnum: int = len(files)
|
|
280
400
|
for num, f in enumerate(files):
|
|
281
|
-
p = ((num + 1) / maxnum) * 100
|
|
282
|
-
#print(p)
|
|
283
401
|
self.progress_bar.update(
|
|
284
|
-
|
|
285
|
-
f'Adicionando
|
|
402
|
+
((num + 1) / maxnum) * 100,
|
|
403
|
+
f'Adicionando imagens: [{num + 1} de {maxnum}] {f.basename()}'
|
|
286
404
|
)
|
|
287
405
|
self.add_file_image(f)
|
|
288
406
|
|
|
@@ -292,60 +410,98 @@ class ImageStream(object):
|
|
|
292
410
|
return False
|
|
293
411
|
|
|
294
412
|
def clear(self):
|
|
295
|
-
self.
|
|
413
|
+
self._images.clear()
|
|
296
414
|
self.num_images = 0
|
|
297
415
|
|
|
298
|
-
def to_files_image(self, d: Directory, prefix: str = 'imagem'):
|
|
416
|
+
def to_files_image(self, d: Directory, prefix: str = 'imagem', *, replace: bool = False):
|
|
417
|
+
"""
|
|
418
|
+
@param replace: substituir arquivos existentes no destino.
|
|
419
|
+
@param d: Diretório para exportar as imagens
|
|
420
|
+
@param prefix: prefixo para o nome das imagens
|
|
421
|
+
@return: None
|
|
422
|
+
|
|
423
|
+
@type d: Directory
|
|
424
|
+
@type prefix: str
|
|
425
|
+
@rtype: None
|
|
426
|
+
"""
|
|
299
427
|
d.mkdir()
|
|
300
428
|
self.progress_bar.start()
|
|
301
429
|
for num, image in enumerate(self.images):
|
|
302
430
|
filename = f'{prefix}-{num+1}.png'
|
|
431
|
+
output_file: File = d.join_file(filename)
|
|
432
|
+
if not replace:
|
|
433
|
+
if output_file.exists():
|
|
434
|
+
continue
|
|
303
435
|
self.progress_bar.update(
|
|
304
436
|
((num+1)/self.num_images) * 100,
|
|
305
437
|
f'Exportando imagem: {num+1} de {self.num_images} [{filename}]'
|
|
306
438
|
)
|
|
307
|
-
image.to_file(
|
|
439
|
+
image.to_file(output_file)
|
|
308
440
|
self.progress_bar.stop()
|
|
309
441
|
|
|
310
442
|
def to_pages_pdf(self) -> List[PageDocumentPdf]:
|
|
311
443
|
if self.is_null():
|
|
312
444
|
print(f'{__class__.__name__} Adicione imagens para prosseguir!')
|
|
313
445
|
return []
|
|
314
|
-
new_pages = []
|
|
446
|
+
new_pages: List[PageDocumentPdf] = []
|
|
315
447
|
maxnum: int = len(self.images)
|
|
316
448
|
self.progress_bar.start()
|
|
317
449
|
for num, image in enumerate(self.images):
|
|
318
450
|
self.progress_bar.update(
|
|
319
451
|
((num + 1) / maxnum) * 100,
|
|
320
|
-
f'
|
|
452
|
+
f'Criando páginas PDF: [{num + 1} de {maxnum}]'
|
|
321
453
|
)
|
|
322
|
-
|
|
454
|
+
im = self.convert_image_to_pdf.from_image(image)
|
|
455
|
+
new_pages.append(im)
|
|
323
456
|
self.progress_bar.stop()
|
|
324
457
|
return new_pages
|
|
325
|
-
|
|
458
|
+
|
|
459
|
+
def to_documet(self) -> DocumentPdf:
|
|
460
|
+
return DocumentPdf(progress_bar=self.progress_bar, pages=self.to_pages_pdf())
|
|
461
|
+
|
|
326
462
|
def set_paisagem(self):
|
|
327
463
|
for num, img in enumerate(self.images):
|
|
328
464
|
self.images[num].set_paisagem()
|
|
329
465
|
|
|
330
466
|
def set_gaussian_blur(self):
|
|
467
|
+
self.progress_bar.start()
|
|
331
468
|
for num, img in enumerate(self.images):
|
|
332
|
-
|
|
469
|
+
self.progress_bar.update(
|
|
470
|
+
((num+1) / self.num_images) * 100,
|
|
471
|
+
f'Removendo o ruido [{num+1} de {self.num_images}]'
|
|
472
|
+
)
|
|
333
473
|
self.images[num].set_gaussian()
|
|
474
|
+
self.progress_bar.stop()
|
|
334
475
|
|
|
335
476
|
def set_backgroud_black(self):
|
|
477
|
+
self.progress_bar.start()
|
|
336
478
|
for num, img in enumerate(self.images):
|
|
337
|
-
|
|
479
|
+
self.progress_bar.update(
|
|
480
|
+
((num + 1) / self.num_images) * 100,
|
|
481
|
+
f'Removendo o ruido [{num + 1} de {self.num_images}]'
|
|
482
|
+
)
|
|
338
483
|
self.images[num].set_background_black()
|
|
339
|
-
|
|
484
|
+
self.progress_bar.stop()
|
|
485
|
+
|
|
340
486
|
def set_background_gray(self):
|
|
487
|
+
self.progress_bar.start()
|
|
341
488
|
for num, img in enumerate(self.images):
|
|
342
|
-
|
|
489
|
+
self.progress_bar.update(
|
|
490
|
+
((num + 1) / self.num_images) * 100,
|
|
491
|
+
f'Removendo o ruido [{num + 1} de {self.num_images}]'
|
|
492
|
+
)
|
|
343
493
|
self.images[num].set_background_gray()
|
|
494
|
+
self.progress_bar.stop()
|
|
344
495
|
|
|
345
496
|
def set_optimize(self):
|
|
497
|
+
self.progress_bar.start()
|
|
346
498
|
for num, img in enumerate(self.images):
|
|
347
|
-
|
|
499
|
+
self.progress_bar.update(
|
|
500
|
+
((num + 1) / self.num_images) * 100,
|
|
501
|
+
f'Otimizando imagem [{num + 1} de {self.num_images}]'
|
|
502
|
+
)
|
|
348
503
|
self.images[num].set_optimize()
|
|
504
|
+
self.progress_bar.stop()
|
|
349
505
|
|
|
350
506
|
|
|
351
507
|
def get_data_from_pdfs(*, files_pdf: List[File]) -> pandas.DataFrame:
|
|
@@ -361,7 +517,7 @@ def get_data_from_pdfs(*, files_pdf: List[File]) -> pandas.DataFrame:
|
|
|
361
517
|
for file in files_pdf:
|
|
362
518
|
doc.add_file_pdf(file)
|
|
363
519
|
for page in doc.pages:
|
|
364
|
-
text =
|
|
520
|
+
text = page.to_string()
|
|
365
521
|
if (text is not None) and (text != ''):
|
|
366
522
|
values.extend(text.split('\n'))
|
|
367
523
|
data.append(
|