convert-stream 2.4__tar.gz → 2.4.2__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 (35) hide show
  1. {convert_stream-2.4 → convert_stream-2.4.2}/PKG-INFO +2 -1
  2. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/__init__.py +7 -9
  3. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/doc_stream.py +43 -23
  4. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/image/img_object.py +14 -7
  5. convert_stream-2.4.2/convert_stream/mod_types/__init__.py +13 -0
  6. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/mod_types/enums.py +0 -9
  7. convert_stream-2.4.2/convert_stream/mod_types/table_types.py +19 -0
  8. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/pdf/image_to_pdf.py +1 -1
  9. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/pdf/pdf_document.py +20 -17
  10. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/pdf/pdf_page.py +2 -2
  11. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/pdf/pdf_to_image.py +16 -9
  12. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/table_files.py +16 -16
  13. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/text/__init__.py +2 -2
  14. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/text/find_text.py +16 -1
  15. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream.egg-info/PKG-INFO +2 -1
  16. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream.egg-info/SOURCES.txt +0 -5
  17. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream.egg-info/requires.txt +1 -0
  18. {convert_stream-2.4 → convert_stream-2.4.2}/pyproject.toml +2 -2
  19. convert_stream-2.4/convert_stream/mod_types/__init__.py +0 -98
  20. convert_stream-2.4/convert_stream/mod_types/table_types.py +0 -422
  21. convert_stream-2.4/convert_stream/sheets/__init__.py +0 -8
  22. convert_stream-2.4/convert_stream/sheets/load.py +0 -344
  23. convert_stream-2.4/convert_stream/sheets/parse.py +0 -71
  24. convert_stream-2.4/convert_stream/sheets/save.py +0 -29
  25. convert_stream-2.4/convert_stream/text/date.py +0 -253
  26. {convert_stream-2.4 → convert_stream-2.4.2}/README.md +0 -0
  27. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/__main__.py +0 -0
  28. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/_version.py +0 -0
  29. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/image/__init__.py +0 -0
  30. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/mod_types/modules.py +0 -0
  31. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/pdf/__init__.py +0 -0
  32. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream/text/terminal.py +0 -0
  33. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream.egg-info/dependency_links.txt +0 -0
  34. {convert_stream-2.4 → convert_stream-2.4.2}/convert_stream.egg-info/top_level.txt +0 -0
  35. {convert_stream-2.4 → convert_stream-2.4.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: convert_stream
3
- Version: 2.4
3
+ Version: 2.4.2
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
@@ -15,6 +15,7 @@ Requires-Dist: pandas
15
15
  Requires-Dist: Pillow>=11.3.0
16
16
  Requires-Dist: opencv-python
17
17
  Requires-Dist: requests>=2.32.4
18
+ Requires-Dist: sheet_stream
18
19
 
19
20
  # Configuração instalação:
20
21
  pip3 install -r requirements.txt
@@ -8,20 +8,19 @@ from ._version import (
8
8
  __module_name__, __author__, __license__, __modify_date__, __version__
9
9
  )
10
10
  from .mod_types import (
11
- MetaDataFile, MetaDataItem, create_metadata, ColumnsTable, ListString, ArrayString,
12
- HeadCell, HeadValues, ColumnBody, TextTable, LibDate, LibPDF, LibImage, LibPdfToImage,
13
- LibImageToPdf, DictTextTable, RotationAngle,
11
+ LibPDF, LibImage, LibPdfToImage, LibImageToPdf, DictTextTable, RotationAngle,
14
12
  )
15
13
  from .image import ImageObject, CollectionImages
16
14
  from .pdf import DocumentPdf, PageDocumentPdf, CollectionPagePdf, ConvertPdfToImages, ConvertImageToPdf
17
15
  from .pdf.pdf_document import SearchableTextPdf
18
16
  from .doc_stream import PdfStream, SplitPdf
19
17
  from .table_files import PdfFinder
20
- from .text import ConvertStringDate, fmt_col_to_date
18
+ from .text import print_title, print_line, FindStrings
19
+ from sheet_stream import VoidAdapter
21
20
 
22
21
 
23
22
  def __create_stream() -> PdfStream:
24
- st = PdfStream()
23
+ st = PdfStream(pbar=VoidAdapter())
25
24
  st.clear()
26
25
  return st
27
26
 
@@ -77,10 +76,9 @@ __all__ = [
77
76
  '__modify_date__', '__author__', '__license__', '__module_name__', '__version__',
78
77
  'PdfStream', 'DocumentPdf', 'PageDocumentPdf', 'CollectionPagePdf', 'CollectionImages',
79
78
  'ImageObject', 'File', 'Directory', 'LibraryDocs', 'InputFiles', 'SearchableTextPdf',
80
- 'PdfFinder', 'SplitPdf', 'LibImageToPdf', 'RotationAngle', 'ConvertImageToPdf', 'ConvertPdfToImages',
81
- 'MetaDataFile', 'MetaDataItem', 'ColumnsTable', 'ListString', 'ArrayString',
82
- 'HeadCell', 'HeadValues', 'ColumnBody', 'TextTable', 'LibDate', 'LibPDF', 'LibImage', 'LibPdfToImage',
79
+ 'PdfFinder', 'SplitPdf', 'LibImageToPdf', 'RotationAngle', 'ConvertImageToPdf',
80
+ 'ConvertPdfToImages', 'LibPDF', 'LibImage', 'LibPdfToImage',
83
81
  'read_pdf', 'read_files_pdf', 'read_image', 'DictTextTable',
84
- 'create_metadata', 'fmt_col_to_date',
82
+ 'print_title', 'print_line', 'FindStrings',
85
83
  ]
86
84
 
@@ -31,22 +31,38 @@ class PdfStream(object):
31
31
  def __init__(
32
32
  self, *,
33
33
  pbar: ProgressBarAdapter = ProgressBarAdapter(),
34
- lib_pdf: LibPDF = DEFAULT_LIB_PDF,
35
- lib_img: LibImage = DEFAULT_LIB_IMAGE,
36
- lib_img_to_pdf: LibImageToPdf = DEFAULT_LIB_IMAGE_TO_PDF,
37
- lib_pdf_to_img: LibPdfToImage = DEFAULT_LIB_PDF_TO_IMG,
34
+ lib_pdf: LibPDF = LibPDF.FITZ,
35
+ lib_img: LibImage = LibImage.OPENCV,
36
+ lib_img_to_pdf: LibImageToPdf = LibImageToPdf.IMAGE_TO_PDF_FITZ,
37
+ lib_pdf_to_img: LibPdfToImage = LibPdfToImage.PDF_TO_IMG_FITZ,
38
+ dpi: int = 200,
38
39
  ) -> None:
40
+ self.dpi = dpi
39
41
  self.progress: ProgressBarAdapter = pbar
40
42
  self.collection_pages: CollectionPagePdf = CollectionPagePdf([])
41
- self.collection_images: CollectionImages = CollectionImages([])
42
- self.collection_images.set_pbar(pbar)
43
- self.collection_pages.set_pbar(pbar)
43
+ self.collection_images: CollectionImages = CollectionImages([], lib_img=lib_img)
44
+ self.collection_images.set_pbar(self.progress)
45
+ self.collection_pages.set_pbar(self.progress)
44
46
  self.lib_pdf: LibPDF = lib_pdf
45
47
  self.lib_img: LibImage = lib_img
46
48
  self.lib_img_to_pdf: LibImageToPdf = lib_img_to_pdf
47
49
  self.lib_pdf_to_img: LibPdfToImage = lib_pdf_to_img
48
50
  self.clear()
49
51
 
52
+ @property
53
+ def convert_pdf_to_images(self) -> ConvertPdfToImages:
54
+ conv = ConvertPdfToImages.create(
55
+ DocumentPdf.create_from_pages(self.collection_pages, lib_pdf=self.lib_pdf),
56
+ )
57
+ conv.set_pbar(self.progress)
58
+ return conv
59
+
60
+ @property
61
+ def convert_images_to_pdf(self) -> ConvertImageToPdf:
62
+ _con = ConvertImageToPdf(self.collection_images, lib_img_to_pdf=self.lib_img_to_pdf)
63
+ _con.set_pbar(self.progress)
64
+ return _con
65
+
50
66
  @property
51
67
  def is_empty(self) -> bool:
52
68
  return self.collection_pages.is_empty
@@ -81,10 +97,10 @@ class PdfStream(object):
81
97
  self.collection_images.add_images(images)
82
98
 
83
99
  def add_file_pdf(self, f: File) -> None:
84
- self.collection_pages.add_file_pdf(f)
100
+ self.collection_pages.add_file_pdf(f, lib_pdf=self.lib_pdf)
85
101
 
86
102
  def add_files_pdf(self, files: list[File]) -> None:
87
- self.collection_pages.add_files_pdf(files)
103
+ self.collection_pages.add_files_pdf(files, lib_pdf=self.lib_pdf)
88
104
 
89
105
  def add_document(self, doc: DocumentPdf) -> None:
90
106
  self.collection_pages.add_document(doc)
@@ -105,23 +121,28 @@ class PdfStream(object):
105
121
 
106
122
  _doc: DocumentPdf = None
107
123
  if not self.collection_images.is_empty:
108
- _convert = ConvertImageToPdf(self.collection_images, lib_img_to_pdf=self.lib_img_to_pdf)
109
- _convert.set_pbar(self.progress)
110
- _doc: DocumentPdf = _convert.to_document(land_scape, a4=a4)
124
+ # Converter as imagens em documento PDF.
125
+ _doc = self.convert_images_to_pdf.to_document(land_scape, a4=a4)
111
126
  if not self.collection_pages.is_empty:
127
+ # Converter/Adicionar as páginas PDF ao documento final.
112
128
  if _doc is None:
113
129
  _doc: DocumentPdf = self.collection_pages.to_document(self.lib_pdf)
114
130
  else:
115
131
  _doc.add_pages(self.collection_pages)
116
132
  return _doc
117
133
 
118
- def thresold(self, *, land_scape: bool = False, a4: bool = False, dpi=300) -> DocumentPdf:
119
- images: list[ImageObject] = self.collection_images
134
+ def thresold(self, *, land_scape: bool = False, a4: bool = False) -> DocumentPdf:
135
+ if self.collection_images.length == 0:
136
+ images: list[ImageObject] = []
137
+ else:
138
+ images: list[ImageObject] = self.collection_images.copy()
139
+
120
140
  if not self.collection_pages.is_empty:
121
- tmp_doc = DocumentPdf.create_from_pages(self.collection_pages)
122
- conv_pdf_to_img = ConvertPdfToImages.create(tmp_doc)
123
- images.extend(conv_pdf_to_img.to_images(dpi=dpi))
124
- del tmp_doc
141
+ # Converter as páginas PDF em imagens.
142
+ conv_pdf_to_img: ConvertPdfToImages = self.convert_pdf_to_images
143
+ images.extend(
144
+ conv_pdf_to_img.to_images(dpi=self.dpi, lib_image=self.lib_img),
145
+ )
125
146
  if len(images) == 0:
126
147
  raise ValueError('Adicione imagens para prosseguir!')
127
148
  if land_scape:
@@ -137,22 +158,21 @@ class PdfStream(object):
137
158
  output_dir: Directory, *,
138
159
  replace: bool = False,
139
160
  land_scape: bool = False,
140
- dpi: int = 300,
141
161
  ) -> None:
