convert-stream 2.2.6__tar.gz → 2.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 (33) hide show
  1. {convert_stream-2.2.6 → convert_stream-2.3}/PKG-INFO +5 -5
  2. {convert_stream-2.2.6 → convert_stream-2.3}/README.md +4 -4
  3. convert_stream-2.3/convert_stream/__init__.py +100 -0
  4. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/_version.py +2 -2
  5. convert_stream-2.2.6/convert_stream/stream.py → convert_stream-2.3/convert_stream/doc_stream.py +51 -18
  6. convert_stream-2.3/convert_stream/enum_libs/__init__.py +0 -0
  7. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/enum_libs/modules.py +25 -25
  8. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/image/img_object.py +92 -85
  9. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/pdf/__init__.py +2 -2
  10. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/pdf/pdf_document.py +143 -73
  11. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/pdf/pdf_page.py +18 -22
  12. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/pdf/pdf_to_image.py +59 -49
  13. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/table_files.py +1 -1
  14. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream.egg-info/PKG-INFO +5 -5
  15. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream.egg-info/SOURCES.txt +2 -1
  16. {convert_stream-2.2.6 → convert_stream-2.3}/pyproject.toml +1 -1
  17. convert_stream-2.2.6/convert_stream/__init__.py +0 -32
  18. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/__main__.py +0 -0
  19. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/enum_libs/enums.py +0 -0
  20. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/image/__init__.py +0 -0
  21. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/pdf/image_to_pdf.py +0 -0
  22. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/sheets/__init__.py +0 -0
  23. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/sheets/load.py +0 -0
  24. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/sheets/parse.py +0 -0
  25. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/sheets/save.py +0 -0
  26. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/text/__init__.py +0 -0
  27. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/text/date.py +0 -0
  28. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/text/string.py +0 -0
  29. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream/text/terminal.py +0 -0
  30. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream.egg-info/dependency_links.txt +0 -0
  31. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream.egg-info/requires.txt +0 -0
  32. {convert_stream-2.2.6 → convert_stream-2.3}/convert_stream.egg-info/top_level.txt +0 -0
  33. {convert_stream-2.2.6 → convert_stream-2.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: convert_stream
3
- Version: 2.2.6
3
+ Version: 2.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
@@ -24,12 +24,12 @@ pip3 install -r requirements.txt
24
24
  >>> from file import File, Directory
25
25
  >>> from pdflib import PdfStream
26
26
  # instâncie o caminho do arquivo PDF e o diretório para exportar os dados.
27
- f = File('path/to/file.pdf')
28
- d = Directory('path/to/save')
27
+ file_pdf = File('path/to/file.pdf')
28
+ output_dir = Directory('path/to/save')
29
29
 
30
30
  pdf_stream = PdfStream()
31
- pdf_stream.add_file_pdf(f)
32
- pdf_stream.to_files_pdf(d) # isso irá converter cada página em um arquivo PDF
31
+ pdf_stream.add_file_pdf(file_pdf)
32
+ pdf_stream.to_files_pdf(output_dir) # isso irá converter cada página em um arquivo PDF
33
33
 
34
34
  # Uso para unir vários arquivos PDF.
35
35
  >>> from file import File, Directory
@@ -6,12 +6,12 @@ pip3 install -r requirements.txt
6
6
  >>> from file import File, Directory
7
7
  >>> from pdflib import PdfStream
8
8
  # instâncie o caminho do arquivo PDF e o diretório para exportar os dados.
9
- f = File('path/to/file.pdf')
10
- d = Directory('path/to/save')
9
+ file_pdf = File('path/to/file.pdf')
10
+ output_dir = Directory('path/to/save')
11
11
 
12
12
  pdf_stream = PdfStream()
13
- pdf_stream.add_file_pdf(f)
14
- pdf_stream.to_files_pdf(d) # isso irá converter cada página em um arquivo PDF
13
+ pdf_stream.add_file_pdf(file_pdf)
14
+ pdf_stream.to_files_pdf(output_dir) # isso irá converter cada página em um arquivo PDF
15
15
 
16
16
  # Uso para unir vários arquivos PDF.
17
17
  >>> from file import File, Directory
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+ from io import BytesIO
4
+ from typing import Union
5
+ from soup_files import File, Directory, LibraryDocs, InputFiles
6
+
7
+ from ._version import (
8
+ __module_name__, __author__, __license__, __modify_date__, __version__
9
+ )
10
+ from convert_stream.enum_libs.enums import *
11
+ from convert_stream.enum_libs.modules import (
12
+ LibPDF, LibDate, LibImage, LibPdfToImage, LibImageToPdf,
13
+ DEFAULT_LIB_PDF, DEFAULT_LIB_IMAGE, DEFAULT_LIB_PDF_TO_IMG,
14
+ DEFAULT_LIB_IMAGE_TO_PDF, ModPdfToImage, ModPagePdf, ModuleImage,
15
+ ModImageToPdf, MOD_FITZ, MOD_PYPDF, MOD_CANVAS, MOD_IMG_PIL, MOD_IMG_OPENCV,
16
+ )
17
+ from .text.terminal import print_title, print_line
18
+ from .text.string import (
19
+ FindText, ArrayString, MapText
20
+ )
21
+ from .text.date import ConvertStringDate
22
+ from convert_stream.image.img_object import (
23
+ ImageObject, Image, MatLike, get_hash_from_bytes, CollectionImages,
24
+ )
25
+ from convert_stream.pdf import (
26
+ PageDocumentPdf, DocumentPdf, ConvertImageToPdf, ConvertPdfToImages,
27
+ ModImageToPdf, ModDocPdf, CollectionPagePdf, DEFAULT_LIB_PDF,
28
+ DEFAULT_LIB_IMAGE_TO_PDF, DEFAULT_LIB_PDF_TO_IMG
29
+ )
30
+ from .doc_stream import PdfStream, SplitPdf
31
+ from .sheets import save_data, ReadFileSheet
32
+ from .table_files import (
33
+ get_void_df, create_df_from_file_pdf, create_map_from_values,
34
+ FileToTable, ColumnsTable, PdfFinder, SearchableTextPdf
35
+ )
36
+
37
+
38
+ def __create_stream() -> PdfStream:
39
+ st = PdfStream()
40
+ st.clear()
41
+ return st
42
+
43
+
44
+ def read_pdf(file: Union[str, File, bytes, BytesIO]) -> PdfStream:
45
+ _pdf_stream = __create_stream()
46
+
47
+ if isinstance(file, File):
48
+ _pdf_stream.add_file_pdf(file)
49
+ elif isinstance(file, str):
50
+ _pdf_stream.add_file_pdf(File(file))
51
+ elif isinstance(file, bytes):
52
+ _pdf_stream.add_document(DocumentPdf(BytesIO(file)))
53
+ elif isinstance(file, BytesIO):
54
+ _pdf_stream.add_document(DocumentPdf(file))
55
+ else:
56
+ raise ValueError()
57
+ return _pdf_stream
58
+
59
+
60
+ def read_files_pdf(files: Union[list[str], list[File]]) -> PdfStream:
61
+ _pdf_stream = __create_stream()
62
+ if len(files) == 0:
63
+ return _pdf_stream
64
+
65
+ if isinstance(files[0], str):
66
+ for f in files:
67
+ _pdf_stream.add_file_pdf(File(f))
68
+ elif isinstance(files[0], File):
69
+ _pdf_stream.add_files_pdf(files)
70
+ else:
71
+ raise ValueError()
72
+ return _pdf_stream
73
+
74
+
75
+ def read_image(image: Union[str, File, bytes, BytesIO]) -> PdfStream:
76
+ _pdf_stream = __create_stream()
77
+ if isinstance(image, str):
78
+ _pdf_stream.add_file_image(File(image))
79
+ elif isinstance(image, File):
80
+ _pdf_stream.add_image(ImageObject.create_from_file(image))
81
+ elif isinstance(image, bytes):
82
+ _pdf_stream.add_image(ImageObject.create_from_bytes(image))
83
+ elif isinstance(image, BytesIO):
84
+ image.seek(0)
85
+ _pdf_stream.add_image(ImageObject.create_from_bytes(image.getvalue()))
86
+ else:
87
+ raise ValueError()
88
+ return _pdf_stream
89
+
90
+
91
+ def merge(stream: list[PdfStream]) -> PdfStream:
92
+ if len(stream) == 0:
93
+ raise ValueError()
94
+ if len(stream) == 1:
95
+ return stream[0]
96
+ else:
97
+ s = stream[0]
98
+ for pdf_stream in stream[1:]:
99
+ s.add_pages(pdf_stream.to_document().to_pages())
100
+ return s
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
 
4
- __version__ = '2.2'
4
+ __version__ = '2.2.7'
5
5
  __author__ = 'Bruno Chaves'
6
6
  __license__ = 'MIT'
7
7
  __module_name__ = 'convert_stream'
8
- __modify_date__ = '2025-08-24'
8
+ __modify_date__ = '2025-09-08'
9
9
 
@@ -8,7 +8,6 @@ from convert_stream.enum_libs.modules import (
8
8
  DEFAULT_LIB_PDF, DEFAULT_LIB_IMAGE, DEFAULT_LIB_PDF_TO_IMG, DEFAULT_LIB_IMAGE_TO_PDF,
9
9
  )
10
10
  from convert_stream.enum_libs.enums import LibPDF, LibImage, LibImageToPdf, LibPdfToImage
11
- from convert_stream.text.string import FindText
12
11
  from convert_stream.pdf.pdf_page import PageDocumentPdf
13
12
  from convert_stream.image.img_object import ImageObject, CollectionImages
14
13
  from convert_stream.pdf.pdf_document import DocumentPdf, CollectionPagePdf
@@ -108,22 +107,43 @@ class PdfStream(object):
108
107
  def add_directory_image(self, src_dir: Directory, max_files: int = 4000) -> None:
109
108
  self.collection_images.add_directory_images(src_dir, max_files=max_files)
110
109
 
111
- def to_document(self) -> DocumentPdf:
110
+ def to_document(self, *, land_scape: bool = False, a4: bool = False) -> DocumentPdf:
111
+ """
112
+
113
+ Converte os documentos adicionados em PdfStream (imagens/pdfs) em
114
+ objeto do tipo DocumentPdf().
115
+ """
112
116
  if self.collection_pages.is_null and self.collection_images.is_empty:
113
117
  raise ValueError('Adicione imagens e/ou documentos para prosseguir!')
118
+
114
119
  _doc = None
115
- if not self.collection_pages.is_null:
116
- _doc = DocumentPdf.create_from_pages(self.collection_pages.pages)
117
120
  if not self.collection_images.is_empty:
118
- _convert_img_to_pdf = ConvertImageToPdf(self.collection_images)
119
- _pages = _convert_img_to_pdf.to_document().to_pages()
120
- self.collection_images.clear()
121
+ _convert = ConvertImageToPdf(self.collection_images, lib_img_to_pdf=self.lib_img_to_pdf)
122
+ _doc: DocumentPdf = _convert.to_document(land_scape, a4=a4)
123
+ if not self.collection_pages.is_null:
121
124
  if _doc is None:
122
- _doc = DocumentPdf.create_from_pages(_pages)
125
+ _doc: DocumentPdf = self.collection_pages.to_document(self.lib_pdf)
123
126
  else:
124
- _doc.add_pages(_pages)
127
+ _doc.add_pages(self.collection_pages.pages)
125
128
  return _doc
126
129
 
130
+ def thresold(self, *, land_scape: bool = False, a4: bool = False, dpi=300) -> DocumentPdf:
131
+ images: list[ImageObject] = self.collection_images.images
132
+ if not self.collection_pages.is_null:
133
+ tmp_doc = DocumentPdf.create_from_pages(self.collection_pages.pages)
134
+ conv_pdf_to_img = ConvertPdfToImages.create(tmp_doc)
135
+ images.extend(conv_pdf_to_img.to_images(dpi=dpi))
136
+ del tmp_doc
137
+ if len(images) == 0:
138
+ raise ValueError('Adicione imagens para prosseguir!')
139
+ if land_scape:
140
+ for img in images:
141
+ img.set_landscape()
142
+ for i in images:
143
+ i.set_threshold_gray()
144
+ conv_img_to_pdf = ConvertImageToPdf(CollectionImages(images), lib_img_to_pdf=self.lib_img_to_pdf)
145
+ return conv_img_to_pdf.to_document(a4=a4)
146
+
127
147
  def to_files_images(
128
148
  self,
129
149
  output_dir: Directory, *,
@@ -134,16 +154,20 @@ class PdfStream(object):
134
154
  if self.collection_pages.is_null and self.collection_images.is_empty:
135
155
  raise ValueError('Adicione imagens e/ou documentos para prosseguir!')
136
156
  self.progress.start()
157
+
158
+ image_stream = ImageStream()
159
+ if not self.collection_images.is_empty:
160
+ image_stream.add_images(self.collection_images.images)
137
161
  if not self.collection_pages.is_null:
138
162
  self.progress.update_text('Processando Imagens')
139
163
  # Criar um documento a partir das páginas
140
164
  doc_pdf = DocumentPdf.create_from_pages(self.collection_pages.pages)
141
165
  convert_pdf_to_img = ConvertPdfToImages.create(doc_pdf)
142
166
  # Converter as páginas PDF em imagens e adicionar a coleção já existe de imagens.
143
- self.collection_images.add_images(convert_pdf_to_img.to_images(dpi=dpi))
144
- self.collection_pages.clear()
167
+ _pdf_to_images: list[ImageObject] = convert_pdf_to_img.to_images(dpi=dpi)
168
+ image_stream.add_images(_pdf_to_images)
145
169
  # Exportar para arquivos.
146
- self.collection_images.to_files_image(output_dir, replace=replace, land_scape=land_scape)
170
+ image_stream.to_files_image(output_dir, replace=replace, land_scape=land_scape)
147
171
  self.progress.stop()
148
172
 
149
173
  def to_files_pdf(
@@ -151,21 +175,27 @@ class PdfStream(object):
151
175
  output_dir: Directory, *,
152
176
  replace: bool = False,
153
177
  land_scape: bool = False,
178
+ a4: bool = False,
179
+ prefix: str = None,
154
180
  ) -> None:
155
181
  if self.collection_pages.is_null and self.collection_images.is_empty:
156
182
  raise ValueError('Adicione imagens e/ou documentos para prosseguir!')
183
+ pages_document = []
157
184
  if not self.collection_pages.is_null:
158
- convert_img_to_pdf = ConvertImageToPdf(self.collection_images)
159
- self.collection_pages.add_pages(convert_img_to_pdf.to_document().to_pages())
160
- self.collection_images.clear()
185
+ pages_document.extend(self.collection_pages.pages)
186
+ if not self.collection_images.is_empty:
187
+ img_to_pdf = ConvertImageToPdf(self.collection_images, lib_img_to_pdf=self.lib_img_to_pdf)
188
+ tmp_document = img_to_pdf.to_document(land_scape, a4=a4)
189
+ pages_document.extend(tmp_document.to_pages())
190
+ final_collection = CollectionPagePdf(pages_document)
161
191
  if land_scape:
162
- self.collection_pages.set_land_scape()
163
- self.collection_pages.to_files_pdf(output_dir, replace=replace)
192
+ final_collection.set_land_scape()
193
+ final_collection.to_files_pdf(output_dir, replace=replace, prefix=prefix)
164
194
 
165
195
 
166
196
  class SplitPdf(object):
167
197
 
168
- def __init__(self, pages: list[PageDocumentPdf], pbar: ProgressBarAdapter = ProgressBarAdapter()):
198
+ def __init__(self, pages: list[PageDocumentPdf] = [], pbar: ProgressBarAdapter = ProgressBarAdapter()):
169
199
  self.pbar: ProgressBarAdapter = pbar
170
200
  self.__collection_pages: CollectionPagePdf = CollectionPagePdf(pages)
171
201
  self.__collection_pages.set_pbar(self.pbar)
@@ -173,6 +203,9 @@ class SplitPdf(object):
173
203
  def is_empty(self) -> bool:
174
204
  return self.__collection_pages.is_null
175
205
 
206
+ def add_pages_pdf(self, pages: list[PageDocumentPdf]) -> None:
207
+ self.__collection_pages.add_pages(pages)
208
+
176
209
  def export(self, output_dir: Directory, *, replace: bool = False, prefix: str = 'pag') -> None:
177
210
  if self.is_empty():
178
211
  self.pbar.update_text(f'O Documento está vazio!')
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  from __future__ import annotations
4
- from typing import Union, TypeAlias
4
+ from typing import Union, TypeAlias, Any
5
5
  from convert_stream.enum_libs.enums import *
6
6
 
7
7
  MOD_IMG_PIL: bool = False
@@ -18,16 +18,16 @@ try:
18
18
  from cv2.typing import MatLike
19
19
  MOD_IMG_OPENCV = True
20
20
  except ImportError:
21
- cv2.typing.MatLike = object
22
- MatLike = None
21
+ cv2.typing.MatLike = Any
22
+ MatLike = Any
23
23
 
24
24
  try:
25
25
  from PIL import Image
26
26
  from PIL import ImageOps, ImageFilter
27
27
  MOD_IMG_PIL = True
28
28
  except ImportError:
29
- Image = None
30
- Image.Image = None
29
+ Image = Any
30
+ Image.Image = Any
31
31
 
32
32
  if MOD_IMG_OPENCV and MOD_IMG_PIL:
33
33
  ModuleImage: TypeAlias = Union[MatLike, Image.Image]
@@ -40,7 +40,7 @@ elif MOD_IMG_PIL:
40
40
  DEFAULT_LIB_IMAGE = LibImage.PIL
41
41
  else:
42
42
  DEFAULT_LIB_IMAGE = LibImage.NOT_IMPLEMENTED
43
- ModuleImage = None # fallback para runtime
43
+ ModuleImage = Any # fallback para runtime
44
44
 
45
45
  #=================================================================#
46
46
  # Módulos para PDF fitz e pypdf
@@ -54,34 +54,34 @@ except ImportError:
54
54
  import pymupdf as fitz
55
55
  MOD_FITZ = True
56
56
  except ImportError:
57
- fitz = None
58
- fitz.Page = None
59
- fitz.TextPage = None
57
+ fitz = Any
58
+ fitz.Page = Any
59
+ fitz.TextPage = Any
60
60
 
61
61
  try:
62
62
  from pypdf import PdfWriter, PdfReader, PageObject
63
63
  MOD_PYPDF = True
64
64
  except ImportError:
65
- PageObject = None
66
- PdfReader = None
67
- PdfWriter = None
65
+ PageObject = Any
66
+ PdfReader = Any
67
+ PdfWriter = Any
68
68
 
69
69
 
70
70
  if MOD_FITZ and MOD_PYPDF:
71
- ModulePagePdf: TypeAlias = Union[PageObject, fitz.Page]
72
- ModuleDocPdf: TypeAlias = Union[fitz.Document, PdfWriter]
71
+ ModPagePdf = Union[PageObject, fitz.Page]
72
+ ModDocPdf = Union[fitz.Document, PdfWriter]
73
73
  DEFAULT_LIB_PDF = LibPDF.FITZ
74
74
  elif MOD_FITZ:
75
- ModulePagePdf: TypeAlias = Union[fitz.Page]
76
- ModuleDocPdf: TypeAlias = Union[fitz.Document]
75
+ ModPagePdf = Union[fitz.Page]
76
+ ModDocPdf = Union[fitz.Document]
77
77
  DEFAULT_LIB_PDF = LibPDF.FITZ
78
78
  elif MOD_PYPDF:
79
- ModulePagePdf: TypeAlias = Union[PageObject]
80
- ModuleDocPdf: TypeAlias = Union[PdfWriter]
79
+ ModPagePdf = Union[PageObject]
80
+ ModDocPdf = Union[PdfWriter]
81
81
  DEFAULT_LIB_PDF = LibPDF.PYPDF
82
82
  else:
83
- ModulePagePdf = None # fallback para runtime
84
- ModuleDocPdf: TypeAlias = None
83
+ ModPagePdf = Any # fallback para runtime
84
+ ModDocPdf = Any
85
85
  DEFAULT_LIB_PDF = LibPDF.NOT_IMPLEMENTED
86
86
 
87
87
  #=================================================================#
@@ -95,10 +95,10 @@ try:
95
95
  from reportlab.lib.utils import ImageReader
96
96
  MOD_CANVAS = True
97
97
  except ImportError:
98
- canvas = None
99
- Canvas = None
98
+ canvas = Any
99
+ Canvas = Any
100
100
  letter = (612, 792)
101
- ImageReader = None
101
+ ImageReader = Any
102
102
 
103
103
  if MOD_CANVAS and MOD_FITZ and MOD_IMG_PIL:
104
104
  ModImageToPdf: TypeAlias = Union[canvas, fitz.Page, Image]
@@ -113,7 +113,7 @@ elif MOD_IMG_PIL:
113
113
  ModImageToPdf: TypeAlias = Union[Image]
114
114
  DEFAULT_LIB_IMAGE_TO_PDF = LibImageToPdf.IMAGE_TO_PDF_PIL
115
115
  else:
116
- ModImageToPdf = None
116
+ ModImageToPdf = Any
117
117
  DEFAULT_LIB_IMAGE_TO_PDF = LibImageToPdf.NOT_IMPLEMENTED
118
118
 
119
119
  #=================================================================#
@@ -125,4 +125,4 @@ if MOD_FITZ:
125
125
  ModPdfToImage: TypeAlias = Union[fitz]
126
126
  else:
127
127
  DEFAULT_LIB_PDF_TO_IMG = LibPdfToImage.NOT_IMPLEMENTED
128
- ModPdfToImage = None
128
+ ModPdfToImage = Any