convert-stream 1.2.1__tar.gz → 1.3__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.
Files changed (31) hide show
  1. {convert_stream-1.2.1 → convert_stream-1.3}/PKG-INFO +1 -1
  2. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/__init__.py +5 -6
  3. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/__main__.py +2 -8
  4. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/_version.py +3 -3
  5. convert_stream-1.3/convert_stream/convert.py +537 -0
  6. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/image_to_pdf.py +88 -36
  7. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/imagelib.py +100 -60
  8. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/models/__init__.py +1 -2
  9. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/models/m_text.py +2 -2
  10. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/models/models_image.py +3 -1
  11. convert_stream-1.3/convert_stream/models/models_pdf.py +98 -0
  12. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/pdf_compress.py +2 -2
  13. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/pdf_document.py +412 -215
  14. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/pdf_page.py +74 -56
  15. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/pdf_to_images.py +61 -28
  16. convert_stream-1.3/convert_stream/progress/__init__.py +1 -0
  17. convert_stream-1.3/convert_stream/progress/progress_bar.py +24 -0
  18. convert_stream-1.3/convert_stream/table_files.py +215 -0
  19. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream.egg-info/PKG-INFO +1 -1
  20. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream.egg-info/SOURCES.txt +1 -0
  21. {convert_stream-1.2.1 → convert_stream-1.3}/pyproject.toml +1 -1
  22. convert_stream-1.2.1/convert_stream/convert.py +0 -339
  23. convert_stream-1.2.1/convert_stream/models/models_pdf.py +0 -381
  24. convert_stream-1.2.1/convert_stream/progress/__init__.py +0 -0
  25. convert_stream-1.2.1/convert_stream/progress/progress_bar.py +0 -156
  26. {convert_stream-1.2.1 → convert_stream-1.3}/README.md +0 -0
  27. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream/text.py +0 -0
  28. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream.egg-info/dependency_links.txt +0 -0
  29. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream.egg-info/requires.txt +0 -0
  30. {convert_stream-1.2.1 → convert_stream-1.3}/convert_stream.egg-info/top_level.txt +0 -0
  31. {convert_stream-1.2.1 → convert_stream-1.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: convert_stream
3
- Version: 1.2.1
3
+ Version: 1.3
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
@@ -12,17 +12,16 @@ from .text import (
12
12
  LibraryDates, print_title, print_line, save_data
13
13
  )
14
14
 
15
- from convert_stream.progress.progress_bar import (
16
- ProgressBarAdapter, ProgressBarSimple,
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 ImageConvertPdf
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,20 +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
- from convert_stream import FileDocumentPdf, CompressDocument, DocumentPdf
28
- from soup_files import Directory, File, UserFileSystem
29
-
30
- outdir = UserFileSystem().userDownloads.concat('output', create=True)
31
- base = UserFileSystem().userDownloads.join_file('base.pdf')
32
-
33
- comp = CompressDocument.create_from_file(base, dpi=100)
34
- comp.to_file(outdir.join_file('teste.pdf'))
28
+ pass
35
29
 
36
30
 
37
31
  def main():
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
- __version__ = '1.2.1'
3
+ __version__ = '1.3'
4
4
  __author__ = 'Bruno Chaves'
5
5
  __license__ = 'MIT'
6
- __module_name__ = 'pdflib'
7
- __modify_date__ = '2025-06-21'
6
+ __module_name__ = 'convert_stream'
7
+ __modify_date__ = '2025-07-06'
@@ -0,0 +1,537 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ from __future__ import annotations
4
+ from typing import List
5
+ from abc import ABC, abstractmethod
6
+ import pandas
7
+
8
+ from convert_stream.models import LibraryImage, LibraryPDF, LibImageToPDF, LibConvertPDF
9
+ from convert_stream.imagelib import ImageObject
10
+ from convert_stream.progress.progress_bar import CreatePbar
11
+ from convert_stream.pdf_page import PageDocumentPdf
12
+ from convert_stream.pdf_document import DocumentPdf
13
+ from convert_stream.pdf_to_images import ConvertPdfToImage
14
+ from convert_stream.image_to_pdf import ImageToPdf
15
+ from soup_files import File, Directory, ProgressBarAdapter, InputFiles, LibraryDocs
16
+
17
+
18
+ #==================================================================#
19
+ # PDF
20
+ #==================================================================#
21
+
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
+
124
+ class PdfStream(ABCDocumentStream):
125
+ """
126
+ Objeto para manipular a exportação de dados PDF
127
+ """
128
+
129
+ def __init__(
130
+ self, *,
131
+ library_pdf: LibraryPDF = LibraryPDF.FITZ,
132
+ library_image: LibraryImage = LibraryImage.OPENCV,
133
+ lib_image_to_pdf: LibImageToPDF = LibImageToPDF.PILPDF,
134
+ progress_bar: ProgressBarAdapter = CreatePbar().get(),
135
+ maximum_pages: int = 3500
136
+ ):
137
+ super().__init__(library_pdf=library_pdf, library_image=library_image, progress_bar=progress_bar)
138
+ self.library_pdf: LibraryPDF = library_pdf
139
+ self.library_image: LibraryImage = library_image
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
143
+ )
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)
156
+ else:
157
+ self.convert_images_to_pdf: ImageToPdf = ImageToPdf.create_from_pil(self.library_image)
158
+
159
+ @property
160
+ def num_pages(self) -> int:
161
+ return self.document.get_num_pages()
162
+
163
+ @num_pages.setter
164
+ def num_pages(self, num: int):
165
+ self.document.set_num_pages(num)
166
+
167
+ @property
168
+ def pages(self) -> List[PageDocumentPdf]:
169
+ return self.document.get_pages()
170
+
171
+ @pages.setter
172
+ def pages(self, new: List[PageDocumentPdf]):
173
+ if not isinstance(new, list):
174
+ return
175
+ self.document.clear()
176
+ for pg in new:
177
+ self.add_page(pg)
178
+
179
+ def is_null(self) -> bool:
180
+ return self.document.is_null()
181
+
182
+ def clear(self):
183
+ self.document.clear()
184
+
185
+ def add_page(self, p: PageDocumentPdf):
186
+ if not isinstance(p, PageDocumentPdf):
187
+ return
188
+ self.document.add_page(p)
189
+
190
+ def add_pages(self, pages: List[PageDocumentPdf]):
191
+ if not isinstance(pages, list):
192
+ print(f'{__class__.__name__} Erro: Use lista de PageDocumentPdf, não {type(pages)}')
193
+ return
194
+ max_num: int = len(pages)
195
+ self.progress_bar.start()
196
+ for num, p in enumerate(pages):
197
+ self.progress_bar.update(
198
+ ((num+1)/max_num) * 100,
199
+ f'Adicionando página: [{num+1} de {max_num}]'
200
+ )
201
+ self.add_page(p)
202
+ self.progress_bar.stop()
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
+
215
+ def add_page_pdf_bytes(self, bt: bytes):
216
+ _page = PageDocumentPdf.create_from_page_bytes(bt, library=self.library_pdf)
217
+ self.add_page(_page)
218
+
219
+ def add_file_pdf(self, f: File):
220
+ self.document.add_file_pdf(f)
221
+
222
+ def add_files_pdf(self, files: List[File]):
223
+ for f in files:
224
+ self.add_file_pdf(f)
225
+
226
+ def add_document(self, doc: DocumentPdf):
227
+ self.add_pages(doc.get_pages())
228
+
229
+ def add_image(self, image: ImageObject):
230
+ pg: PageDocumentPdf = self.convert_images_to_pdf.from_image(image)
231
+ self.add_page(pg)
232
+
233
+ def add_images(self, images: List[ImageObject]):
234
+ maxnum: int = len(images)
235
+ self.progress_bar.start()
236
+ for n, img in enumerate(images):
237
+ self.progress_bar.update(
238
+ ((n+1)/maxnum) * 100,
239
+ f'Adicionando imagens ao documento: [{n+1}] de {maxnum}'
240
+ )
241
+ self.add_image(img)
242
+ self.progress_bar.stop()
243
+
244
+ def to_file_pdf(self, f: File):
245
+ if self.is_null():
246
+ print(
247
+ f'{__class__.__name__} Nenhuma página foi adiconada, adicione páginas ao documento para prosseguir!'
248
+ )
249
+ docpdf: DocumentPdf = DocumentPdf(
250
+ self.library_pdf, progress_bar=self.progress_bar, pages=self.pages
251
+ )
252
+ docpdf.to_file_pdf(f)
253
+
254
+ def to_files_pdf(self, outdir: Directory, *, prefix='documento', replace: bool = False):
255
+ if self.is_null():
256
+ print(
257
+ f'{__class__.__name__} Adicione páginas ao documento para prosseguir!'
258
+ )
259
+ return
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):
263
+ """
264
+ Exporta cada página PDF como um arquivo de imagem.
265
+ """
266
+ d.mkdir()
267
+ self.progress_bar.start()
268
+ for num, page in enumerate(self.pages):
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
274
+ img = self.convert_pdf_to_images.from_page_pdf(page)
275
+ self.progress_bar.update_text(
276
+ f'Exportando página PDF para imagem: [{num+1} de {self.num_pages}] {output_file.basename()}'
277
+ )
278
+ img.to_file(output_file)
279
+ print()
280
+ self.progress_bar.stop()
281
+
282
+ def to_images(self) -> List[ImageObject]:
283
+ images_obj: List[ImageObject] = []
284
+ for page in self.pages:
285
+ _image: ImageObject = self.convert_pdf_to_images.from_page_pdf(page)
286
+ images_obj.append(_image)
287
+ return images_obj
288
+
289
+ def to_document(self) -> DocumentPdf:
290
+ return DocumentPdf(
291
+ self.library_pdf,
292
+ progress_bar=self.progress_bar,
293
+ pages=self.pages,
294
+ maximum_pages=self.document.get_maximum_pages(),
295
+ )
296
+
297
+ def inner_images(self) -> List[ImageObject]:
298
+ inner_images: List[ImageObject] = []
299
+ for num, p in enumerate(self.pages):
300
+ self.progress_bar.update(
301
+ ((num+1)/self.num_pages) * 100,
302
+ f'Convertendo página [{num+1} de {self.num_pages}]'
303
+ )
304
+ imgs: List[ImageObject] = self.convert_pdf_to_images.inner_images(p.to_bytes())
305
+ inner_images.extend(imgs)
306
+ return inner_images
307
+
308
+ def inner_images_to_files(self, d: Directory, prefix: str = 'página-para-imagens') -> None:
309
+ """
310
+ Salva todas as imagens presentes nas páginas PDF, em arquivos de imagem.
311
+ """
312
+ d.mkdir()
313
+ for num, page in enumerate(self.pages):
314
+ images = self.convert_pdf_to_images.inner_images(page.to_bytes())
315
+ if len(images) < 1:
316
+ continue
317
+ for n, img in enumerate(images):
318
+ filename = f'{prefix}-{page.page_number}-img-{n+1}.png'
319
+ img.to_file(d.join_file(filename))
320
+
321
+ def set_paisagem(self):
322
+ for page in self.pages:
323
+ page.set_paisagem()
324
+
325
+
326
+ #==================================================================#
327
+ # Imagens
328
+ #==================================================================#
329
+
330
+
331
+ class ImageStream(object):
332
+ """
333
+ Conversão de imagens.
334
+ """
335
+ def __init__(
336
+ self, *,
337
+ library_image: LibraryImage = LibraryImage.OPENCV,
338
+ library_pdf: LibraryPDF = LibraryPDF.FITZ,
339
+ lib_image_to_pdf: LibImageToPDF = LibImageToPDF.FITZ,
340
+ progress_bar: ProgressBarAdapter = CreatePbar().get(),
341
+ ):
342
+ self._images: List[ImageObject] = []
343
+ self.num_images: int = len(self._images)
344
+ self.library_image: LibraryImage = library_image
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
+ )
353
+
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)
361
+ else:
362
+ raise NotImplementedError()
363
+
364
+ @property
365
+ def progress_bar(self) -> ProgressBarAdapter:
366
+ return self.convert_pdf_to_images.pbar
367
+
368
+ @property
369
+ def images(self) -> List[ImageObject]:
370
+ return self._images
371
+
372
+ @images.setter
373
+ def images(self, imgs: List[ImageObject]) -> None:
374
+ if not isinstance(imgs, list):
375
+ print(f'Erro: Use: list() não {type(imgs)}')
376
+ return
377
+ self.num_images = 0
378
+ for img in imgs:
379
+ self.add_image(img)
380
+
381
+ def add_image(self, img: ImageObject) -> None:
382
+ if not isinstance(img, ImageObject):
383
+ return
384
+ self._images.append(img)
385
+ self.num_images += 1
386
+
387
+ def add_images(self, images: List[ImageObject]):
388
+ maxnum: int = len(images)
389
+ self.progress_bar.start()
390
+ for num, i in enumerate(images):
391
+ self.add_image(i)
392
+ self.progress_bar.stop()
393
+
394
+ def add_file_image(self, f: File):
395
+ img = ImageObject.create_from_file(f, library=self.library_image)
396
+ self.add_image(img)
397
+
398
+ def add_files_image(self, files: List[File]):
399
+ maxnum: int = len(files)
400
+ for num, f in enumerate(files):
401
+ self.progress_bar.update(
402
+ ((num + 1) / maxnum) * 100,
403
+ f'Adicionando imagens: [{num + 1} de {maxnum}] {f.basename()}'
404
+ )
405
+ self.add_file_image(f)
406
+
407
+ def is_null(self) -> bool:
408
+ if self.num_images < 1:
409
+ return True
410
+ return False
411
+
412
+ def clear(self):
413
+ self._images.clear()
414
+ self.num_images = 0
415
+
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
+ """
427
+ d.mkdir()
428
+ self.progress_bar.start()
429
+ for num, image in enumerate(self.images):
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
435
+ self.progress_bar.update(
436
+ ((num+1)/self.num_images) * 100,
437
+ f'Exportando imagem: {num+1} de {self.num_images} [{filename}]'
438
+ )
439
+ image.to_file(output_file)
440
+ self.progress_bar.stop()
441
+
442
+ def to_pages_pdf(self) -> List[PageDocumentPdf]:
443
+ if self.is_null():
444
+ print(f'{__class__.__name__} Adicione imagens para prosseguir!')
445
+ return []
446
+ new_pages: List[PageDocumentPdf] = []
447
+ maxnum: int = len(self.images)
448
+ self.progress_bar.start()
449
+ for num, image in enumerate(self.images):
450
+ self.progress_bar.update(
451
+ ((num + 1) / maxnum) * 100,
452
+ f'Criando páginas PDF: [{num + 1} de {maxnum}]'
453
+ )
454
+ im = self.convert_image_to_pdf.from_image(image)
455
+ new_pages.append(im)
456
+ self.progress_bar.stop()
457
+ return new_pages
458
+
459
+ def to_documet(self) -> DocumentPdf:
460
+ return DocumentPdf(progress_bar=self.progress_bar, pages=self.to_pages_pdf())
461
+
462
+ def set_paisagem(self):
463
+ for num, img in enumerate(self.images):
464
+ self.images[num].set_paisagem()
465
+
466
+ def set_gaussian_blur(self):
467
+ self.progress_bar.start()
468
+ for num, img in enumerate(self.images):
469
+ self.progress_bar.update(
470
+ ((num+1) / self.num_images) * 100,
471
+ f'Removendo o ruido [{num+1} de {self.num_images}]'
472
+ )
473
+ self.images[num].set_gaussian()
474
+ self.progress_bar.stop()
475
+
476
+ def set_backgroud_black(self):
477
+ self.progress_bar.start()
478
+ for num, img in enumerate(self.images):
479
+ self.progress_bar.update(
480
+ ((num + 1) / self.num_images) * 100,
481
+ f'Removendo o ruido [{num + 1} de {self.num_images}]'
482
+ )
483
+ self.images[num].set_background_black()
484
+ self.progress_bar.stop()
485
+
486
+ def set_background_gray(self):
487
+ self.progress_bar.start()
488
+ for num, img in enumerate(self.images):
489
+ self.progress_bar.update(
490
+ ((num + 1) / self.num_images) * 100,
491
+ f'Removendo o ruido [{num + 1} de {self.num_images}]'
492
+ )
493
+ self.images[num].set_background_gray()
494
+ self.progress_bar.stop()
495
+
496
+ def set_optimize(self):
497
+ self.progress_bar.start()
498
+ for num, img in enumerate(self.images):
499
+ self.progress_bar.update(
500
+ ((num + 1) / self.num_images) * 100,
501
+ f'Otimizando imagem [{num + 1} de {self.num_images}]'
502
+ )
503
+ self.images[num].set_optimize()
504
+ self.progress_bar.stop()
505
+
506
+
507
+ def get_data_from_pdfs(*, files_pdf: List[File]) -> pandas.DataFrame:
508
+ """
509
+ Recebe uma lista de arquivos PDF e retorna um DataFrame com os dados das cartas.
510
+ """
511
+ if not isinstance(files_pdf, list):
512
+ raise ValueError(f'Erro: Use: list() não {type(files_pdf)}')
513
+
514
+ data: List[pandas.DataFrame] = []
515
+ values: List[str] = []
516
+ doc = DocumentPdf()
517
+ for file in files_pdf:
518
+ doc.add_file_pdf(file)
519
+ for page in doc.pages:
520
+ text = page.to_string()
521
+ if (text is not None) and (text != ''):
522
+ values.extend(text.split('\n'))
523
+ data.append(
524
+ pandas.DataFrame(
525
+ {
526
+ 'TEXT': values,
527
+ 'ARQUIVO': [file.absolute()] * len(values)
528
+ }
529
+ )
530
+ )
531
+
532
+ values.clear()
533
+ doc.clear()
534
+ if len(data) < 1:
535
+ return pandas.DataFrame()
536
+ return pandas.concat(data).astype('str')
537
+