142
162
  if self.collection_pages.is_empty and self.collection_images.is_empty:
143
163
  raise ValueError('Adicione imagens e/ou documentos para prosseguir!')
144
164
  self.progress.start()
145
165
 
146
166
  image_stream = ImageStream([])
167
+ image_stream.set_pbar(self.progress)
147
168
  if not self.collection_images.is_empty:
148
169
  image_stream.add_images(self.collection_images)
149
170
  if not self.collection_pages.is_empty:
150
171
  self.progress.update_text('Processando Imagens')
151
172
  # Criar um documento a partir das páginas
152
- doc_pdf = DocumentPdf.create_from_pages(self.collection_pages)
153
- convert_pdf_to_img = ConvertPdfToImages.create(doc_pdf)
173
+ convert_pdf_to_img = self.convert_pdf_to_images
154
174
  # Converter as páginas PDF em imagens e adicionar a coleção já existe de imagens.
155
- _pdf_to_images: list[ImageObject] = convert_pdf_to_img.to_images(dpi=dpi)
175
+ _pdf_to_images: list[ImageObject] = convert_pdf_to_img.to_images(dpi=self.dpi, lib_image=self.lib_img)
156
176
  image_stream.add_images(_pdf_to_images)
157
177
  # Exportar para arquivos.
