diff --git a/docs/conf.py b/docs/conf.py index 7d98cf011..3b19fdf5b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -46,7 +46,7 @@ # built documents. # # The full version, including alpha/beta/rc tags. -_path = os.path.abspath(f'{__file__}/../../fitz/version.i') +_path = os.path.abspath(f'{__file__}/../../src/__init__.py') with open(_path) as f: for line in f: match = re.search('VersionBind = "([0-9][.][0-9]+[.][0-9]+(rc[0-9]+)?)"', line) diff --git a/fitz/__init__.py b/fitz/__init__.py deleted file mode 100644 index 6b88588de..000000000 --- a/fitz/__init__.py +++ /dev/null @@ -1,511 +0,0 @@ -# ------------------------------------------------------------------------ -# Copyright 2020-2022, Harald Lieder, mailto:harald.lieder@outlook.com -# License: GNU AFFERO GPL 3.0, https://www.gnu.org/licenses/agpl-3.0.html -# -# Part of "PyMuPDF", a Python binding for "MuPDF" (http://mupdf.com), a -# lightweight PDF, XPS, and E-book viewer, renderer and toolkit which is -# maintained and developed by Artifex Software, Inc. https://artifex.com. -# ------------------------------------------------------------------------ -import sys - -import glob -import os -if os.path.exists( 'fitz/__init__.py'): - if not glob.glob( 'fitz/_fitz*'): - print( '#' * 40) - print( '# Warning: current directory appears to contain an incomplete') - print( '# fitz/ installation directory so "import fitz" may fail.') - print( '# This can happen if current directory is a PyMuPDF source tree.') - print( '# Suggest changing to a different current directory.') - print( '#' * 40) - -from fitz.fitz import * - -# define the supported colorspaces for convenience -fitz.csRGB = fitz.Colorspace(fitz.CS_RGB) -fitz.csGRAY = fitz.Colorspace(fitz.CS_GRAY) -fitz.csCMYK = fitz.Colorspace(fitz.CS_CMYK) -csRGB = fitz.csRGB -csGRAY = fitz.csGRAY -csCMYK = fitz.csCMYK - -# create the TOOLS object. -# -# Unfortunately it seems that this is never be destructed even if we use an -# atexit() handler, which makes MuPDF's Memento list it as a leak. In fitz.i -# we use Memento_startLeaking()/Memento_stopLeaking() when allocating -# the Tools instance so at least the leak is marked as known. -# -TOOLS = fitz.Tools() -TOOLS.thisown = True -fitz.TOOLS = TOOLS - -# This atexit handler runs, but doesn't cause ~Tools() to be run. -# -import atexit - - -def cleanup_tools(TOOLS): - # print(f'cleanup_tools: TOOLS={TOOLS} id(TOOLS)={id(TOOLS)}') - # print(f'TOOLS.thisown={TOOLS.thisown}') - del TOOLS - del fitz.TOOLS - - -atexit.register(cleanup_tools, TOOLS) - - -# Require that MuPDF matches fitz.TOOLS.mupdf_version(); also allow use with -# next minor version (e.g. 1.21.2 => 1.22), so we can test with mupdf master. -# -def v_str_to_tuple(s): - return tuple(map(int, s.split('.'))) - -def v_tuple_to_string(t): - return '.'.join(map(str, t)) - -mupdf_version_tuple = v_str_to_tuple(fitz.TOOLS.mupdf_version()) -mupdf_version_tuple_required = v_str_to_tuple(fitz.VersionFitz) -mupdf_version_tuple_required_prev = (mupdf_version_tuple_required[0], mupdf_version_tuple_required[1]-1) -mupdf_version_tuple_required_next = (mupdf_version_tuple_required[0], mupdf_version_tuple_required[1]+1) - -if mupdf_version_tuple[:2] not in ( - mupdf_version_tuple_required_prev[:2], - mupdf_version_tuple_required[:2], - mupdf_version_tuple_required_next[:2], - ): - raise ValueError( - f'MuPDF library {v_tuple_to_string(mupdf_version_tuple)!r} mismatch:' - f' require' - f' {v_tuple_to_string(mupdf_version_tuple_required_prev)!r}' - f' or {v_tuple_to_string(mupdf_version_tuple_required)!r}' - f' or {v_tuple_to_string(mupdf_version_tuple_required_next)!r}' - f'.' - ) - -# copy functions in 'utils' to their respective fitz classes -import fitz.utils -from .table import find_tables - -# ------------------------------------------------------------------------------ -# General -# ------------------------------------------------------------------------------ -fitz.recover_quad = fitz.utils.recover_quad -fitz.recover_bbox_quad = fitz.utils.recover_bbox_quad -fitz.recover_line_quad = fitz.utils.recover_line_quad -fitz.recover_span_quad = fitz.utils.recover_span_quad -fitz.recover_char_quad = fitz.utils.recover_char_quad - -# ------------------------------------------------------------------------------ -# Document -# ------------------------------------------------------------------------------ -fitz.open = fitz.Document -fitz.Document._do_links = fitz.utils.do_links -fitz.Document.del_toc_item = fitz.utils.del_toc_item -fitz.Document.get_char_widths = fitz.utils.get_char_widths -fitz.Document.get_ocmd = fitz.utils.get_ocmd -fitz.Document.get_page_labels = fitz.utils.get_page_labels -fitz.Document.get_page_numbers = fitz.utils.get_page_numbers -fitz.Document.get_page_pixmap = fitz.utils.get_page_pixmap -fitz.Document.get_page_text = fitz.utils.get_page_text -fitz.Document.get_toc = fitz.utils.get_toc -fitz.Document.has_annots = fitz.utils.has_annots -fitz.Document.has_links = fitz.utils.has_links -fitz.Document.insert_page = fitz.utils.insert_page -fitz.Document.new_page = fitz.utils.new_page -fitz.Document.scrub = fitz.utils.scrub -fitz.Document.search_page_for = fitz.utils.search_page_for -fitz.Document.set_metadata = fitz.utils.set_metadata -fitz.Document.set_ocmd = fitz.utils.set_ocmd -fitz.Document.set_page_labels = fitz.utils.set_page_labels -fitz.Document.set_toc = fitz.utils.set_toc -fitz.Document.set_toc_item = fitz.utils.set_toc_item -fitz.Document.tobytes = fitz.Document.write -fitz.Document.subset_fonts = fitz.utils.subset_fonts -fitz.Document.get_oc = fitz.utils.get_oc -fitz.Document.set_oc = fitz.utils.set_oc -fitz.Document.xref_copy = fitz.utils.xref_copy - - -# ------------------------------------------------------------------------------ -# Page -# ------------------------------------------------------------------------------ -fitz.Page.apply_redactions = fitz.utils.apply_redactions -fitz.Page.delete_widget = fitz.utils.delete_widget -fitz.Page.draw_bezier = fitz.utils.draw_bezier -fitz.Page.draw_circle = fitz.utils.draw_circle -fitz.Page.draw_curve = fitz.utils.draw_curve -fitz.Page.draw_line = fitz.utils.draw_line -fitz.Page.draw_oval = fitz.utils.draw_oval -fitz.Page.draw_polyline = fitz.utils.draw_polyline -fitz.Page.draw_quad = fitz.utils.draw_quad -fitz.Page.draw_rect = fitz.utils.draw_rect -fitz.Page.draw_sector = fitz.utils.draw_sector -fitz.Page.draw_squiggle = fitz.utils.draw_squiggle -fitz.Page.draw_zigzag = fitz.utils.draw_zigzag -fitz.Page.get_links = fitz.utils.get_links -fitz.Page.get_pixmap = fitz.utils.get_pixmap -fitz.Page.get_text = fitz.utils.get_text -fitz.Page.get_image_info = fitz.utils.get_image_info -fitz.Page.get_text_blocks = fitz.utils.get_text_blocks -fitz.Page.get_text_selection = fitz.utils.get_text_selection -fitz.Page.get_text_words = fitz.utils.get_text_words -fitz.Page.get_textbox = fitz.utils.get_textbox -fitz.Page.insert_image = fitz.utils.insert_image -fitz.Page.insert_link = fitz.utils.insert_link -fitz.Page.insert_text = fitz.utils.insert_text -fitz.Page.insert_textbox = fitz.utils.insert_textbox -fitz.Page.new_shape = lambda x: fitz.utils.Shape(x) -fitz.Page.search_for = fitz.utils.search_for -fitz.Page.show_pdf_page = fitz.utils.show_pdf_page -fitz.Page.update_link = fitz.utils.update_link -fitz.Page.write_text = fitz.utils.write_text -fitz.Page.get_label = fitz.utils.get_label -fitz.Page.get_image_rects = fitz.utils.get_image_rects -fitz.Page.get_textpage_ocr = fitz.utils.get_textpage_ocr -fitz.Page.delete_image = fitz.utils.delete_image -fitz.Page.replace_image = fitz.utils.replace_image -fitz.Page.find_tables = find_tables -# ------------------------------------------------------------------------ -# Annot -# ------------------------------------------------------------------------ -fitz.Annot.get_text = fitz.utils.get_text -fitz.Annot.get_textbox = fitz.utils.get_textbox - -# ------------------------------------------------------------------------ -# Rect and IRect -# ------------------------------------------------------------------------ -fitz.Rect.get_area = fitz.utils.get_area -fitz.IRect.get_area = fitz.utils.get_area - -# ------------------------------------------------------------------------ -# TextWriter -# ------------------------------------------------------------------------ -fitz.TextWriter.fill_textbox = fitz.utils.fill_textbox - - -class FitzDeprecation(DeprecationWarning): - pass - - -def restore_aliases(): - import warnings - - warnings.filterwarnings( - "once", - category=FitzDeprecation, - ) - - def showthis(msg, cat, filename, lineno, file=None, line=None): - text = warnings.formatwarning(msg, cat, filename, lineno, line=line) - s = text.find("FitzDeprecation") - if s < 0: - print(text, file=sys.stderr) - return - text = text[s:].splitlines()[0][4:] - print(text, file=sys.stderr) - - warnings.showwarning = showthis - - def _alias(fitz_class, old, new): - fname = getattr(fitz_class, new) - r = str(fitz_class)[1:-1] - objname = " ".join(r.split()[:2]) - objname = objname.replace("fitz.fitz.", "") - objname = objname.replace("fitz.utils.", "") - if callable(fname): - - def deprecated_function(*args, **kw): - msg = "'%s' removed from %s after v1.19 - use '%s'." % ( - old, - objname, - new, - ) - if not VersionBind.startswith("1.18"): - warnings.warn(msg, category=FitzDeprecation) - return fname(*args, **kw) - - setattr(fitz_class, old, deprecated_function) - else: - if type(fname) is property: - setattr(fitz_class, old, property(fname.fget)) - else: - setattr(fitz_class, old, fname) - - eigen = getattr(fitz_class, old) - x = fname.__doc__ - if not x: - x = "" - try: - if callable(fname) or type(fname) is property: - eigen.__doc__ = ( - "*** Deprecated and removed after v1.19 - use '%s'. ***\n" % new + x - ) - except: - pass - - # deprecated Document aliases - _alias(fitz.Document, "chapterCount", "chapter_count") - _alias(fitz.Document, "chapterPageCount", "chapter_page_count") - _alias(fitz.Document, "convertToPDF", "convert_to_pdf") - _alias(fitz.Document, "copyPage", "copy_page") - _alias(fitz.Document, "deletePage", "delete_page") - _alias(fitz.Document, "deletePageRange", "delete_pages") - _alias(fitz.Document, "embeddedFileAdd", "embfile_add") - _alias(fitz.Document, "embeddedFileCount", "embfile_count") - _alias(fitz.Document, "embeddedFileDel", "embfile_del") - _alias(fitz.Document, "embeddedFileGet", "embfile_get") - _alias(fitz.Document, "embeddedFileInfo", "embfile_info") - _alias(fitz.Document, "embeddedFileNames", "embfile_names") - _alias(fitz.Document, "embeddedFileUpd", "embfile_upd") - _alias(fitz.Document, "extractFont", "extract_font") - _alias(fitz.Document, "extractImage", "extract_image") - _alias(fitz.Document, "findBookmark", "find_bookmark") - _alias(fitz.Document, "fullcopyPage", "fullcopy_page") - _alias(fitz.Document, "getCharWidths", "get_char_widths") - _alias(fitz.Document, "getOCGs", "get_ocgs") - _alias(fitz.Document, "getPageFontList", "get_page_fonts") - _alias(fitz.Document, "getPageImageList", "get_page_images") - _alias(fitz.Document, "getPagePixmap", "get_page_pixmap") - _alias(fitz.Document, "getPageText", "get_page_text") - _alias(fitz.Document, "getPageXObjectList", "get_page_xobjects") - _alias(fitz.Document, "getSigFlags", "get_sigflags") - _alias(fitz.Document, "getToC", "get_toc") - _alias(fitz.Document, "getXmlMetadata", "get_xml_metadata") - _alias(fitz.Document, "insertPage", "insert_page") - _alias(fitz.Document, "insertPDF", "insert_pdf") - _alias(fitz.Document, "isDirty", "is_dirty") - _alias(fitz.Document, "isFormPDF", "is_form_pdf") - _alias(fitz.Document, "isPDF", "is_pdf") - _alias(fitz.Document, "isReflowable", "is_reflowable") - _alias(fitz.Document, "isRepaired", "is_repaired") - _alias(fitz.Document, "isStream", "xref_is_stream") - _alias(fitz.Document, "is_stream", "xref_is_stream") - _alias(fitz.Document, "lastLocation", "last_location") - _alias(fitz.Document, "loadPage", "load_page") - _alias(fitz.Document, "makeBookmark", "make_bookmark") - _alias(fitz.Document, "metadataXML", "xref_xml_metadata") - _alias(fitz.Document, "movePage", "move_page") - _alias(fitz.Document, "needsPass", "needs_pass") - _alias(fitz.Document, "newPage", "new_page") - _alias(fitz.Document, "nextLocation", "next_location") - _alias(fitz.Document, "pageCount", "page_count") - _alias(fitz.Document, "pageCropBox", "page_cropbox") - _alias(fitz.Document, "pageXref", "page_xref") - _alias(fitz.Document, "PDFCatalog", "pdf_catalog") - _alias(fitz.Document, "PDFTrailer", "pdf_trailer") - _alias(fitz.Document, "previousLocation", "prev_location") - _alias(fitz.Document, "resolveLink", "resolve_link") - _alias(fitz.Document, "searchPageFor", "search_page_for") - _alias(fitz.Document, "setLanguage", "set_language") - _alias(fitz.Document, "setMetadata", "set_metadata") - _alias(fitz.Document, "setToC", "set_toc") - _alias(fitz.Document, "setXmlMetadata", "set_xml_metadata") - _alias(fitz.Document, "updateObject", "update_object") - _alias(fitz.Document, "updateStream", "update_stream") - _alias(fitz.Document, "xrefLength", "xref_length") - _alias(fitz.Document, "xrefObject", "xref_object") - _alias(fitz.Document, "xrefStream", "xref_stream") - _alias(fitz.Document, "xrefStreamRaw", "xref_stream_raw") - - # deprecated Page aliases - _alias(fitz.Page, "_isWrapped", "is_wrapped") - _alias(fitz.Page, "addCaretAnnot", "add_caret_annot") - _alias(fitz.Page, "addCircleAnnot", "add_circle_annot") - _alias(fitz.Page, "addFileAnnot", "add_file_annot") - _alias(fitz.Page, "addFreetextAnnot", "add_freetext_annot") - _alias(fitz.Page, "addHighlightAnnot", "add_highlight_annot") - _alias(fitz.Page, "addInkAnnot", "add_ink_annot") - _alias(fitz.Page, "addLineAnnot", "add_line_annot") - _alias(fitz.Page, "addPolygonAnnot", "add_polygon_annot") - _alias(fitz.Page, "addPolylineAnnot", "add_polyline_annot") - _alias(fitz.Page, "addRectAnnot", "add_rect_annot") - _alias(fitz.Page, "addRedactAnnot", "add_redact_annot") - _alias(fitz.Page, "addSquigglyAnnot", "add_squiggly_annot") - _alias(fitz.Page, "addStampAnnot", "add_stamp_annot") - _alias(fitz.Page, "addStrikeoutAnnot", "add_strikeout_annot") - _alias(fitz.Page, "addTextAnnot", "add_text_annot") - _alias(fitz.Page, "addUnderlineAnnot", "add_underline_annot") - _alias(fitz.Page, "addWidget", "add_widget") - _alias(fitz.Page, "cleanContents", "clean_contents") - _alias(fitz.Page, "CropBox", "cropbox") - _alias(fitz.Page, "CropBoxPosition", "cropbox_position") - _alias(fitz.Page, "deleteAnnot", "delete_annot") - _alias(fitz.Page, "deleteLink", "delete_link") - _alias(fitz.Page, "deleteWidget", "delete_widget") - _alias(fitz.Page, "derotationMatrix", "derotation_matrix") - _alias(fitz.Page, "drawBezier", "draw_bezier") - _alias(fitz.Page, "drawCircle", "draw_circle") - _alias(fitz.Page, "drawCurve", "draw_curve") - _alias(fitz.Page, "drawLine", "draw_line") - _alias(fitz.Page, "drawOval", "draw_oval") - _alias(fitz.Page, "drawPolyline", "draw_polyline") - _alias(fitz.Page, "drawQuad", "draw_quad") - _alias(fitz.Page, "drawRect", "draw_rect") - _alias(fitz.Page, "drawSector", "draw_sector") - _alias(fitz.Page, "drawSquiggle", "draw_squiggle") - _alias(fitz.Page, "drawZigzag", "draw_zigzag") - _alias(fitz.Page, "firstAnnot", "first_annot") - _alias(fitz.Page, "firstLink", "first_link") - _alias(fitz.Page, "firstWidget", "first_widget") - _alias(fitz.Page, "getContents", "get_contents") - _alias(fitz.Page, "getDisplayList", "get_displaylist") - _alias(fitz.Page, "getDrawings", "get_drawings") - _alias(fitz.Page, "getFontList", "get_fonts") - _alias(fitz.Page, "getImageBbox", "get_image_bbox") - _alias(fitz.Page, "getImageList", "get_images") - _alias(fitz.Page, "getLinks", "get_links") - _alias(fitz.Page, "getPixmap", "get_pixmap") - _alias(fitz.Page, "getSVGimage", "get_svg_image") - _alias(fitz.Page, "getText", "get_text") - _alias(fitz.Page, "getTextBlocks", "get_text_blocks") - _alias(fitz.Page, "getTextbox", "get_textbox") - _alias(fitz.Page, "getTextPage", "get_textpage") - _alias(fitz.Page, "getTextWords", "get_text_words") - _alias(fitz.Page, "insertFont", "insert_font") - _alias(fitz.Page, "insertImage", "insert_image") - _alias(fitz.Page, "insertLink", "insert_link") - _alias(fitz.Page, "insertText", "insert_text") - _alias(fitz.Page, "insertTextbox", "insert_textbox") - _alias(fitz.Page, "loadAnnot", "load_annot") - _alias(fitz.Page, "loadLinks", "load_links") - _alias(fitz.Page, "MediaBox", "mediabox") - _alias(fitz.Page, "MediaBoxSize", "mediabox_size") - _alias(fitz.Page, "newShape", "new_shape") - _alias(fitz.Page, "readContents", "read_contents") - _alias(fitz.Page, "rotationMatrix", "rotation_matrix") - _alias(fitz.Page, "searchFor", "search_for") - _alias(fitz.Page, "setCropBox", "set_cropbox") - _alias(fitz.Page, "setMediaBox", "set_mediabox") - _alias(fitz.Page, "setRotation", "set_rotation") - _alias(fitz.Page, "showPDFpage", "show_pdf_page") - _alias(fitz.Page, "transformationMatrix", "transformation_matrix") - _alias(fitz.Page, "updateLink", "update_link") - _alias(fitz.Page, "wrapContents", "wrap_contents") - _alias(fitz.Page, "writeText", "write_text") - - # deprecated Shape aliases - _alias(fitz.utils.Shape, "drawBezier", "draw_bezier") - _alias(fitz.utils.Shape, "drawCircle", "draw_circle") - _alias(fitz.utils.Shape, "drawCurve", "draw_curve") - _alias(fitz.utils.Shape, "drawLine", "draw_line") - _alias(fitz.utils.Shape, "drawOval", "draw_oval") - _alias(fitz.utils.Shape, "drawPolyline", "draw_polyline") - _alias(fitz.utils.Shape, "drawQuad", "draw_quad") - _alias(fitz.utils.Shape, "drawRect", "draw_rect") - _alias(fitz.utils.Shape, "drawSector", "draw_sector") - _alias(fitz.utils.Shape, "drawSquiggle", "draw_squiggle") - _alias(fitz.utils.Shape, "drawZigzag", "draw_zigzag") - _alias(fitz.utils.Shape, "insertText", "insert_text") - _alias(fitz.utils.Shape, "insertTextbox", "insert_textbox") - - # deprecated Annot aliases - _alias(fitz.Annot, "getText", "get_text") - _alias(fitz.Annot, "getTextbox", "get_textbox") - _alias(fitz.Annot, "fileGet", "get_file") - _alias(fitz.Annot, "fileUpd", "update_file") - _alias(fitz.Annot, "getPixmap", "get_pixmap") - _alias(fitz.Annot, "getTextPage", "get_textpage") - _alias(fitz.Annot, "lineEnds", "line_ends") - _alias(fitz.Annot, "setBlendMode", "set_blendmode") - _alias(fitz.Annot, "setBorder", "set_border") - _alias(fitz.Annot, "setColors", "set_colors") - _alias(fitz.Annot, "setFlags", "set_flags") - _alias(fitz.Annot, "setInfo", "set_info") - _alias(fitz.Annot, "setLineEnds", "set_line_ends") - _alias(fitz.Annot, "setName", "set_name") - _alias(fitz.Annot, "setOpacity", "set_opacity") - _alias(fitz.Annot, "setRect", "set_rect") - _alias(fitz.Annot, "setOC", "set_oc") - _alias(fitz.Annot, "soundGet", "get_sound") - - # deprecated TextWriter aliases - _alias(fitz.TextWriter, "writeText", "write_text") - _alias(fitz.TextWriter, "fillTextbox", "fill_textbox") - - # deprecated DisplayList aliases - _alias(fitz.DisplayList, "getPixmap", "get_pixmap") - _alias(fitz.DisplayList, "getTextPage", "get_textpage") - - # deprecated Pixmap aliases - _alias(fitz.Pixmap, "setAlpha", "set_alpha") - _alias(fitz.Pixmap, "gammaWith", "gamma_with") - _alias(fitz.Pixmap, "tintWith", "tint_with") - _alias(fitz.Pixmap, "clearWith", "clear_with") - _alias(fitz.Pixmap, "copyPixmap", "copy") - _alias(fitz.Pixmap, "getImageData", "tobytes") - _alias(fitz.Pixmap, "getPNGData", "tobytes") - _alias(fitz.Pixmap, "getPNGdata", "tobytes") - _alias(fitz.Pixmap, "writeImage", "save") - _alias(fitz.Pixmap, "writePNG", "save") - _alias(fitz.Pixmap, "pillowWrite", "pil_save") - _alias(fitz.Pixmap, "pillowData", "pil_tobytes") - _alias(fitz.Pixmap, "invertIRect", "invert_irect") - _alias(fitz.Pixmap, "setPixel", "set_pixel") - _alias(fitz.Pixmap, "setOrigin", "set_origin") - _alias(fitz.Pixmap, "setRect", "set_rect") - _alias(fitz.Pixmap, "setResolution", "set_dpi") - - # deprecated geometry aliases - _alias(fitz.Rect, "getArea", "get_area") - _alias(fitz.IRect, "getArea", "get_area") - _alias(fitz.Rect, "getRectArea", "get_area") - _alias(fitz.IRect, "getRectArea", "get_area") - _alias(fitz.Rect, "includePoint", "include_point") - _alias(fitz.IRect, "includePoint", "include_point") - _alias(fitz.Rect, "includeRect", "include_rect") - _alias(fitz.IRect, "includeRect", "include_rect") - _alias(fitz.Rect, "isInfinite", "is_infinite") - _alias(fitz.IRect, "isInfinite", "is_infinite") - _alias(fitz.Rect, "isEmpty", "is_empty") - _alias(fitz.IRect, "isEmpty", "is_empty") - _alias(fitz.Quad, "isEmpty", "is_empty") - _alias(fitz.Quad, "isRectangular", "is_rectangular") - _alias(fitz.Quad, "isConvex", "is_convex") - _alias(fitz.Matrix, "isRectilinear", "is_rectilinear") - _alias(fitz.Matrix, "preRotate", "prerotate") - _alias(fitz.Matrix, "preScale", "prescale") - _alias(fitz.Matrix, "preShear", "preshear") - _alias(fitz.Matrix, "preTranslate", "pretranslate") - - # deprecated other aliases - _alias(fitz.Outline, "isExternal", "is_external") - _alias(fitz.Outline, "isOpen", "is_open") - _alias(fitz.Link, "isExternal", "is_external") - _alias(fitz.Link, "setBorder", "set_border") - _alias(fitz.Link, "setColors", "set_colors") - _alias(fitz, "getPDFstr", "get_pdf_str") - _alias(fitz, "getPDFnow", "get_pdf_now") - _alias(fitz, "PaperSize", "paper_size") - _alias(fitz, "PaperRect", "paper_rect") - _alias(fitz, "paperSizes", "paper_sizes") - _alias(fitz, "ImageProperties", "image_profile") - _alias(fitz, "planishLine", "planish_line") - _alias(fitz, "getTextLength", "get_text_length") - _alias(fitz, "getTextlength", "get_text_length") - - -fitz.__doc__ = """ -PyMuPDF %s: Python bindings for the MuPDF %s library. -Version date: %s. -Built for Python %i.%i on %s (%i-bit). -""" % ( - fitz.VersionBind, - fitz.VersionFitz, - fitz.VersionDate, - sys.version_info[0], - sys.version_info[1], - sys.platform, - 64 if sys.maxsize > 2**32 else 32, -) - -if VersionBind.startswith("1.19"): # don't generate aliases after v1.19.* - restore_aliases() - -pdfcolor = dict( - [ - (k, (r / 255, g / 255, b / 255)) - for k, (r, g, b) in fitz.utils.getColorInfoDict().items() - ] -) -__version__ = fitz.VersionBind diff --git a/fitz_old/__init__.py b/fitz_old/__init__.py new file mode 100644 index 000000000..75031f5bd --- /dev/null +++ b/fitz_old/__init__.py @@ -0,0 +1,517 @@ +# ------------------------------------------------------------------------ +# Copyright 2020-2022, Harald Lieder, mailto:harald.lieder@outlook.com +# License: GNU AFFERO GPL 3.0, https://www.gnu.org/licenses/agpl-3.0.html +# +# Part of "PyMuPDF", a Python binding for "MuPDF" (http://mupdf.com), a +# lightweight PDF, XPS, and E-book viewer, renderer and toolkit which is +# maintained and developed by Artifex Software, Inc. https://artifex.com. +# ------------------------------------------------------------------------ +import sys + +import glob +import os +if os.path.exists( 'fitz/__init__.py'): + if not glob.glob( 'fitz/_fitz*'): + print( '#' * 40) + print( '# Warning: current directory appears to contain an incomplete') + print( '# fitz/ installation directory so "import fitz" may fail.') + print( '# This can happen if current directory is a PyMuPDF source tree.') + print( '# Suggest changing to a different current directory.') + print( '#' * 40) + +from fitz_old.fitz_old import * + +# Allow this to work: +# import fitz_old as fitz +# fitz.fitz.TEXT_ALIGN_CENTER +# +fitz = fitz_old + +# define the supported colorspaces for convenience +fitz_old.csRGB = fitz_old.Colorspace(fitz_old.CS_RGB) +fitz_old.csGRAY = fitz_old.Colorspace(fitz_old.CS_GRAY) +fitz_old.csCMYK = fitz_old.Colorspace(fitz_old.CS_CMYK) +csRGB = fitz_old.csRGB +csGRAY = fitz_old.csGRAY +csCMYK = fitz_old.csCMYK + +# create the TOOLS object. +# +# Unfortunately it seems that this is never be destructed even if we use an +# atexit() handler, which makes MuPDF's Memento list it as a leak. In fitz_old.i +# we use Memento_startLeaking()/Memento_stopLeaking() when allocating +# the Tools instance so at least the leak is marked as known. +# +TOOLS = fitz_old.Tools() +TOOLS.thisown = True +fitz_old.TOOLS = TOOLS + +# This atexit handler runs, but doesn't cause ~Tools() to be run. +# +import atexit + + +def cleanup_tools(TOOLS): + # print(f'cleanup_tools: TOOLS={TOOLS} id(TOOLS)={id(TOOLS)}') + # print(f'TOOLS.thisown={TOOLS.thisown}') + del TOOLS + del fitz_old.TOOLS + + +atexit.register(cleanup_tools, TOOLS) + + +# Require that MuPDF matches fitz_old.TOOLS.mupdf_version(); also allow use with +# next minor version (e.g. 1.21.2 => 1.22), so we can test with mupdf master. +# +def v_str_to_tuple(s): + return tuple(map(int, s.split('.'))) + +def v_tuple_to_string(t): + return '.'.join(map(str, t)) + +mupdf_version_tuple = v_str_to_tuple(fitz_old.TOOLS.mupdf_version()) +mupdf_version_tuple_required = v_str_to_tuple(fitz_old.VersionFitz) +mupdf_version_tuple_required_prev = (mupdf_version_tuple_required[0], mupdf_version_tuple_required[1]-1) +mupdf_version_tuple_required_next = (mupdf_version_tuple_required[0], mupdf_version_tuple_required[1]+1) + +if mupdf_version_tuple[:2] not in ( + mupdf_version_tuple_required_prev[:2], + mupdf_version_tuple_required[:2], + mupdf_version_tuple_required_next[:2], + ): + raise ValueError( + f'MuPDF library {v_tuple_to_string(mupdf_version_tuple)!r} mismatch:' + f' require' + f' {v_tuple_to_string(mupdf_version_tuple_required_prev)!r}' + f' or {v_tuple_to_string(mupdf_version_tuple_required)!r}' + f' or {v_tuple_to_string(mupdf_version_tuple_required_next)!r}' + f'.' + ) + +# copy functions in 'utils' to their respective fitz classes +import fitz_old.utils +from .table import find_tables + +# ------------------------------------------------------------------------------ +# General +# ------------------------------------------------------------------------------ +fitz_old.recover_quad = fitz_old.utils.recover_quad +fitz_old.recover_bbox_quad = fitz_old.utils.recover_bbox_quad +fitz_old.recover_line_quad = fitz_old.utils.recover_line_quad +fitz_old.recover_span_quad = fitz_old.utils.recover_span_quad +fitz_old.recover_char_quad = fitz_old.utils.recover_char_quad + +# ------------------------------------------------------------------------------ +# Document +# ------------------------------------------------------------------------------ +fitz_old.open = fitz_old.Document +fitz_old.Document._do_links = fitz_old.utils.do_links +fitz_old.Document.del_toc_item = fitz_old.utils.del_toc_item +fitz_old.Document.get_char_widths = fitz_old.utils.get_char_widths +fitz_old.Document.get_ocmd = fitz_old.utils.get_ocmd +fitz_old.Document.get_page_labels = fitz_old.utils.get_page_labels +fitz_old.Document.get_page_numbers = fitz_old.utils.get_page_numbers +fitz_old.Document.get_page_pixmap = fitz_old.utils.get_page_pixmap +fitz_old.Document.get_page_text = fitz_old.utils.get_page_text +fitz_old.Document.get_toc = fitz_old.utils.get_toc +fitz_old.Document.has_annots = fitz_old.utils.has_annots +fitz_old.Document.has_links = fitz_old.utils.has_links +fitz_old.Document.insert_page = fitz_old.utils.insert_page +fitz_old.Document.new_page = fitz_old.utils.new_page +fitz_old.Document.scrub = fitz_old.utils.scrub +fitz_old.Document.search_page_for = fitz_old.utils.search_page_for +fitz_old.Document.set_metadata = fitz_old.utils.set_metadata +fitz_old.Document.set_ocmd = fitz_old.utils.set_ocmd +fitz_old.Document.set_page_labels = fitz_old.utils.set_page_labels +fitz_old.Document.set_toc = fitz_old.utils.set_toc +fitz_old.Document.set_toc_item = fitz_old.utils.set_toc_item +fitz_old.Document.tobytes = fitz_old.Document.write +fitz_old.Document.subset_fonts = fitz_old.utils.subset_fonts +fitz_old.Document.get_oc = fitz_old.utils.get_oc +fitz_old.Document.set_oc = fitz_old.utils.set_oc +fitz_old.Document.xref_copy = fitz_old.utils.xref_copy + + +# ------------------------------------------------------------------------------ +# Page +# ------------------------------------------------------------------------------ +fitz_old.Page.apply_redactions = fitz_old.utils.apply_redactions +fitz_old.Page.delete_widget = fitz_old.utils.delete_widget +fitz_old.Page.draw_bezier = fitz_old.utils.draw_bezier +fitz_old.Page.draw_circle = fitz_old.utils.draw_circle +fitz_old.Page.draw_curve = fitz_old.utils.draw_curve +fitz_old.Page.draw_line = fitz_old.utils.draw_line +fitz_old.Page.draw_oval = fitz_old.utils.draw_oval +fitz_old.Page.draw_polyline = fitz_old.utils.draw_polyline +fitz_old.Page.draw_quad = fitz_old.utils.draw_quad +fitz_old.Page.draw_rect = fitz_old.utils.draw_rect +fitz_old.Page.draw_sector = fitz_old.utils.draw_sector +fitz_old.Page.draw_squiggle = fitz_old.utils.draw_squiggle +fitz_old.Page.draw_zigzag = fitz_old.utils.draw_zigzag +fitz_old.Page.get_links = fitz_old.utils.get_links +fitz_old.Page.get_pixmap = fitz_old.utils.get_pixmap +fitz_old.Page.get_text = fitz_old.utils.get_text +fitz_old.Page.get_image_info = fitz_old.utils.get_image_info +fitz_old.Page.get_text_blocks = fitz_old.utils.get_text_blocks +fitz_old.Page.get_text_selection = fitz_old.utils.get_text_selection +fitz_old.Page.get_text_words = fitz_old.utils.get_text_words +fitz_old.Page.get_textbox = fitz_old.utils.get_textbox +fitz_old.Page.insert_image = fitz_old.utils.insert_image +fitz_old.Page.insert_link = fitz_old.utils.insert_link +fitz_old.Page.insert_text = fitz_old.utils.insert_text +fitz_old.Page.insert_textbox = fitz_old.utils.insert_textbox +fitz_old.Page.new_shape = lambda x: fitz_old.utils.Shape(x) +fitz_old.Page.search_for = fitz_old.utils.search_for +fitz_old.Page.show_pdf_page = fitz_old.utils.show_pdf_page +fitz_old.Page.update_link = fitz_old.utils.update_link +fitz_old.Page.write_text = fitz_old.utils.write_text +fitz_old.Page.get_label = fitz_old.utils.get_label +fitz_old.Page.get_image_rects = fitz_old.utils.get_image_rects +fitz_old.Page.get_textpage_ocr = fitz_old.utils.get_textpage_ocr +fitz_old.Page.delete_image = fitz_old.utils.delete_image +fitz_old.Page.replace_image = fitz_old.utils.replace_image +fitz_old.Page.find_tables = find_tables +# ------------------------------------------------------------------------ +# Annot +# ------------------------------------------------------------------------ +fitz_old.Annot.get_text = fitz_old.utils.get_text +fitz_old.Annot.get_textbox = fitz_old.utils.get_textbox + +# ------------------------------------------------------------------------ +# Rect and IRect +# ------------------------------------------------------------------------ +fitz_old.Rect.get_area = fitz_old.utils.get_area +fitz_old.IRect.get_area = fitz_old.utils.get_area + +# ------------------------------------------------------------------------ +# TextWriter +# ------------------------------------------------------------------------ +fitz_old.TextWriter.fill_textbox = fitz_old.utils.fill_textbox + + +class FitzDeprecation(DeprecationWarning): + pass + + +def restore_aliases(): + import warnings + + warnings.filterwarnings( + "once", + category=FitzDeprecation, + ) + + def showthis(msg, cat, filename, lineno, file=None, line=None): + text = warnings.formatwarning(msg, cat, filename, lineno, line=line) + s = text.find("FitzDeprecation") + if s < 0: + print(text, file=sys.stderr) + return + text = text[s:].splitlines()[0][4:] + print(text, file=sys.stderr) + + warnings.showwarning = showthis + + def _alias(fitz_class, old, new): + fname = getattr(fitz_class, new) + r = str(fitz_class)[1:-1] + objname = " ".join(r.split()[:2]) + objname = objname.replace("fitz_old.fitz_old.", "") + objname = objname.replace("fitz_old.utils.", "") + if callable(fname): + + def deprecated_function(*args, **kw): + msg = "'%s' removed from %s after v1.19 - use '%s'." % ( + old, + objname, + new, + ) + if not VersionBind.startswith("1.18"): + warnings.warn(msg, category=FitzDeprecation) + return fname(*args, **kw) + + setattr(fitz_class, old, deprecated_function) + else: + if type(fname) is property: + setattr(fitz_class, old, property(fname.fget)) + else: + setattr(fitz_class, old, fname) + + eigen = getattr(fitz_class, old) + x = fname.__doc__ + if not x: + x = "" + try: + if callable(fname) or type(fname) is property: + eigen.__doc__ = ( + "*** Deprecated and removed after v1.19 - use '%s'. ***\n" % new + x + ) + except: + pass + + # deprecated Document aliases + _alias(fitz_old.Document, "chapterCount", "chapter_count") + _alias(fitz_old.Document, "chapterPageCount", "chapter_page_count") + _alias(fitz_old.Document, "convertToPDF", "convert_to_pdf") + _alias(fitz_old.Document, "copyPage", "copy_page") + _alias(fitz_old.Document, "deletePage", "delete_page") + _alias(fitz_old.Document, "deletePageRange", "delete_pages") + _alias(fitz_old.Document, "embeddedFileAdd", "embfile_add") + _alias(fitz_old.Document, "embeddedFileCount", "embfile_count") + _alias(fitz_old.Document, "embeddedFileDel", "embfile_del") + _alias(fitz_old.Document, "embeddedFileGet", "embfile_get") + _alias(fitz_old.Document, "embeddedFileInfo", "embfile_info") + _alias(fitz_old.Document, "embeddedFileNames", "embfile_names") + _alias(fitz_old.Document, "embeddedFileUpd", "embfile_upd") + _alias(fitz_old.Document, "extractFont", "extract_font") + _alias(fitz_old.Document, "extractImage", "extract_image") + _alias(fitz_old.Document, "findBookmark", "find_bookmark") + _alias(fitz_old.Document, "fullcopyPage", "fullcopy_page") + _alias(fitz_old.Document, "getCharWidths", "get_char_widths") + _alias(fitz_old.Document, "getOCGs", "get_ocgs") + _alias(fitz_old.Document, "getPageFontList", "get_page_fonts") + _alias(fitz_old.Document, "getPageImageList", "get_page_images") + _alias(fitz_old.Document, "getPagePixmap", "get_page_pixmap") + _alias(fitz_old.Document, "getPageText", "get_page_text") + _alias(fitz_old.Document, "getPageXObjectList", "get_page_xobjects") + _alias(fitz_old.Document, "getSigFlags", "get_sigflags") + _alias(fitz_old.Document, "getToC", "get_toc") + _alias(fitz_old.Document, "getXmlMetadata", "get_xml_metadata") + _alias(fitz_old.Document, "insertPage", "insert_page") + _alias(fitz_old.Document, "insertPDF", "insert_pdf") + _alias(fitz_old.Document, "isDirty", "is_dirty") + _alias(fitz_old.Document, "isFormPDF", "is_form_pdf") + _alias(fitz_old.Document, "isPDF", "is_pdf") + _alias(fitz_old.Document, "isReflowable", "is_reflowable") + _alias(fitz_old.Document, "isRepaired", "is_repaired") + _alias(fitz_old.Document, "isStream", "xref_is_stream") + _alias(fitz_old.Document, "is_stream", "xref_is_stream") + _alias(fitz_old.Document, "lastLocation", "last_location") + _alias(fitz_old.Document, "loadPage", "load_page") + _alias(fitz_old.Document, "makeBookmark", "make_bookmark") + _alias(fitz_old.Document, "metadataXML", "xref_xml_metadata") + _alias(fitz_old.Document, "movePage", "move_page") + _alias(fitz_old.Document, "needsPass", "needs_pass") + _alias(fitz_old.Document, "newPage", "new_page") + _alias(fitz_old.Document, "nextLocation", "next_location") + _alias(fitz_old.Document, "pageCount", "page_count") + _alias(fitz_old.Document, "pageCropBox", "page_cropbox") + _alias(fitz_old.Document, "pageXref", "page_xref") + _alias(fitz_old.Document, "PDFCatalog", "pdf_catalog") + _alias(fitz_old.Document, "PDFTrailer", "pdf_trailer") + _alias(fitz_old.Document, "previousLocation", "prev_location") + _alias(fitz_old.Document, "resolveLink", "resolve_link") + _alias(fitz_old.Document, "searchPageFor", "search_page_for") + _alias(fitz_old.Document, "setLanguage", "set_language") + _alias(fitz_old.Document, "setMetadata", "set_metadata") + _alias(fitz_old.Document, "setToC", "set_toc") + _alias(fitz_old.Document, "setXmlMetadata", "set_xml_metadata") + _alias(fitz_old.Document, "updateObject", "update_object") + _alias(fitz_old.Document, "updateStream", "update_stream") + _alias(fitz_old.Document, "xrefLength", "xref_length") + _alias(fitz_old.Document, "xrefObject", "xref_object") + _alias(fitz_old.Document, "xrefStream", "xref_stream") + _alias(fitz_old.Document, "xrefStreamRaw", "xref_stream_raw") + + # deprecated Page aliases + _alias(fitz_old.Page, "_isWrapped", "is_wrapped") + _alias(fitz_old.Page, "addCaretAnnot", "add_caret_annot") + _alias(fitz_old.Page, "addCircleAnnot", "add_circle_annot") + _alias(fitz_old.Page, "addFileAnnot", "add_file_annot") + _alias(fitz_old.Page, "addFreetextAnnot", "add_freetext_annot") + _alias(fitz_old.Page, "addHighlightAnnot", "add_highlight_annot") + _alias(fitz_old.Page, "addInkAnnot", "add_ink_annot") + _alias(fitz_old.Page, "addLineAnnot", "add_line_annot") + _alias(fitz_old.Page, "addPolygonAnnot", "add_polygon_annot") + _alias(fitz_old.Page, "addPolylineAnnot", "add_polyline_annot") + _alias(fitz_old.Page, "addRectAnnot", "add_rect_annot") + _alias(fitz_old.Page, "addRedactAnnot", "add_redact_annot") + _alias(fitz_old.Page, "addSquigglyAnnot", "add_squiggly_annot") + _alias(fitz_old.Page, "addStampAnnot", "add_stamp_annot") + _alias(fitz_old.Page, "addStrikeoutAnnot", "add_strikeout_annot") + _alias(fitz_old.Page, "addTextAnnot", "add_text_annot") + _alias(fitz_old.Page, "addUnderlineAnnot", "add_underline_annot") + _alias(fitz_old.Page, "addWidget", "add_widget") + _alias(fitz_old.Page, "cleanContents", "clean_contents") + _alias(fitz_old.Page, "CropBox", "cropbox") + _alias(fitz_old.Page, "CropBoxPosition", "cropbox_position") + _alias(fitz_old.Page, "deleteAnnot", "delete_annot") + _alias(fitz_old.Page, "deleteLink", "delete_link") + _alias(fitz_old.Page, "deleteWidget", "delete_widget") + _alias(fitz_old.Page, "derotationMatrix", "derotation_matrix") + _alias(fitz_old.Page, "drawBezier", "draw_bezier") + _alias(fitz_old.Page, "drawCircle", "draw_circle") + _alias(fitz_old.Page, "drawCurve", "draw_curve") + _alias(fitz_old.Page, "drawLine", "draw_line") + _alias(fitz_old.Page, "drawOval", "draw_oval") + _alias(fitz_old.Page, "drawPolyline", "draw_polyline") + _alias(fitz_old.Page, "drawQuad", "draw_quad") + _alias(fitz_old.Page, "drawRect", "draw_rect") + _alias(fitz_old.Page, "drawSector", "draw_sector") + _alias(fitz_old.Page, "drawSquiggle", "draw_squiggle") + _alias(fitz_old.Page, "drawZigzag", "draw_zigzag") + _alias(fitz_old.Page, "firstAnnot", "first_annot") + _alias(fitz_old.Page, "firstLink", "first_link") + _alias(fitz_old.Page, "firstWidget", "first_widget") + _alias(fitz_old.Page, "getContents", "get_contents") + _alias(fitz_old.Page, "getDisplayList", "get_displaylist") + _alias(fitz_old.Page, "getDrawings", "get_drawings") + _alias(fitz_old.Page, "getFontList", "get_fonts") + _alias(fitz_old.Page, "getImageBbox", "get_image_bbox") + _alias(fitz_old.Page, "getImageList", "get_images") + _alias(fitz_old.Page, "getLinks", "get_links") + _alias(fitz_old.Page, "getPixmap", "get_pixmap") + _alias(fitz_old.Page, "getSVGimage", "get_svg_image") + _alias(fitz_old.Page, "getText", "get_text") + _alias(fitz_old.Page, "getTextBlocks", "get_text_blocks") + _alias(fitz_old.Page, "getTextbox", "get_textbox") + _alias(fitz_old.Page, "getTextPage", "get_textpage") + _alias(fitz_old.Page, "getTextWords", "get_text_words") + _alias(fitz_old.Page, "insertFont", "insert_font") + _alias(fitz_old.Page, "insertImage", "insert_image") + _alias(fitz_old.Page, "insertLink", "insert_link") + _alias(fitz_old.Page, "insertText", "insert_text") + _alias(fitz_old.Page, "insertTextbox", "insert_textbox") + _alias(fitz_old.Page, "loadAnnot", "load_annot") + _alias(fitz_old.Page, "loadLinks", "load_links") + _alias(fitz_old.Page, "MediaBox", "mediabox") + _alias(fitz_old.Page, "MediaBoxSize", "mediabox_size") + _alias(fitz_old.Page, "newShape", "new_shape") + _alias(fitz_old.Page, "readContents", "read_contents") + _alias(fitz_old.Page, "rotationMatrix", "rotation_matrix") + _alias(fitz_old.Page, "searchFor", "search_for") + _alias(fitz_old.Page, "setCropBox", "set_cropbox") + _alias(fitz_old.Page, "setMediaBox", "set_mediabox") + _alias(fitz_old.Page, "setRotation", "set_rotation") + _alias(fitz_old.Page, "showPDFpage", "show_pdf_page") + _alias(fitz_old.Page, "transformationMatrix", "transformation_matrix") + _alias(fitz_old.Page, "updateLink", "update_link") + _alias(fitz_old.Page, "wrapContents", "wrap_contents") + _alias(fitz_old.Page, "writeText", "write_text") + + # deprecated Shape aliases + _alias(fitz_old.utils.Shape, "drawBezier", "draw_bezier") + _alias(fitz_old.utils.Shape, "drawCircle", "draw_circle") + _alias(fitz_old.utils.Shape, "drawCurve", "draw_curve") + _alias(fitz_old.utils.Shape, "drawLine", "draw_line") + _alias(fitz_old.utils.Shape, "drawOval", "draw_oval") + _alias(fitz_old.utils.Shape, "drawPolyline", "draw_polyline") + _alias(fitz_old.utils.Shape, "drawQuad", "draw_quad") + _alias(fitz_old.utils.Shape, "drawRect", "draw_rect") + _alias(fitz_old.utils.Shape, "drawSector", "draw_sector") + _alias(fitz_old.utils.Shape, "drawSquiggle", "draw_squiggle") + _alias(fitz_old.utils.Shape, "drawZigzag", "draw_zigzag") + _alias(fitz_old.utils.Shape, "insertText", "insert_text") + _alias(fitz_old.utils.Shape, "insertTextbox", "insert_textbox") + + # deprecated Annot aliases + _alias(fitz_old.Annot, "getText", "get_text") + _alias(fitz_old.Annot, "getTextbox", "get_textbox") + _alias(fitz_old.Annot, "fileGet", "get_file") + _alias(fitz_old.Annot, "fileUpd", "update_file") + _alias(fitz_old.Annot, "getPixmap", "get_pixmap") + _alias(fitz_old.Annot, "getTextPage", "get_textpage") + _alias(fitz_old.Annot, "lineEnds", "line_ends") + _alias(fitz_old.Annot, "setBlendMode", "set_blendmode") + _alias(fitz_old.Annot, "setBorder", "set_border") + _alias(fitz_old.Annot, "setColors", "set_colors") + _alias(fitz_old.Annot, "setFlags", "set_flags") + _alias(fitz_old.Annot, "setInfo", "set_info") + _alias(fitz_old.Annot, "setLineEnds", "set_line_ends") + _alias(fitz_old.Annot, "setName", "set_name") + _alias(fitz_old.Annot, "setOpacity", "set_opacity") + _alias(fitz_old.Annot, "setRect", "set_rect") + _alias(fitz_old.Annot, "setOC", "set_oc") + _alias(fitz_old.Annot, "soundGet", "get_sound") + + # deprecated TextWriter aliases + _alias(fitz_old.TextWriter, "writeText", "write_text") + _alias(fitz_old.TextWriter, "fillTextbox", "fill_textbox") + + # deprecated DisplayList aliases + _alias(fitz_old.DisplayList, "getPixmap", "get_pixmap") + _alias(fitz_old.DisplayList, "getTextPage", "get_textpage") + + # deprecated Pixmap aliases + _alias(fitz_old.Pixmap, "setAlpha", "set_alpha") + _alias(fitz_old.Pixmap, "gammaWith", "gamma_with") + _alias(fitz_old.Pixmap, "tintWith", "tint_with") + _alias(fitz_old.Pixmap, "clearWith", "clear_with") + _alias(fitz_old.Pixmap, "copyPixmap", "copy") + _alias(fitz_old.Pixmap, "getImageData", "tobytes") + _alias(fitz_old.Pixmap, "getPNGData", "tobytes") + _alias(fitz_old.Pixmap, "getPNGdata", "tobytes") + _alias(fitz_old.Pixmap, "writeImage", "save") + _alias(fitz_old.Pixmap, "writePNG", "save") + _alias(fitz_old.Pixmap, "pillowWrite", "pil_save") + _alias(fitz_old.Pixmap, "pillowData", "pil_tobytes") + _alias(fitz_old.Pixmap, "invertIRect", "invert_irect") + _alias(fitz_old.Pixmap, "setPixel", "set_pixel") + _alias(fitz_old.Pixmap, "setOrigin", "set_origin") + _alias(fitz_old.Pixmap, "setRect", "set_rect") + _alias(fitz_old.Pixmap, "setResolution", "set_dpi") + + # deprecated geometry aliases + _alias(fitz_old.Rect, "getArea", "get_area") + _alias(fitz_old.IRect, "getArea", "get_area") + _alias(fitz_old.Rect, "getRectArea", "get_area") + _alias(fitz_old.IRect, "getRectArea", "get_area") + _alias(fitz_old.Rect, "includePoint", "include_point") + _alias(fitz_old.IRect, "includePoint", "include_point") + _alias(fitz_old.Rect, "includeRect", "include_rect") + _alias(fitz_old.IRect, "includeRect", "include_rect") + _alias(fitz_old.Rect, "isInfinite", "is_infinite") + _alias(fitz_old.IRect, "isInfinite", "is_infinite") + _alias(fitz_old.Rect, "isEmpty", "is_empty") + _alias(fitz_old.IRect, "isEmpty", "is_empty") + _alias(fitz_old.Quad, "isEmpty", "is_empty") + _alias(fitz_old.Quad, "isRectangular", "is_rectangular") + _alias(fitz_old.Quad, "isConvex", "is_convex") + _alias(fitz_old.Matrix, "isRectilinear", "is_rectilinear") + _alias(fitz_old.Matrix, "preRotate", "prerotate") + _alias(fitz_old.Matrix, "preScale", "prescale") + _alias(fitz_old.Matrix, "preShear", "preshear") + _alias(fitz_old.Matrix, "preTranslate", "pretranslate") + + # deprecated other aliases + _alias(fitz_old.Outline, "isExternal", "is_external") + _alias(fitz_old.Outline, "isOpen", "is_open") + _alias(fitz_old.Link, "isExternal", "is_external") + _alias(fitz_old.Link, "setBorder", "set_border") + _alias(fitz_old.Link, "setColors", "set_colors") + _alias(fitz, "getPDFstr", "get_pdf_str") + _alias(fitz, "getPDFnow", "get_pdf_now") + _alias(fitz, "PaperSize", "paper_size") + _alias(fitz, "PaperRect", "paper_rect") + _alias(fitz, "paperSizes", "paper_sizes") + _alias(fitz, "ImageProperties", "image_profile") + _alias(fitz, "planishLine", "planish_line") + _alias(fitz, "getTextLength", "get_text_length") + _alias(fitz, "getTextlength", "get_text_length") + + +fitz_old.__doc__ = """ +PyMuPDF %s: Python bindings for the MuPDF %s library. +Version date: %s. +Built for Python %i.%i on %s (%i-bit). +""" % ( + fitz_old.VersionBind, + fitz_old.VersionFitz, + fitz_old.VersionDate, + sys.version_info[0], + sys.version_info[1], + sys.platform, + 64 if sys.maxsize > 2**32 else 32, +) + +if VersionBind.startswith("1.19"): # don't generate aliases after v1.19.* + restore_aliases() + +pdfcolor = dict( + [ + (k, (r / 255, g / 255, b / 255)) + for k, (r, g, b) in fitz_old.utils.getColorInfoDict().items() + ] +) +__version__ = fitz_old.VersionBind diff --git a/fitz/__main__.py b/fitz_old/__main__.py similarity index 100% rename from fitz/__main__.py rename to fitz_old/__main__.py diff --git a/fitz/_config.h b/fitz_old/_config.h similarity index 100% rename from fitz/_config.h rename to fitz_old/_config.h diff --git a/fitz/fitz.i b/fitz_old/fitz_old.i similarity index 100% rename from fitz/fitz.i rename to fitz_old/fitz_old.i diff --git a/fitz/helper-annot.i b/fitz_old/helper-annot.i similarity index 100% rename from fitz/helper-annot.i rename to fitz_old/helper-annot.i diff --git a/fitz/helper-convert.i b/fitz_old/helper-convert.i similarity index 100% rename from fitz/helper-convert.i rename to fitz_old/helper-convert.i diff --git a/fitz/helper-defines.i b/fitz_old/helper-defines.i similarity index 100% rename from fitz/helper-defines.i rename to fitz_old/helper-defines.i diff --git a/fitz/helper-devices.i b/fitz_old/helper-devices.i similarity index 100% rename from fitz/helper-devices.i rename to fitz_old/helper-devices.i diff --git a/fitz/helper-fields.i b/fitz_old/helper-fields.i similarity index 100% rename from fitz/helper-fields.i rename to fitz_old/helper-fields.i diff --git a/fitz/helper-fileobj.i b/fitz_old/helper-fileobj.i similarity index 100% rename from fitz/helper-fileobj.i rename to fitz_old/helper-fileobj.i diff --git a/fitz/helper-geo-c.i b/fitz_old/helper-geo-c.i similarity index 100% rename from fitz/helper-geo-c.i rename to fitz_old/helper-geo-c.i diff --git a/fitz/helper-geo-py.i b/fitz_old/helper-geo-py.i similarity index 100% rename from fitz/helper-geo-py.i rename to fitz_old/helper-geo-py.i diff --git a/fitz/helper-globals.i b/fitz_old/helper-globals.i similarity index 100% rename from fitz/helper-globals.i rename to fitz_old/helper-globals.i diff --git a/fitz/helper-other.i b/fitz_old/helper-other.i similarity index 100% rename from fitz/helper-other.i rename to fitz_old/helper-other.i diff --git a/fitz/helper-pdfinfo.i b/fitz_old/helper-pdfinfo.i similarity index 100% rename from fitz/helper-pdfinfo.i rename to fitz_old/helper-pdfinfo.i diff --git a/fitz/helper-pixmap.i b/fitz_old/helper-pixmap.i similarity index 100% rename from fitz/helper-pixmap.i rename to fitz_old/helper-pixmap.i diff --git a/fitz/helper-portfolio.i b/fitz_old/helper-portfolio.i similarity index 100% rename from fitz/helper-portfolio.i rename to fitz_old/helper-portfolio.i diff --git a/fitz/helper-python.i b/fitz_old/helper-python.i similarity index 100% rename from fitz/helper-python.i rename to fitz_old/helper-python.i diff --git a/fitz/helper-select.i b/fitz_old/helper-select.i similarity index 100% rename from fitz/helper-select.i rename to fitz_old/helper-select.i diff --git a/fitz/helper-stext.i b/fitz_old/helper-stext.i similarity index 100% rename from fitz/helper-stext.i rename to fitz_old/helper-stext.i diff --git a/fitz/helper-xobject.i b/fitz_old/helper-xobject.i similarity index 100% rename from fitz/helper-xobject.i rename to fitz_old/helper-xobject.i diff --git a/fitz/utils.py b/fitz_old/utils.py similarity index 99% rename from fitz/utils.py rename to fitz_old/utils.py index ea3f0e9a9..26b87e94e 100644 --- a/fitz/utils.py +++ b/fitz_old/utils.py @@ -16,7 +16,7 @@ import typing import warnings -from fitz import * +from fitz_old import * TESSDATA_PREFIX = os.getenv("TESSDATA_PREFIX") point_like = "point_like" @@ -275,7 +275,7 @@ def delete_image(page: Page, xref: int): xref: xref of the image to delete. """ # make a small 100% transparent pixmap (of just any dimension) - pix = fitz.Pixmap(fitz.csGRAY, (0, 0, 1, 1), 1) + pix = fitz_old.Pixmap(fitz_old.csGRAY, (0, 0, 1, 1), 1) pix.clear_with() # clear all samples bytes to 0x00 page.replace_image(xref, pixmap=pix) diff --git a/fitz/version.i b/fitz_old/version.i similarity index 100% rename from fitz/version.i rename to fitz_old/version.i diff --git a/setup.py b/setup.py index 4e7378010..754d14c8a 100755 --- a/setup.py +++ b/setup.py @@ -128,9 +128,6 @@ If '0' we do not rebuild if only fitz/helper-git-versions.i has changed. - PYMUPDF_SETUP_SKELETON - If '1' we build minimal wheel for testing. - WDEV_VS_YEAR If set, we use as Visual Studio year, for example '2019' or '2022'. @@ -513,115 +510,6 @@ def build(): ''' pipcl.py `build_fn()` callback. ''' - skeleton = os.environ.get( 'PYMUPDF_SETUP_SKELETON') - log( f'{skeleton=}') - if skeleton == '1': - ret = list() - log( f'{g_flavour=}') - run( f'ls -l wheelhouse', check=0) - if 'b' in g_flavour: - with open( 'foo.c', 'w') as f: - f.write( textwrap.dedent( ''' - int foo(int x) - { - return x+1; - } - ''')) - run(f'cc -fPIC -shared -o {g_root}/libfoo.so foo.c') - ret.append( f'{g_root}/libfoo.so') - ret.append( (f'{g_root}/READMErb.md', '$dist-info/README.md')) - if 'p' in g_flavour: - with open( 'bar.c', 'w') as f: - f.write( textwrap.dedent( ''' - int bar(int x) - { - return x+1; - } - ''')) - run(f'cc -fPIC -shared -o {g_root}/_bar.so bar.c') - with open( 'bar.py', 'w') as f: - f.write( textwrap.dedent( ''' - def bar(x): - return x - 1 - ''')) - ret.append( f'{g_root}/bar.py') - ret.append( f'{g_root}/_bar.so') - ret.append( (f'{g_root}/README.md', '$dist-info/README.md')) - return ret - - elif skeleton == '2': - os.makedirs( 'src-skeleton2', exist_ok=True) - ret = list() - #cc, pythonflags = pipcl.base_compiler() - #ld, pythonflags = pipcl.base_linker() - if 1: - # Build minimal libmupdf.so. - cc, _ = pipcl.base_compiler() - with open( 'src-skeleton2/mupdf.c', 'w') as f: - f.write( textwrap.dedent(''' - int foo(int x) - { - return x + 1; - } - ''')) - # Use of rpath here is Linux/OpenBSD-specific. - run(f'{cc} -o src-skeleton2/libmupdf.so src-skeleton2/mupdf.c -fPIC -shared -Wl,-rpath,\'$ORIGIN\',-z,origin') - ret.append( ('src-skeleton2/libmupdf.so', '')) - if 'p' in g_flavour: - # Build extension module `fitz`. - with open( 'src-skeleton2/fitz.i', 'w') as f: - f.write( textwrap.dedent(''' - %module fitz - - %{ - int foo(int x); - int bar(int x) - { - return foo(x) * 2; - } - %} - - int bar(int x); - ''')) - path_so_leaf_a = pipcl.build_extension( - name = 'fitz', - path_i = 'src-skeleton2/fitz.i', - outdir = 'src-skeleton2', - cpp = False, - libpaths = ['src-skeleton2'], - libs = ['mupdf'], - ) - - with open( 'src-skeleton2/fitz.i', 'w') as f: - f.write( textwrap.dedent(''' - %module fitz_new - - %{ - int foo(int x); - int bar(int x) - { - return foo(x) * 2; - } - %} - - int bar(int x); - ''')) - path_so_leaf_b = pipcl.build_extension( - name = 'fitz_new', - path_i = 'src-skeleton2/fitz.i', - outdir = 'src-skeleton2', - cpp = False, - libpaths = ['src-skeleton2'], - libs = ['mupdf'], - ) - ret.append( (f'src-skeleton2/{path_so_leaf_a}', '')) - ret.append( (f'src-skeleton2/fitz.py', '')) - ret.append( (f'src-skeleton2/{path_so_leaf_b}', '')) - ret.append( (f'src-skeleton2/fitz_new.py', '')) - ret.append( (f'{g_root}/README.md', '$dist-info/README.md')) - return ret - - # Download MuPDF. # mupdf_local = get_mupdf() @@ -634,7 +522,7 @@ def bar(x): # env_extra = dict() if mupdf_local: - from_ = f'{g_root}/fitz/_config.h' + from_ = f'{g_root}/fitz_old/_config.h' to_ = f'{mupdf_local}/include/mupdf/fitz/config.h' if os.environ.get('PYMUPDF_SETUP_MUPDF_OVERWRITE_CONFIG') == '0': # Use MuPDF default config. @@ -657,7 +545,7 @@ def bar(x): mupdf_build_dir = build_mupdf_unix( mupdf_local, env_extra, build_type) log( f'build(): mupdf_build_dir={mupdf_build_dir!r}') - # Build rebased `extra` module and/or PyMuPDF `fitz` module. + # Build rebased `extra` module and/or PyMuPDF `fitz_old` module. # path_so_leaf_a, path_so_leaf_b = _build_extensions( mupdf_local, @@ -667,7 +555,7 @@ def bar(x): for d in ( mupdf_build_dir, - f'{g_root}/fitz', + f'{g_root}/fitz_old', f'{g_root}/src', ): if d: @@ -684,13 +572,13 @@ def add( ret, from_, to_): if path_so_leaf_a: # Add classic implementation files. - to_dir = 'fitz/' - add( ret_p, f'{g_root}/fitz/__init__.py', to_dir) - add( ret_p, f'{g_root}/fitz/__main__.py', to_dir) - add( ret_p, f'{g_root}/fitz/fitz.py', to_dir) - add( ret_p, f'{g_root}/fitz/table.py', to_dir) - add( ret_p, f'{g_root}/fitz/utils.py', to_dir) - add( ret_p, f'{g_root}/fitz/{path_so_leaf_a}', to_dir) + to_dir = 'fitz_old/' + add( ret_p, f'{g_root}/fitz_old/__init__.py', to_dir) + add( ret_p, f'{g_root}/fitz_old/__main__.py', to_dir) + add( ret_p, f'{g_root}/fitz_old/fitz_old.py', to_dir) + add( ret_p, f'{g_root}/src/table.py', to_dir) + add( ret_p, f'{g_root}/fitz_old/utils.py', to_dir) + add( ret_p, f'{g_root}/fitz_old/{path_so_leaf_a}', to_dir) if mupdf_local: # Add mupdf shared library next to `path_so_leaf_a` so it will be @@ -708,11 +596,11 @@ def add( ret, from_, to_): if path_so_leaf_b: # Add rebased implementation files. - to_dir = 'fitz_new/' if path_so_leaf_a else 'fitz/' + to_dir = 'fitz/' add( ret_p, f'{g_root}/src/__init__.py', to_dir) add( ret_p, f'{g_root}/src/__main__.py', to_dir) add( ret_p, f'{g_root}/src/fitz.py', to_dir) - add( ret_p, f'{g_root}/fitz/table.py', to_dir) + add( ret_p, f'{g_root}/src/table.py', to_dir) add( ret_p, f'{g_root}/src/utils.py', to_dir) add( ret_p, f'{g_root}/src/extra.py', to_dir) add( ret_p, f'{g_root}/src/{path_so_leaf_b}', to_dir) @@ -959,10 +847,10 @@ def write_git(name, directory): if mupdf_local: write_git('mupdf', mupdf_local) f.write('%}\n') - _fs_update( f.getvalue(), 'fitz/helper-git-versions.i') + _fs_update( f.getvalue(), 'fitz_old/helper-git-versions.i') if os.environ.get( 'PYMUPDF_SETUP_REBUILD_GIT_DETAILS') == '0': - log( f'Marking fitz/helper-git-versions.i as old because PYMUPDF_SETUP_REBUILD_GIT_DETAILS=0') - os.utime( 'fitz/helper-git-versions.i', (1, 1)) + log( f'Marking fitz_old/helper-git-versions.i as old because PYMUPDF_SETUP_REBUILD_GIT_DETAILS=0') + os.utime( 'fitz_old/helper-git-versions.i', (1, 1)) if windows: compiler_extra_c = '' @@ -972,7 +860,7 @@ def write_git(name, directory): ' -Wno-pointer-sign' ' -Wno-sign-compare' ) - prerequisites_swig = glob.glob( f'{g_root}/fitz/*.i') + prerequisites_swig = glob.glob( f'{g_root}/fitz_old/*.i') if os.environ.get( 'PYMUPDF_SETUP_REBUILD_GIT_DETAILS') == '0': # Remove helper-git-versions.i from prerequisites_swig so # it doesn't force rebuild on its own. [Cannot easily use @@ -986,9 +874,9 @@ def write_git(name, directory): assert 0, f'Cannot find *helper-git-versions.i in prerequisites_swig: {prerequisites_swig}' path_so_leaf_a = pipcl.build_extension( - name = 'fitz', - path_i = f'{g_root}/fitz/fitz.i', - outdir = f'{g_root}/fitz', + name = 'fitz_old', + path_i = f'{g_root}/fitz_old/fitz_old.i', + outdir = f'{g_root}/fitz_old', includes = includes, defines = defines, libpaths = libpaths, diff --git a/fitz/table.py b/src/table.py similarity index 100% rename from fitz/table.py rename to src/table.py diff --git a/tests/run_compound.py b/tests/run_compound.py index 3702fe542..5d00822d5 100755 --- a/tests/run_compound.py +++ b/tests/run_compound.py @@ -3,9 +3,9 @@ ''' Runs a command three times: -1. Run unchanged. This will use the default `fitz` implementation of PyMuPDF. +1. Run unchanged. This will use the default `fitz_old` implementation of PyMuPDF. -2. Run with PYTHONPATH set up to use the `fitz_new` implementation of PyMuPDF. +2. Run with PYTHONPATH set up to use the `fitz` implementation of PyMuPDF. 3. As 2 but also set PYMUPDF_USE_EXTRA=0 to disable use of C++ optimisations. @@ -33,14 +33,9 @@ def main(): args = sys.argv[1:] - # Run with default `fitz`. - # - log( f'Running using fitz: {shlex.join(args)}') - e1 = subprocess.run( args, shell=0, check=0).returncode - - # Run with `fitz_new`. We create a file fitz.py that does `from fitz_new + # Run with `fitz_old` (classic). We create a file fitz.py that does `from fitz_old # import *` and prepend it to PYTHONPATH. So `import fitz` will actually - # import fitz_new as fitz. + # import fitz_old as fitz. # d = os.path.abspath( f'{__file__}/../resources') @@ -51,22 +46,28 @@ def main(): f.write( textwrap.dedent( f''' #import sys #print(f'{{__file__}}: {{sys.path=}}') - #print(f'{{__file__}}: Importing * from fitz_new') + #print(f'{{__file__}}: Importing * from fitz_old') #sys.stdout.flush() - from fitz_new import * + from fitz_old import * ''')) env = os.environ.copy() pp = env.get( 'PYTHONPATH') pp = d if pp is None else f'{d}:{pp}' env[ 'PYTHONPATH'] = pp - log(f'Running using fitz_new, PYTHONPATH={pp}: {shlex.join(args)}') + log(f'Running using fitz_old (classic), PYTHONPATH={pp}: {shlex.join(args)}') e2 = subprocess.run( args, shell=0, check=0, env=env).returncode - # Run with `fitz_new` again, this time with PYMUPDF_USE_EXTRA=0. + # Run with default `fitz` (rebased). # + log( f'Running using fitz (rebased): {shlex.join(args)}') + e1 = subprocess.run( args, shell=0, check=0).returncode + + # Run with `fitz` (rebased) again, this time with PYMUPDF_USE_EXTRA=0. + # + env = os.environ.copy() env[ 'PYMUPDF_USE_EXTRA'] = '0' - log(f'Running using fitz_new without optimisations, PYTHONPATH={pp}: {shlex.join(args)}') + log(f'Running using fitz (rebased) without optimisations, PYTHONPATH={pp}: {shlex.join(args)}') e3 = subprocess.run( args, shell=0, check=0, env=env).returncode log( f'{e1=} {e2=} {e3=}') diff --git a/tests/test_flake8.py b/tests/test_flake8.py index 385de10da..8f4967260 100644 --- a/tests/test_flake8.py +++ b/tests/test_flake8.py @@ -54,5 +54,5 @@ def run(command): print(f'test_flake8(): Running: {command}') subprocess.run(command, shell=1, check=1) run(f'pip install flake8') - run(f'flake8 --ignore={ignores} --statistics {root}/src/__init__.py {root}/src/utils.py {root}/fitz/table.py') + run(f'flake8 --ignore={ignores} --statistics {root}/src/__init__.py {root}/src/utils.py {root}/src/table.py') print(f'test_flake8(): flake8 succeeded.')