code: def read(self, table: TableCatalogEntry) -> Iterator[Batch]:
      for image_files in self._rdb_handler.read(
          self._get_metadata_table(table), 12
      ):
          for _, (row_id, file_name, _) in image_files.iterrows():
              system_file_name = self._xform_file_url_to_file_name(
                  file_name
              )
              image_file = Path(table.file_url) / system_file_name
              # setting batch_mem_size = 1, we need fix it
              reader = PDFReader(str(image_file), batch_mem_size=1)
              for batch in reader.read():
                  batch.frames[table.columns[0].name] = row_id
                  batch.frames[table.columns[1].name] = str(file_name)
                  batch.frames[ROW_NUM_COLUMN] = (
                      row_id * ROW_NUM_MAGIC
                      + batch.frames[ROW_NUM_COLUMN]
                  )
                  yield batch
  
file_path: evadb/evadb/storage/pdf_storage_engine.py
imports: from pathlib import Path
  from typing import Iterator
  from evadb.catalog.models.table_catalog import TableCatalogEntry
  from evadb.catalog.sql_config import ROW_NUM_COLUMN, ROW_NUM_MAGIC
  from evadb.database import EvaDBDatabase
  from evadb.models.storage.batch import Batch
  from evadb.readers.pdf_reader import PDFReader
  from evadb.storage.abstract_media_storage_engine import AbstractMediaStorageEngine
label_desc: Use image node_id 2 for calling the PDFStorageEngine obj's underlying member method code with example usage: obj.read(table) without return types