158
178
  image_stream.to_files_image(output_dir, replace=replace, land_scape=land_scape)
@@ -172,7 +192,7 @@ class PdfStream(object):
172
192
  if not self.collection_pages.is_empty:
173
193
  pages_document.extend(self.collection_pages)
174
194
  if not self.collection_images.is_empty:
175
- img_to_pdf = ConvertImageToPdf(self.collection_images, lib_img_to_pdf=self.lib_img_to_pdf)
195
+ img_to_pdf: ConvertImageToPdf = self.convert_images_to_pdf
176
196
  tmp_document = img_to_pdf.to_document(land_scape, a4=a4)
177
197
  pages_document.extend(tmp_document.to_pages())
178
198
  final_collection = CollectionPagePdf(pages_document)
@@ -4,13 +4,15 @@
4
4
  Módulo para trabalhar com imagens
5
5
  """
6
6
  from __future__ import annotations
7
+
8
+ import os.path
7
9
  from typing import Union
8
10
  from abc import ABC, abstractmethod
9
11
  from soup_files import File, Directory, InputFiles, LibraryDocs, ProgressBarAdapter
10
12
  from io import BytesIO
11
13
  import numpy as np
12
14
  from scipy.ndimage import uniform_filter
13
- from convert_stream.mod_types import get_hash_from_bytes, MetaDataFile, MetaDataItem, create_metadata
15
+ from sheet_stream.type_utils import get_hash_from_bytes, MetaDataFile, MetaDataItem
14
16
  from convert_stream.mod_types.enums import LibImage, RotationAngle
15
17
  from convert_stream.mod_types.table_types import ListItems
16
18
  from convert_stream.mod_types.modules import (
@@ -205,7 +207,7 @@ class ImplementOpenCv(ABCImageObject):
205
207
  if img is None:
206
208
  raise ValueError(f"Não foi possível abrir a imagem: {f.absolute()}")
207
209
  im_obj = cls(img)
208
- im_obj.metadata = create_metadata(f)
210
+ im_obj.metadata = MetaDataFile.create_metadata(f)
209
211
  return im_obj
210
212
 
211
213
  @classmethod
@@ -350,7 +352,7 @@ class ImplementPIL(ABCImageObject):
350
352
  def create_from_file(cls, f: File) -> ABCImageObject:
351
353
  img = Image.open(f.absolute())
352
354
  im_obj = cls(img)
353
- im_obj.metadata = create_metadata(f)
355
+ im_obj.metadata = MetaDataFile.create_metadata(f)
354
356
  return im_obj
355
357
 
356
358
  @classmethod
@@ -498,12 +500,13 @@ class ImageObject(object):
498
500
 
499
501
  class CollectionImages(ListItems):
500
502
 
501
- def __init__(self, images: list[ImageObject]) -> None:
503
+ def __init__(self, images: list[ImageObject], *, lib_img: LibImage = LibImage.OPENCV) -> None:
502
504
  """
