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.
Files changed (95) hide show
  1. {babeldoc-0.2.18 → babeldoc-0.2.20}/PKG-INFO +1 -1
  2. babeldoc-0.2.20/babeldoc/__init__.py +1 -0
  3. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/assets/assets.py +6 -1
  4. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/const.py +1 -1
  5. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/backend/pdf_creater.py +6 -5
  6. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/frontend/il_creater.py +10 -0
  7. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/styles_and_formulas.py +2 -0
  8. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/high_level.py +3 -0
  9. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/main.py +8 -1
  10. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/pdfinterp.py +2 -2
  11. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/translation_config.py +2 -0
  12. {babeldoc-0.2.18 → babeldoc-0.2.20}/pyproject.toml +2 -2
  13. {babeldoc-0.2.18 → babeldoc-0.2.20}/uv.lock +1 -1
  14. babeldoc-0.2.18/babeldoc/__init__.py +0 -1
  15. {babeldoc-0.2.18 → babeldoc-0.2.20}/.cursorignore +0 -0
  16. {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  17. {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  18. {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/dependabot.yml +0 -0
  19. {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/labels.yml +0 -0
  20. {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/release-drafter.yml +0 -0
  21. {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/workflows/codeql.yml +0 -0
  22. {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/workflows/docs.yml +0 -0
  23. {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/workflows/labeler.yml +0 -0
  24. {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/workflows/publish-to-pypi.yml +0 -0
  25. {babeldoc-0.2.18 → babeldoc-0.2.20}/.github/workflows/test.yml +0 -0
  26. {babeldoc-0.2.18 → babeldoc-0.2.20}/.gitignore +0 -0
  27. {babeldoc-0.2.18 → babeldoc-0.2.20}/.pre-commit-config.yaml +0 -0
  28. {babeldoc-0.2.18 → babeldoc-0.2.20}/LICENSE +0 -0
  29. {babeldoc-0.2.18 → babeldoc-0.2.20}/README.md +0 -0
  30. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/assets/embedding_assets_metadata.py +0 -0
  31. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/asynchronize/__init__.py +0 -0
  32. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/converter.py +0 -0
  33. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/__init__.py +0 -0
  34. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/babeldoc_exception/BabelDOCException.py +0 -0
  35. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/backend/__init__.py +0 -0
  36. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/frontend/__init__.py +0 -0
  37. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/il_version_1.py +0 -0
  38. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/il_version_1.rnc +0 -0
  39. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/il_version_1.rng +0 -0
  40. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/il_version_1.xsd +0 -0
  41. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/__init__.py +0 -0
  42. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/add_debug_information.py +0 -0
  43. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/detect_scanned_file.py +0 -0
  44. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/il_translator.py +0 -0
  45. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/il_translator_llm_only.py +0 -0
  46. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/layout_parser.py +0 -0
  47. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/paragraph_finder.py +0 -0
  48. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/remove_descent.py +0 -0
  49. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/table_parser.py +0 -0
  50. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/midend/typesetting.py +0 -0
  51. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/translator/__init__.py +0 -0
  52. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/translator/cache.py +0 -0
  53. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/translator/translator.py +0 -0
  54. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/utils/fontmap.py +0 -0
  55. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/utils/layout_helper.py +0 -0
  56. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/utils/style_helper.py +0 -0
  57. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/document_il/xml_converter.py +0 -0
  58. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/docvision/README.md +0 -0
  59. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/docvision/__init__.py +0 -0
  60. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/docvision/doclayout.py +0 -0
  61. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/docvision/rpc_doclayout.py +0 -0
  62. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/docvision/table_detection/rapidocr.py +0 -0
  63. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/progress_monitor.py +0 -0
  64. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/result_merger.py +0 -0
  65. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/split_manager.py +0 -0
  66. {babeldoc-0.2.18 → babeldoc-0.2.20}/babeldoc/tools/generate_font_metadata.py +0 -0
  67. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/CODE_OF_CONDUCT.md +0 -0
  68. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/CONTRIBUTING.md +0 -0
  69. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/CONTRIBUTOR_REWARD.md +0 -0
  70. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/AsyncTranslate/AsyncTranslate.md +0 -0
  71. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/ILTranslator/ILTranslator.md +0 -0
  72. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/PDFCreation/PDFCreation.md +0 -0
  73. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/PDFParsing/PDFParsing.md +0 -0
  74. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/ParagraphFinding/ParagraphFinding.md +0 -0
  75. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/README.md +0 -0
  76. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md +0 -0
  77. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/ImplementationDetails/Typesetting/Typesetting.md +0 -0
  78. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/README.md +0 -0
  79. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/deploy.sh +0 -0
  80. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-banner.png +0 -0
  81. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.png +0 -0
  82. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-big-logo-darkmode-with-transparent-background.svg +0 -0
  83. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-big-logo-with-transparent-background.png +0 -0
  84. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-big-logo-with-transparent-background.svg +0 -0
  85. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-big-logo.png +0 -0
  86. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-contributor_reward_example.png +0 -0
  87. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-preview.gif +0 -0
  88. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-small-logo-with-transparent-background.png +0 -0
  89. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-small-logo-with-transparent-background.svg +0 -0
  90. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/images/babeldoc-small-logo.png +0 -0
  91. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/index.md +0 -0
  92. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/intro-to-pdf-object.md +0 -0
  93. {babeldoc-0.2.18 → babeldoc-0.2.20}/docs/requirements.txt +0 -0
  94. {babeldoc-0.2.18 → babeldoc-0.2.20}/mkdocs.yml +0 -0
  95. {babeldoc-0.2.18 → babeldoc-0.2.20}/tests/test_translation_config.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: BabelDOC
3
- Version: 0.2.18
3
+ Version: 0.2.20
4
4
  Summary: Yet Another Document Translator
5
5
  Project-URL: Homepage, https://github.com/funstory-ai/BabelDOC
6
6
  Project-URL: Issues, https://github.com/funstory-ai/BabelDOC/issues
@@ -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,
@@ -3,7 +3,7 @@ import shutil
3
3
  import subprocess
4
4
  from pathlib import Path
5
5
 
6
- __version__ = "0.2.18"
6
+ __version__ = "0.2.20"
7
7
 
8
8
  CACHE_FOLDER = Path.home() / ".cache" / "babeldoc"
9
9
 
@@ -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" Q ")
679
- page_op.append(
680
- f"q Q 1 0 0 1 {page.cropbox.box.x} {page.cropbox.box.y} cm \n".encode(),
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
@@ -531,6 +531,8 @@ class StylesAndFormulas:
531
531
  r"|GlosaMath.+"
532
532
  r"|URWPalladioL.+"
533
533
  r"|CMSS.+"
534
+ r"|Arial.*"
535
+ r"|TimesNewRoman.*"
534
536
  r")$"
535
537
  )
536
538
  if self.translation_config.formular_font_pattern:
@@ -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.18"
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.18"
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.18"
151
+ current_version = "0.2.20"
152
152
  version_pattern = "MAJOR.MINOR.PATCH[.PYTAGNUM]"
153
153
 
154
154
  [bumpver.file_patterns]
@@ -48,7 +48,7 @@ wheels = [
48
48
 
49
49
  [[package]]
50
50
  name = "babeldoc"
51
- version = "0.2.18"
51
+ version = "0.2.20"
52
52
  source = { editable = "." }
53
53
  dependencies = [
54
54
  { name = "bitstring" },
@@ -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