from __future__ import annotations
import io
from typing import List, Iterator, Tuple, Optional, Any, TYPE_CHECKING, Callable
from ctypes import *
from datetime import datetime
from numbers import Number
from pdftools_sdk.internal import _lib
from pdftools_sdk.internal.utils import _string_to_utf16, _utf16_to_string
from pdftools_sdk.internal.streams import _StreamDescriptor, _NativeStream
from pdftools_sdk.internal.native_base import _NativeBase
from pdftools_sdk.internal.native_object import _NativeObject
import pdftools_sdk.internal
if TYPE_CHECKING:
from pdftools_sdk.ocr.barcode_handling import BarcodeHandling
else:
BarcodeHandling = "pdftools_sdk.ocr.barcode_handling.BarcodeHandling"
[docs]
class BarcodeOptions(_NativeObject):
"""
Options for barcode and QR code recognition
Detected barcodes are written either to the document's XMP metadata
(:attr:`pdftools_sdk.ocr.barcode_handling.BarcodeHandling.EMBED` ) or to a caller-supplied
XML stream (:attr:`pdftools_sdk.ocr.barcode_handling.BarcodeHandling.EXTRACT` ), depending
on :attr:`pdftools_sdk.ocr.barcode_options.BarcodeOptions.mode` .
Barcode detection is performed by the OCR engine and depends on the
type and settings of the engine as well as the parameters
:class:`pdftools_sdk.ocr.image_options.ImageOptions` and :class:`pdftools_sdk.ocr.page_options.PageOptions` . To enable
recognition, all three of the following must be configured:
(1) pass an engine created with `Engine.Create("barcodes")`
to :meth:`pdftools_sdk.ocr.processor.Processor.process` ;
(2) set :attr:`pdftools_sdk.ocr.barcode_options.BarcodeOptions.mode` to :attr:`pdftools_sdk.ocr.barcode_handling.BarcodeHandling.EMBED`
or :attr:`pdftools_sdk.ocr.barcode_handling.BarcodeHandling.EXTRACT` ;
(3) configure :class:`pdftools_sdk.ocr.page_options.PageOptions` or :class:`pdftools_sdk.ocr.image_options.ImageOptions`
so that pages are submitted to the engine (typically
:attr:`pdftools_sdk.ocr.page_options.PageOptions.mode` = :attr:`pdftools_sdk.ocr.page_processing_mode.PageProcessingMode.ALL` ).
Setting :attr:`pdftools_sdk.ocr.barcode_options.BarcodeOptions.mode` alone has no effect.
Note: Available only on Windows x86 and x64.
"""
[docs]
def __init__(self):
"""
"""
_lib.PdfToolsOcr_BarcodeOptions_New.argtypes = []
_lib.PdfToolsOcr_BarcodeOptions_New.restype = c_void_p
ret_val = _lib.PdfToolsOcr_BarcodeOptions_New()
if ret_val is None:
_NativeBase._throw_last_error(False)
super()._initialize(ret_val)
@property
def mode(self) -> BarcodeHandling:
"""
How recognized barcodes are returned
Default value: :attr:`pdftools_sdk.ocr.barcode_handling.BarcodeHandling.NONE`
Returns:
pdftools_sdk.ocr.barcode_handling.BarcodeHandling
"""
from pdftools_sdk.ocr.barcode_handling import BarcodeHandling
_lib.PdfToolsOcr_BarcodeOptions_GetMode.argtypes = [c_void_p]
_lib.PdfToolsOcr_BarcodeOptions_GetMode.restype = c_int
ret_val = _lib.PdfToolsOcr_BarcodeOptions_GetMode(self._handle)
if ret_val == 0:
_NativeBase._throw_last_error()
return BarcodeHandling(ret_val)
@mode.setter
def mode(self, val: BarcodeHandling) -> None:
"""
How recognized barcodes are returned
Default value: :attr:`pdftools_sdk.ocr.barcode_handling.BarcodeHandling.NONE`
Args:
val (pdftools_sdk.ocr.barcode_handling.BarcodeHandling):
property value
"""
from pdftools_sdk.ocr.barcode_handling import BarcodeHandling
if not isinstance(val, BarcodeHandling):
raise TypeError(f"Expected type {BarcodeHandling.__name__}, but got {type(val).__name__}.")
_lib.PdfToolsOcr_BarcodeOptions_SetMode.argtypes = [c_void_p, c_int]
_lib.PdfToolsOcr_BarcodeOptions_SetMode.restype = c_bool
if not _lib.PdfToolsOcr_BarcodeOptions_SetMode(self._handle, c_int(val.value)):
_NativeBase._throw_last_error(False)
@property
def xml_output_stream(self) -> Optional[io.IOBase]:
raise AttributeError("The 'xml_output_stream' property is write-only.")
@xml_output_stream.setter
def xml_output_stream(self, val: Optional[io.IOBase]) -> None:
"""
Stream that receives recognized barcodes as XML
Required if and only if :attr:`pdftools_sdk.ocr.barcode_options.BarcodeOptions.mode` is
:attr:`pdftools_sdk.ocr.barcode_handling.BarcodeHandling.EXTRACT` .
Default value: `None`
Args:
val (Optional[io.IOBase]):
property value
"""
if val is not None and not isinstance(val, io.IOBase):
raise TypeError(f"Expected type {io.IOBase.__name__} or None, but got {type(val).__name__}.")
_lib.PdfToolsOcr_BarcodeOptions_SetXmlOutputStream.argtypes = [c_void_p, POINTER(pdftools_sdk.internal.streams._StreamDescriptor)]
_lib.PdfToolsOcr_BarcodeOptions_SetXmlOutputStream.restype = c_bool
if not _lib.PdfToolsOcr_BarcodeOptions_SetXmlOutputStream(self._handle, _StreamDescriptor(val) if val is not None else None):
_NativeBase._throw_last_error(False)
@staticmethod
def _create_dynamic_type(handle):
return BarcodeOptions._from_handle(handle)
@classmethod
def _from_handle(cls, handle):
"""
Internal factory method for constructing an instance using an internal handle.
This method creates an instance of the class by bypassing the public constructor.
"""
instance = BarcodeOptions.__new__(cls) # Bypass __init__
instance._initialize(handle)
return instance
def _initialize(self, handle):
super()._initialize(handle)