503
505
  Gerir uma lista de Imagens
504
506
  :type images: list[ImageObject]
505
507
  """
506
508
  super().__init__(images)
509
+ self.lib_img: LibImage = lib_img
507
510
  self.pbar: ProgressBarAdapter = ProgressBarAdapter()
508
511
  self.__count: int = 0
509
512
 
@@ -520,7 +523,7 @@ class CollectionImages(ListItems):
520
523
  self.pbar.start()
521
524
  self.__count += 1
522
525
  self.pbar.update_text(f'Adicionando imagem {self.__count} {file.basename()}')
523
- im = ImageObject.create_from_file(file)
526
+ im = ImageObject.create_from_file(file, lib_image=self.lib_img)
524
527
  self.append(im)
525
528
  self.pbar.stop()
526
529
 
@@ -536,7 +539,7 @@ class CollectionImages(ListItems):
536
539
  ((num+1) / max_num) * 100,
537
540
  f'Adicionando imagem: [{num+1} de {max_num}]'
538
541
  )
539
- self.append(ImageObject.create_from_file(f))
542
+ self.append(ImageObject.create_from_file(f, lib_image=self.lib_img))
540
543
  self.pbar.stop()
541
544
 
542
545
  def add_directory_images(self, d: Directory, max_files: int = 4000) -> None:
@@ -554,8 +557,12 @@ class CollectionImages(ListItems):
554
557
  print()
555
558
  output_dir.mkdir()
556
559
  max_num = self.length
560
+ img: ImageObject
557
561
  for n, img in enumerate(self):
558
- filename = f'{img.name}.png'
562
+ if img.metadata.file_path is not None:
563
+ filename = f'{os.path.basename(img.metadata.file_path)}-{n}.png'
564
+ else:
565
+ filename = f'{img.metadata.name}-{n}.png'
559
566
  file_path = output_dir.join_file(filename)
560
567
  if (not replace) and (file_path.exists()):
561
568
  self.pbar.update_text(f'[PULANDO]: {file_path.basename()}')
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env python3
2
+ #
3
+ from __future__ import annotations
4
+ from .enums import (
5
+ RotationAngle, ColumnsTable, LibImage, LibPdfToImage, LibPDF, LibImageToPdf
6
+ )
7
+ from .table_types import DictTextTable
8
+
9
+
10
+ __all__ = [
11
+ 'DictTextTable', 'RotationAngle', 'LibPDF',
12
+ 'LibImageToPdf', 'LibPdfToImage', 'LibImage',
13
+ ]
@@ -58,15 +58,6 @@ class LibImage(Enum):
58
58
  NOT_IMPLEMENTED = 'null'
59
59
 
60
60
 
61
- class LibDate(Enum):
62
- D_M_Y = '%d-%m-%Y'
63
- DMY = '%d/%m/%Y'
64
- dmy = '%d/%m/%y'
65
- d_m_y = '%d-%m-%y'
66
- YMD = '%Y/%m/%d'
67
- Y_M_D = '%Y-%m-%d'
68
-
69
-
70
61
  class RotationAngle(Enum):
71
62
 
72
63
  ROTATION_90 = 90
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env python3
2
+
3
+ from __future__ import annotations
4
+ from sheet_stream import (
5
+ ColumnsTable, ListString, ListItems, ListColumnBody, ArrayString, TableDocuments, TableRow, TableTextKeyWord
6
+ )
7
+ from sheet_stream.type_utils import HeadCell
8
+
9
+
10
+ class ColumnBody(ListColumnBody):
11
+
12
+ def __init__(self, col_name: HeadCell | str, col_body: list[str]):
13
+ super().__init__(col_name, col_body)
14
+
15
+
16
+ class DictTextTable(TableDocuments):
17
+
18
+ def __init__(self, body_list: list[ListColumnBody]):
19
+ super().__init__(body_list)
@@ -297,7 +297,7 @@ class ConvertImageToPdf(object):
297
297
  def __init__(
298
298
  self,
299
299
  collection_images: CollectionImages, *,
300
- lib_img_to_pdf: LibImageToPdf = DEFAULT_LIB_IMAGE_TO_PDF
300
+ lib_img_to_pdf: LibImageToPdf = LibImageToPdf.IMAGE_TO_PDF_FITZ
301
301
  ):
302
302
  if lib_img_to_pdf == LibImageToPdf.IMAGE_TO_PDF_CANVAS:
303
303
  self.convert: ABCConvertImageToPdf = ImplementImageToPdfCanvas(collection_images)
@@ -9,13 +9,14 @@ from io import BytesIO
9
9
  from typing import Union
10
10
  import pandas as pd
11
11
  from soup_files import File, Directory, LibraryDocs, InputFiles, ProgressBarAdapter, JsonConvert
12
- from convert_stream.mod_types import (
13
- get_hash_from_bytes, create_metadata, MetaDataFile, MetaDataItem
12
+ from sheet_stream.type_utils import (
13
+ get_hash_from_bytes, MetaDataFile, MetaDataItem
14
14
  )
15
- from convert_stream.mod_types.table_types import (
16
- ListItems, concat_maps, DictTextTable, ColumnBody,
17
- HeadCell, HeadValues, ColumnsTable
15
+
16
+ from sheet_stream.type_utils import (
17
+ ListItems, HeadCell, HeadValues, ColumnsTable, concat_table_documents, TableDocuments
18
18
  )
19
+ from convert_stream.mod_types.table_types import DictTextTable, ColumnBody
19
20
  from convert_stream.mod_types.enums import LibPDF
20
21
  from convert_stream.mod_types.modules import (
21
22
  DEFAULT_LIB_PDF, ModDocPdf, PdfWriter, PdfReader, fitz, MOD_FITZ, MOD_PYPDF
@@ -33,7 +34,7 @@ class SearchableTextPdf(object):
33
34
  ColumnsTable.KEY.value: ColumnBody(ColumnsTable.KEY.value, ListString([])),
34
35
  ColumnsTable.NUM_PAGE.value: ColumnBody(ColumnsTable.NUM_PAGE.value, ListString([])),
35
36
  ColumnsTable.NUM_LINE.value: ColumnBody(ColumnsTable.NUM_LINE.value, ListString([])),
36
- ColumnsTable.TEXT.value: ColumnBody(ColumnsTable.TEXT.value, ListString([])),
37
+ ColumnsTable.TEXT: ColumnBody(ColumnsTable.TEXT, ListString([])),
37
38
  ColumnsTable.FILE_NAME.value: ColumnBody(ColumnsTable.FILE_NAME.value, ListString([])),
38
39
  ColumnsTable.FILETYPE.value: ColumnBody(ColumnsTable.FILETYPE.value, ListString([])),
39
40
  ColumnsTable.FILE_PATH.value: ColumnBody(ColumnsTable.FILE_PATH.value, ListString([])),
@@ -49,10 +50,10 @@ class SearchableTextPdf(object):
49
50
 
50
51
  @property
51
52
  def length(self) -> int:
52
- return len(self.elements[ColumnsTable.TEXT.value])
53
+ return len(self.elements[ColumnsTable.TEXT])
53
54
 
54
55
  def is_empty(self) -> bool:
55
- return len(self.elements[ColumnsTable.TEXT.value]) == 0
56
+ return len(self.elements[ColumnsTable.TEXT]) == 0
56
57
 
57
58
  @property
58
59
  def columns(self) -> HeadValues:
@@ -110,7 +111,7 @@ class SearchableTextPdf(object):
110
111
  ou 'nas' em caso de erro nas = Not a String
111
112
  """
