BabelDOC 0.2.18__tar.gz → 0.2.20__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.
- {babeldoc-0.2.18 → babeldoc-0.2.20}/PKG-INFO +1 -1
- babeldoc-0.2.20/babeldoc/__init__.py +1 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/assets/assets.py +6 -1
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/const.py +1 -1
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/backend/pdf_creater.py +6 -5
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/frontend/il_creater.py +10 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/styles_and_formulas.py +2 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/high_level.py +3 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/main.py +8 -1
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/pdfinterp.py +2 -2
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/translation_config.py +2 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/pyproject.toml +2 -2
- {babeldoc-0.2.18 → babeldoc-0.2.20}/uv.lock +1 -1
- babeldoc-0.2.18/babeldoc/__init__.py +0 -1
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.cursorignore +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/dependabot.yml +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/labels.yml +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/release-drafter.yml +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/workflows/codeql.yml +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/workflows/docs.yml +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/workflows/labeler.yml +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/workflows/publish-to-pypi.yml +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/workflows/test.yml +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.gitignore +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/.pre-commit-config.yaml +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/LICENSE +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/README.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/assets/embedding_assets_metadata.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/asynchronize/__init__.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/converter.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/__init__.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/babeldoc_exception/BabelDOCException.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/backend/__init__.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/frontend/__init__.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/il_version_1.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/il_version_1.rnc +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/il_version_1.rng +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/il_version_1.xsd +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/__init__.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/add_debug_information.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/detect_scanned_file.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/il_translator.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/il_translator_llm_only.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/layout_parser.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/paragraph_finder.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/remove_descent.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/table_parser.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/typesetting.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/translator/__init__.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/translator/cache.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/translator/translator.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/utils/fontmap.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/utils/layout_helper.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/utils/style_helper.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/xml_converter.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/docvision/README.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/docvision/__init__.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/docvision/doclayout.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/docvision/rpc_doclayout.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/progress_monitor.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/result_merger.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/split_manager.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/tools/generate_font_metadata.py +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/CODE_OF_CONDUCT.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/CONTRIBUTING.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/CONTRIBUTOR_REWARD.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/README.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/README.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/deploy.sh +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-banner.png +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-big-logo.png +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-contributor_reward_example.png +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-preview.gif +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-small-logo.png +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/index.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/intro-to-pdf-object.md +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/requirements.txt +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/mkdocs.yml +0 -0
- {babeldoc-0.2.18 → babeldoc-0.2.20}/tests/test_translation_config.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.20"
|
|
@@ -328,8 +328,11 @@ async def async_warmup():
|
|
|
328
328
|
_ = encoding_for_model("gpt-4o")
|
|
329
329
|
async with httpx.AsyncClient() as client:
|
|
330
330
|
onnx_task = asyncio.create_task(get_doclayout_onnx_model_path_async(client))
|
|
331
|
+
onnx_task2 = asyncio.create_task(
|
|
332
|
+
get_table_detection_rapidocr_model_path_async(client)
|
|
333
|
+
)
|
|
331
334
|
font_tasks = asyncio.create_task(download_all_fonts_async(client))
|
|
332
|
-
await asyncio.gather(onnx_task, font_tasks)
|
|
335
|
+
await asyncio.gather(onnx_task, onnx_task2, font_tasks)
|
|
333
336
|
|
|
334
337
|
|
|
335
338
|
def warmup():
|
|
@@ -360,6 +363,8 @@ def generate_all_assets_file_list():
|
|
|
360
363
|
"name": "doclayout_yolo_docstructbench_imgsz1024.onnx",
|
|
361
364
|
"sha3_256": DOCLAYOUT_YOLO_DOCSTRUCTBENCH_IMGSZ1024ONNX_SHA3_256,
|
|
362
365
|
},
|
|
366
|
+
)
|
|
367
|
+
result["models"].append(
|
|
363
368
|
{
|
|
364
369
|
"name": "ch_PP-OCRv4_det_infer.onnx",
|
|
365
370
|
"sha3_256": TABLE_DETECTION_RAPIDOCR_MODEL_SHA3_256,
|
|
@@ -673,12 +673,13 @@ class PDFCreater:
|
|
|
673
673
|
}
|
|
674
674
|
page_op = BitStream()
|
|
675
675
|
# q {ops_base}Q 1 0 0 1 {x0} {y0} cm {ops_new}
|
|
676
|
-
page_op.append(b"q ")
|
|
676
|
+
# page_op.append(b"q ")
|
|
677
677
|
page_op.append(page.base_operations.value.encode())
|
|
678
|
-
page_op.append(b"
|
|
679
|
-
page_op.append(
|
|
680
|
-
|
|
681
|
-
)
|
|
678
|
+
page_op.append(b" \n")
|
|
679
|
+
# page_op.append(b" Q ")
|
|
680
|
+
# page_op.append(
|
|
681
|
+
# f"q Q 1 0 0 1 {page.cropbox.box.x} {page.cropbox.box.y} cm \n".encode(),
|
|
682
|
+
# )
|
|
682
683
|
# 收集所有字符
|
|
683
684
|
chars = []
|
|
684
685
|
# 首先添加页面级别的字符
|
|
@@ -18,6 +18,7 @@ from pdfminer.pdftypes import resolve1 as pdftypes_resolve1
|
|
|
18
18
|
from pdfminer.psparser import PSLiteral
|
|
19
19
|
|
|
20
20
|
from babeldoc.document_il import il_version_1
|
|
21
|
+
from babeldoc.document_il.utils.style_helper import YELLOW
|
|
21
22
|
from babeldoc.translation_config import TranslationConfig
|
|
22
23
|
|
|
23
24
|
|
|
@@ -568,6 +569,15 @@ class ILCreater:
|
|
|
568
569
|
|
|
569
570
|
self.current_page.pdf_character.append(pdf_char)
|
|
570
571
|
|
|
572
|
+
if self.translation_config.show_char_box:
|
|
573
|
+
self.current_page.pdf_rectangle.append(
|
|
574
|
+
il_version_1.PdfRectangle(
|
|
575
|
+
box=pdf_char.visual_bbox.box,
|
|
576
|
+
graphic_state=YELLOW,
|
|
577
|
+
debug_info=True,
|
|
578
|
+
)
|
|
579
|
+
)
|
|
580
|
+
|
|
571
581
|
def create_il(self):
|
|
572
582
|
pages = [
|
|
573
583
|
page
|
|
@@ -504,6 +504,7 @@ def do_translate(
|
|
|
504
504
|
logger.info(
|
|
505
505
|
f"finish translate: {original_pdf_path}, cost: {finish_time - start_time} s",
|
|
506
506
|
)
|
|
507
|
+
result.original_pdf_path = translation_config.input_file
|
|
507
508
|
pm.translate_done(result)
|
|
508
509
|
return result
|
|
509
510
|
|
|
@@ -682,6 +683,8 @@ def _do_translate_single(
|
|
|
682
683
|
except Exception:
|
|
683
684
|
result.dual_pdf_path = result.no_watermark_dual_pdf_path
|
|
684
685
|
|
|
686
|
+
result.original_pdf_path = translation_config.input_file
|
|
687
|
+
|
|
685
688
|
return result
|
|
686
689
|
|
|
687
690
|
|
|
@@ -23,7 +23,7 @@ from babeldoc.translation_config import TranslationConfig
|
|
|
23
23
|
from babeldoc.translation_config import WatermarkOutputMode
|
|
24
24
|
|
|
25
25
|
logger = logging.getLogger(__name__)
|
|
26
|
-
__version__ = "0.2.
|
|
26
|
+
__version__ = "0.2.20"
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
def create_parser():
|
|
@@ -198,6 +198,12 @@ def create_parser():
|
|
|
198
198
|
default=False,
|
|
199
199
|
help="Translate table text (experimental)",
|
|
200
200
|
)
|
|
201
|
+
translation_group.add_argument(
|
|
202
|
+
"--show-char-box",
|
|
203
|
+
action="store_true",
|
|
204
|
+
default=False,
|
|
205
|
+
help="Show character box (debug only)",
|
|
206
|
+
)
|
|
201
207
|
# service option argument group
|
|
202
208
|
service_group = translation_group.add_mutually_exclusive_group()
|
|
203
209
|
service_group.add_argument(
|
|
@@ -363,6 +369,7 @@ async def main():
|
|
|
363
369
|
watermark_output_mode=watermark_output_mode,
|
|
364
370
|
split_strategy=split_strategy,
|
|
365
371
|
table_model=table_model,
|
|
372
|
+
show_char_box=args.show_char_box,
|
|
366
373
|
)
|
|
367
374
|
|
|
368
375
|
# Create progress handler
|
|
@@ -290,7 +290,7 @@ class PDFPageInterpreterEx(PDFPageInterpreter):
|
|
|
290
290
|
self.scs = interpreter.scs
|
|
291
291
|
self.il_creater.on_xobj_end(
|
|
292
292
|
x_id,
|
|
293
|
-
f"q {ops_base}Q {a} {b} {c} {d} {e} {f} cm ",
|
|
293
|
+
f"q {ops_base} Q {a} {b} {c} {d} {e} {f} cm ",
|
|
294
294
|
)
|
|
295
295
|
try: # 有的时候 form 字体加不上这里会烂掉
|
|
296
296
|
self.device.fontid = interpreter.fontid
|
|
@@ -345,7 +345,7 @@ class PDFPageInterpreterEx(PDFPageInterpreter):
|
|
|
345
345
|
# )
|
|
346
346
|
# for obj in page.contents:
|
|
347
347
|
# self.obj_patch[obj.objid] = ""
|
|
348
|
-
return ops_base
|
|
348
|
+
return f"q {ops_base} Q 1 0 0 1 {x0} {y0} cm"
|
|
349
349
|
|
|
350
350
|
def render_contents(
|
|
351
351
|
self,
|
|
@@ -66,6 +66,7 @@ class TranslationConfig:
|
|
|
66
66
|
# Add split-related parameters
|
|
67
67
|
split_strategy: BaseSplitStrategy | None = None,
|
|
68
68
|
table_model=None,
|
|
69
|
+
show_char_box: bool = False,
|
|
69
70
|
):
|
|
70
71
|
self.translator = translator
|
|
71
72
|
|
|
@@ -144,6 +145,7 @@ class TranslationConfig:
|
|
|
144
145
|
self._part_output_dirs: dict[int, Path] = {}
|
|
145
146
|
|
|
146
147
|
self.table_model = table_model
|
|
148
|
+
self.show_char_box = show_char_box
|
|
147
149
|
|
|
148
150
|
def parse_pages(self, pages_str: str | None) -> list[tuple[int, int]] | None:
|
|
149
151
|
"""解析页码字符串,返回页码范围列表
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "BabelDOC"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.20"
|
|
4
4
|
description = "Yet Another Document Translator"
|
|
5
5
|
license = "AGPL-3.0"
|
|
6
6
|
readme = "README.md"
|
|
@@ -148,7 +148,7 @@ pythonpath = [".", "src"]
|
|
|
148
148
|
testpaths = ["tests"]
|
|
149
149
|
|
|
150
150
|
[bumpver]
|
|
151
|
-
current_version = "0.2.
|
|
151
|
+
current_version = "0.2.20"
|
|
152
152
|
version_pattern = "MAJOR.MINOR.PATCH[.PYTAGNUM]"
|
|
153
153
|
|
|
154
154
|
[bumpver.file_patterns]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.2.18"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/babeldoc_exception/BabelDOCException.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-big-logo-with-transparent-background.png
RENAMED
|
File without changes
|
{babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-big-logo-with-transparent-background.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-small-logo-with-transparent-background.png
RENAMED
|
File without changes
|
{babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-small-logo-with-transparent-background.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|