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.

Files changed (31) hide show
  1. {convert_stream-1.2.3 → convert_stream-1.3.1}/PKG-INFO +9 -9
  2. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/__init__.py +5 -6
  3. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/__main__.py +2 -11
  4. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/_version.py +2 -2
  5. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/convert.py +242 -86
  6. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/image_to_pdf.py +88 -36
  7. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/models/__init__.py +1 -2
  8. convert_stream-1.3.1/convert_stream/models/models_pdf.py +98 -0
  9. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/pdf_compress.py +2 -2
  10. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/pdf_document.py +397 -207
  11. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/pdf_page.py +3 -2
  12. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/pdf_to_images.py +61 -28
  13. convert_stream-1.3.1/convert_stream/progress/__init__.py +1 -0
  14. convert_stream-1.3.1/convert_stream/progress/progress_bar.py +24 -0
  15. convert_stream-1.3.1/convert_stream/table_files.py +215 -0
  16. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream.egg-info/PKG-INFO +9 -9
  17. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream.egg-info/SOURCES.txt +1 -0
  18. convert_stream-1.3.1/convert_stream.egg-info/requires.txt +9 -0
  19. {convert_stream-1.2.3 → convert_stream-1.3.1}/pyproject.toml +10 -9
  20. convert_stream-1.2.3/convert_stream/models/models_pdf.py +0 -372
  21. convert_stream-1.2.3/convert_stream/progress/__init__.py +0 -0
  22. convert_stream-1.2.3/convert_stream/progress/progress_bar.py +0 -157
  23. convert_stream-1.2.3/convert_stream.egg-info/requires.txt +0 -9
  24. {convert_stream-1.2.3 → convert_stream-1.3.1}/README.md +0 -0
  25. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/imagelib.py +0 -0
  26. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/models/m_text.py +0 -0
  27. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/models/models_image.py +0 -0
  28. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream/text.py +0 -0
  29. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream.egg-info/dependency_links.txt +0 -0
  30. {convert_stream-1.2.3 → convert_stream-1.3.1}/convert_stream.egg-info/top_level.txt +0 -0
  31. {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.2.3
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==3.0.1
10
- Requires-Dist: PyMuPDF==1.25.5
11
- Requires-Dist: reportlab==4.3.1
12
- Requires-Dist: openpyxl==3.1.5
13
- Requires-Dist: pandas==2.2.3
14
- Requires-Dist: Pillow==11.2.1
15
- Requires-Dist: opencv-python==4.11.0.86
16
- Requires-Dist: requests==2.32.3
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 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,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
- from convert_stream import (
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():
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
- __version__ = '1.2.3'
3
+ __version__ = '1.3'
4
4
  __author__ = 'Bruno Chaves'
5
5
  __license__ = 'MIT'
6
6
  __module_name__ = 'convert_stream'
7
- __modify_date__ = '2025-06-28'
7
+ __modify_date__ = '2025-07-06'
@@ -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 ABCDocumentStream, LibraryImage, LibraryPDF
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 ProgressBarAdapter, ProgressBarSimple
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 ImageConvertPdf
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
- progress_bar: ProgressBarAdapter = ProgressBarAdapter(ProgressBarSimple())
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.document: DocumentPdf = DocumentPdf(self.library_pdf, progress_bar=progress_bar)
37
- self.convert_pdf_to_images: ConvertPdfToImage = ConvertPdfToImage(
38
- library_image=library_image, progress_bar=progress_bar
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
- if self.library_pdf == LibraryPDF.CANVAS:
42
- self.convert_images_to_pdf: ImageConvertPdf = ImageConvertPdf.create_from_canvas(self.library_image)
43
- elif self.library_pdf == LibraryPDF.PILPDF:
44
- self.convert_images_to_pdf: ImageConvertPdf = ImageConvertPdf.create_from_pil(LibraryImage.PIL)
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: ImageConvertPdf = ImageConvertPdf.create_from_fitz(self.library_image)
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.num_pages
161
+ return self.document.get_num_pages()
51
162
 
52
163
  @num_pages.setter
53
164
  def num_pages(self, num: int):
54
- pass
165
+ self.document.set_num_pages(num)
55
166
 
56
167
  @property
57
168
  def pages(self) -> List[PageDocumentPdf]:
58
- return self.document.pages
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
- doc: DocumentPdf = DocumentPdf(self.library_pdf)
99
- doc.add_file_pdf(f)
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.pages)
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-pag'):
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
- outdir.mkdir()
141
- _document: DocumentPdf = DocumentPdf(self.library_pdf)
142
- for num, p in enumerate(self.pages):
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
- filename = f'{prefix}-{page.page_number}.png'
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}] {filename}'
276
+ f'Exportando página PDF para imagem: [{num+1} de {self.num_pages}] {output_file.basename()}'
161
277
  )
162
- img.to_file(d.join_file(filename))
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, progress_bar=self.progress_bar, pages=self.pages
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.PILPDF,
214
- progress_bar: ProgressBarAdapter = ProgressBarAdapter(ProgressBarSimple()),
338
+ library_pdf: LibraryPDF = LibraryPDF.FITZ,
339
+ lib_image_to_pdf: LibImageToPDF = LibImageToPDF.FITZ,
340
+ progress_bar: ProgressBarAdapter = CreatePbar().get(),
215
341
  ):
216
- self.__images: List[ImageObject] = []
217
- self.num_images: int = len(self.__images)
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 IMAGEM em pdf.
223
- if library_pdf == LibraryPDF.FITZ:
224
- self.convert_image_to_pdf: ImageConvertPdf = ImageConvertPdf.create_from_fitz(library_image)
225
- elif library_pdf == LibraryPDF.CANVAS:
226
- self.convert_image_to_pdf: ImageConvertPdf = ImageConvertPdf.create_from_canvas(library_image)
227
- elif library_pdf == LibraryPDF.PILPDF:
228
- self.convert_image_to_pdf: ImageConvertPdf = ImageConvertPdf.create_from_pil(library_image)
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 ValueError(f'PYPDF não pode converter imagens em PDF!!')
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.__images
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.__images.append(img)
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
- p,
285
- f'Adicionando arquivos: [{num + 1} de {maxnum}]'
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.__images.clear()
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(d.join_file(filename))
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'Adicionando imagens: [{num + 1} de {maxnum}]'
452
+ f'Criando páginas PDF: [{num + 1} de {maxnum}]'
321
453
  )
322
- new_pages.append(self.convert_image_to_pdf.from_image(image))
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
- print(f'Removendo ruido de imagem: [{num+1} de {self.num_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
+ )
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
- print(f'Escurecendo imagem: [{num+1} de {self.num_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
+ )
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
- print(f'Escurecendo imagem: [{num+1} de {self.num_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
+ )
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
- print(f'Otimizando imagem: [{num+1} de {self.num_images}]')
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 = page.to_string()
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(