112
113
  try:
113
- return ' '.join(self.elements[ColumnsTable.TEXT.value])
114
+ return ' '.join(self.elements[ColumnsTable.TEXT])
114
115
  except Exception as e:
115
116
  print(e)
116
117
  return 'nas'
@@ -270,7 +271,7 @@ class ImplementDocumentFitz(ABCDocument):
270
271
  raise ImportError("Módulo fitz|pymupdf não instalado!\nUse pip install fitz.")
271
272
  doc = fitz.open(file.path)
272
273
  _obj_doc = cls(doc)
273
- _obj_doc.metadata = create_metadata(file)
274
+ _obj_doc.metadata = MetaDataFile.create_metadata(file)
274
275
  return _obj_doc
275
276
 
276
277
  @classmethod
@@ -391,7 +392,7 @@ class ImplementDocumentPyPdf(ABCDocument):
391
392
  pdf_writer.add_page(p)
392
393
  del reader
393
394
  _obj_doc = cls(pdf_writer)
394
- _obj_doc.metadata = create_metadata(file)
395
+ _obj_doc.metadata = MetaDataFile.create_metadata(file)
395
396
  return _obj_doc
396
397
 
397
398
  @classmethod
@@ -469,6 +470,7 @@ class DocumentPdf(object):
469
470
  raise ValueError(
470
471
  f'Use: str, File, PdfWriter, fitz.Document ou BytesIO não => {type(document)}'
471
472
  )
473
+ print(self.metadata)
472
474
 
473
475
  @property
474
476
  def name(self) -> str | None:
@@ -560,7 +562,7 @@ class DocumentPdf(object):
560
562
  dir_path=self.metadata.dir_path,
561
563
  )
562
564
 
563
- def to_dict(self, separator: str = '\n') -> DictTextTable:
565
+ def to_dict(self, separator: str = '\n') -> TableDocuments:
564
566
  list_data: list[DictTextTable] = []
565
567
  pages: list[PageDocumentPdf] = self.to_pages()
566
568
 
@@ -569,7 +571,7 @@ class DocumentPdf(object):
569
571
  list_data.append(_mp)
570
572
  if len(list_data) == 0:
571
573
  return DictTextTable.create_void_dict()
572
- return concat_maps(list_data)
574
+ return concat_table_documents(list_data)
573
575
 
574
576
  def to_data(self, separator: str = '\n') -> pd.DataFrame:
575
577
  return pd.DataFrame.from_dict(self.to_dict(separator=separator))
@@ -604,7 +606,7 @@ class DocumentPdf(object):
604
606
  ColumnsTable.KEY.value: f'{idx}',
605
607
  ColumnsTable.NUM_PAGE.value: f'{_page.number_page}',
606
608
  ColumnsTable.NUM_LINE.value: f'{idx+1}',
607
- ColumnsTable.TEXT.value: math_text,
609
+ ColumnsTable.TEXT: math_text,
608
610
  ColumnsTable.FILE_NAME.value: self.metadata.name,
609
611
  ColumnsTable.FILETYPE.value: self.metadata.extension,
610
612
  ColumnsTable.FILE_PATH.value: self.metadata.file_path,
@@ -646,7 +648,7 @@ class DocumentPdf(object):
646
648
  ColumnsTable.KEY.value: f'{idx}',
647
649
  ColumnsTable.NUM_PAGE.value: f'{_page.number_page}',
648
650
  ColumnsTable.NUM_LINE.value: f'{idx + 1}',
649
- ColumnsTable.TEXT.value: math_text,
651
+ ColumnsTable.TEXT: math_text,
650
652
  ColumnsTable.FILE_NAME.value: self.metadata.name,
651
653
  ColumnsTable.FILETYPE.value: self.metadata.extension,
652
654
  ColumnsTable.FILE_PATH.value: self.metadata.file_path,
@@ -671,6 +673,7 @@ class DocumentPdf(object):
671
673
  ) -> DocumentPdf:
672
674
  if lib_pdf == LibPDF.FITZ:
673
675
  mod_pdf = ImplementDocumentFitz.create_from_pages(pages)
676
+ mod_pdf.metadata.file_path = pages[0].metadata.file_path
674
677
  return cls(mod_pdf, lib_pdf=lib_pdf)
675
678
  elif lib_pdf == LibPDF.PYPDF:
676
679
  mod_pdf = ImplementDocumentPyPdf.create_from_pages(pages)
@@ -716,12 +719,12 @@ class CollectionPagePdf(ListItems):
716
719
  pg.number_page = _counter
717
720
  self.append(pg)
718
721
 
719
- def add_file_pdf(self, file: File, *, lib_pdf: LibPDF = DEFAULT_LIB_PDF) -> None:
722
+ def add_file_pdf(self, file: File, *, lib_pdf: LibPDF = LibPDF.FITZ) -> None:
720
723
  self.pbar.update_text(f'Adicionando arquivo PDF {file.basename()}')
721
724
  doc_pdf = DocumentPdf(file, lib_pdf=lib_pdf)
722
725
  self.add_pages(doc_pdf.to_pages())
723
726
 
724
- def add_files_pdf(self, files: list[File], lib_pdf: LibPDF = DEFAULT_LIB_PDF) -> None:
727
+ def add_files_pdf(self, files: list[File], lib_pdf: LibPDF = LibPDF.FITZ) -> None:
725
728
  max_num: int = len(files)
726
729
  for num, f in enumerate(files):
727
730
  self.pbar.update(
@@ -9,12 +9,12 @@ import pandas as pd
9
9
 
10
10
  from convert_stream.mod_types.enums import LibPDF
11
11
  from convert_stream.mod_types.table_types import (
12
- DictTextTable, ListString, ColumnBody
12
+ DictTextTable, ListString
13
13
  )
14
14
  from convert_stream.mod_types.modules import (
15
15
  ModPagePdf, PageObject, fitz
16
16
  )
17
- from convert_stream.mod_types import MetaDataItem, MetaDataFile
17
+ from sheet_stream.type_utils import MetaDataFile
18
18
  from convert_stream.text.find_text import FindText, ArrayString
19
19
 
20
20
 
@@ -6,6 +6,8 @@
6
6
  from __future__ import annotations
7
7
  from abc import ABC, abstractmethod
8
8
 
9
+ from sheet_stream.type_utils import MetaDataFile
10
+
9
11
  from convert_stream import CollectionImages
10
12
  from soup_files import Directory, ProgressBarAdapter, CreatePbar
11
13
  from convert_stream.mod_types.enums import LibPdfToImage
@@ -74,6 +76,7 @@ class ImplementConvertPdfFitz(ABCConvertPdf):
74
76
 
75
77
  def __init__(self, document: DocumentPdf):
76
78
  super().__init__(document)
79
+ self.lib_pdf_to_image: LibPdfToImage = LibPdfToImage.PDF_TO_IMG_FITZ
77
80
 
78
81
  def __get_pages(self) -> list[Page]:
79
82
  pages = self.document.to_pages()
@@ -85,24 +88,29 @@ class ImplementConvertPdfFitz(ABCConvertPdf):
85
88
  def to_images(
86
89
  self, *,
87
90
  dpi: int = 200,
88
- lib_image: LibImage = DEFAULT_LIB_IMAGE
91
+ lib_image: LibImage = LibImage.PIL
89
92
  ) -> list[ImageObject]:
93
+ """
94
+ Converte um Documento em lista de objetos ImageObject.
95
+ """
90
96
  images: list[ImageObject] = []
97
+ _metadata: MetaDataFile = self.document.metadata
98
+
91
99
  pages_fitz: list[Page] = self.__get_pages()
92
100
  _count = len(pages_fitz)
93
- print()
94
101
  for n, pg in enumerate(pages_fitz):
95
102
  self.pbar.update(
96
103
  ((n+1)/_count) * 100,
97
- f'Convertendo: {n+1} de {_count}'
104
+ f'[Documento para Imagens]: página {n+1}/{_count}'
98
105
  )
99
106
  pix: Pixmap = pg.get_pixmap(dpi=dpi)
100
107
  img = ImageObject.create_from_bytes(
101
108
  pix.tobytes('png', jpg_quality=100),
102
109
  lib_image=LibImage.PIL,
103
110
  )
111
+ img.metadata.name = _metadata.name
112
+ img.metadata.file_path = _metadata.file_path
104
113
  images.append(img)
105
- print()
106
114
  return images
107
115
 
108
116
  def to_files_image(
@@ -111,15 +119,14 @@ class ImplementConvertPdfFitz(ABCConvertPdf):
111
119
  replace: bool = False,
112
120
  gaussian_filter: bool = False,
113
121
  dpi: int = 300,
114
- lib_image: LibImage = DEFAULT_LIB_IMAGE
122
+ lib_image: LibImage = LibImage.PIL
115
123
  ) -> None:
116
124
  pages_fitz: list[Page] = self.__get_pages()
117
125
  _count = len(pages_fitz)
118
- print()
119
126
  for n, pg in enumerate(pages_fitz):
120
127
  self.pbar.update(
121
128
  ((n + 1) / _count) * 100,
122
- f'Exportando: {n + 1} de {_count}'
129
+ f'[Documento para arquivos de imagens]: {n + 1}/{_count}'
123
130
  )
124
131
  out_file = output_dir.join_file(f'pag-{n+1}.png')
125
132
  if not replace:
@@ -153,7 +160,7 @@ class ConvertPdfToImages(object):
153
160
  def to_images(
154
161
  self, *,
155
162
  dpi: int = 300,
156
- lib_image: LibImage = DEFAULT_LIB_IMAGE,
163
+ lib_image: LibImage = LibImage.PIL,
157
164
  ) -> list[ImageObject]:
158
165
  return self.mod_convert_to_image.to_images(dpi=dpi, lib_image=lib_image)
159
166
 
@@ -163,7 +170,7 @@ class ConvertPdfToImages(object):
163
170
  replace: bool = False,
164
171
  gaussian_filter: bool = False,
165
172
  dpi: int = 300,
166
- lib_image: LibImage = DEFAULT_LIB_IMAGE,
173
+ lib_image: LibImage = LibImage.PIL,
167
174
  ) -> None:
168
175
  self.mod_convert_to_image.to_files_image(
169
176
  dpi=dpi,
@@ -88,14 +88,14 @@ class PdfFinder(object):
88
88
  file_type = temp_doc.metadata.extension
89
89
 
90
90
  new_line: dict[str, str] = {
91
- ColumnsTable.KEY.value: f'{idx}',
92
- ColumnsTable.NUM_PAGE.value: 'nan',
93
- ColumnsTable.NUM_LINE.value: f'{idx + 1}',
94
- ColumnsTable.TEXT.value: math_text,
95
- ColumnsTable.FILE_NAME.value: file_name,
96
- ColumnsTable.FILETYPE.value: file_type,
97
- ColumnsTable.FILE_PATH.value: file_path,
98
- ColumnsTable.DIR.value: dir_path,
91
+ ColumnsTable.KEY: f'{idx}',
92
+ ColumnsTable.NUM_PAGE: 'nan',
93
+ ColumnsTable.NUM_LINE: f'{idx + 1}',
94
+ ColumnsTable.TEXT: math_text,
95
+ ColumnsTable.FILE_NAME: file_name,
96
+ ColumnsTable.FILETYPE: file_type,
97
+ ColumnsTable.FILE_PATH: file_path,
98
+ ColumnsTable.DIR: dir_path,
99
99
  }
100
100
  _searchable.add_line(new_line)
101
101
  return _searchable
@@ -140,14 +140,14 @@ class PdfFinder(object):
140
140
  file_type = temp_doc.metadata.extension
141
141
 
142
142
  new_line: dict[str, str] = {
143
- ColumnsTable.KEY.value: f'{idx}',
144
- ColumnsTable.NUM_PAGE.value: 'nan',
145
- ColumnsTable.NUM_LINE.value: f'{idx + 1}',
146
- ColumnsTable.TEXT.value: math_text,
147
- ColumnsTable.FILE_NAME.value: file_name,
148
- ColumnsTable.FILETYPE.value: file_type,
149
- ColumnsTable.FILE_PATH.value: file_path,
150
- ColumnsTable.DIR.value: dir_path,
143
+ ColumnsTable.KEY: f'{idx}',
144
+ ColumnsTable.NUM_PAGE: 'nan',
145
+ ColumnsTable.NUM_LINE: f'{idx + 1}',
146
+ ColumnsTable.TEXT: math_text,
147
+ ColumnsTable.FILE_NAME: file_name,
148
+ ColumnsTable.FILETYPE: file_type,
149
+ ColumnsTable.FILE_PATH: file_path,
150
+ ColumnsTable.DIR: dir_path,
151
151
  }
152
152
  _searchable.add_line(new_line)
153
153
  return _searchable
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env python3
2
- from .date import ConvertStringDate, fmt_col_to_date
3
- from .find_text import FindText
2
+ from .find_text import FindText, FindStrings
4
3
  from .terminal import (
5
4
  print_line, print_title, show_error, show_warning, show_info, Colors, msg
6
5
  )
6
+ from sheet_stream import ConvertStringDate, fmt_col_to_date
7
7
 
8
8
  __all__ = [
9
9
  'ConvertStringDate', 'print_title', 'print_line', 'fmt_col_to_date',
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  from __future__ import annotations
3
- from convert_stream.mod_types.table_types import ArrayString
3
+ from sheet_stream import ArrayString, contains, find_index, find_all_index
4
4
 
5
5
 
6
6
  class FindText(object):
@@ -46,5 +46,20 @@ class FindText(object):
46
46
  return self.array.find_all(text, iqual=iqual, case=case)
47
47
 
48
48
 
49
+ class FindStrings(object):
49
50
 
51
+ def __init__(self, key_words: list[str]):
52
+ self.key_words: list[str] = key_words
50
53
 
54
+ def find_all(self, values: list[str], *, iqual: bool = False, case: bool = True) -> ArrayString:
55
+ final_values = ArrayString([])
56
+ ignore_idx: list[int] = []
57
+
58
+ for txt in self.key_words:
59
+ all_idx: list[int] = find_all_index(txt, values, iqual=iqual, case=case)
60
+ if len(all_idx) > 0:
61
+ for i in all_idx:
62
+ if not i in ignore_idx:
63
+ final_values.append(values[i])
64
+ ignore_idx.append(i)
65
+ return final_values