natural-pdf 25.3.16__py3-none-any.whl

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 (109) hide show
  1. examples/__init__.py +3 -0
  2. examples/another_exclusion_example.py +20 -0
  3. examples/basic_usage.py +190 -0
  4. examples/boundary_exclusion_test.py +137 -0
  5. examples/boundary_inclusion_fix_test.py +157 -0
  6. examples/chainable_layout_example.py +70 -0
  7. examples/color_basic_test.py +49 -0
  8. examples/color_name_example.py +71 -0
  9. examples/color_test.py +62 -0
  10. examples/debug_ocr.py +91 -0
  11. examples/direct_ocr_test.py +148 -0
  12. examples/direct_paddle_test.py +99 -0
  13. examples/direct_qa_example.py +165 -0
  14. examples/document_layout_analysis.py +123 -0
  15. examples/document_qa_example.py +185 -0
  16. examples/exclusion_count_debug.py +128 -0
  17. examples/exclusion_debug.py +107 -0
  18. examples/exclusion_example.py +150 -0
  19. examples/exclusion_optimization_example.py +190 -0
  20. examples/extract_text_test.py +128 -0
  21. examples/font_aware_example.py +101 -0
  22. examples/font_variant_example.py +124 -0
  23. examples/footer_overlap_test.py +124 -0
  24. examples/highlight_all_example.py +82 -0
  25. examples/highlight_attributes_test.py +114 -0
  26. examples/highlight_confidence_display.py +122 -0
  27. examples/highlight_demo.py +110 -0
  28. examples/highlight_float_test.py +71 -0
  29. examples/highlight_test.py +147 -0
  30. examples/highlighting_example.py +123 -0
  31. examples/image_width_example.py +84 -0
  32. examples/improved_api_example.py +128 -0
  33. examples/layout_confidence_display_test.py +65 -0
  34. examples/layout_confidence_test.py +82 -0
  35. examples/layout_coordinate_debug.py +258 -0
  36. examples/layout_highlight_test.py +77 -0
  37. examples/logging_example.py +70 -0
  38. examples/ocr_comprehensive.py +193 -0
  39. examples/ocr_debug_example.py +87 -0
  40. examples/ocr_default_test.py +97 -0
  41. examples/ocr_engine_comparison.py +235 -0
  42. examples/ocr_example.py +89 -0
  43. examples/ocr_simplified_params.py +79 -0
  44. examples/ocr_visualization.py +102 -0
  45. examples/ocr_visualization_test.py +121 -0
  46. examples/paddle_layout_example.py +315 -0
  47. examples/paddle_layout_simple.py +74 -0
  48. examples/paddleocr_example.py +224 -0
  49. examples/page_collection_example.py +103 -0
  50. examples/polygon_highlight_example.py +83 -0
  51. examples/position_methods_example.py +134 -0
  52. examples/region_boundary_test.py +73 -0
  53. examples/region_exclusion_test.py +149 -0
  54. examples/region_expand_example.py +109 -0
  55. examples/region_image_example.py +116 -0
  56. examples/region_ocr_test.py +119 -0
  57. examples/region_sections_example.py +115 -0
  58. examples/school_books.py +49 -0
  59. examples/school_books_all.py +52 -0
  60. examples/scouring.py +36 -0
  61. examples/section_extraction_example.py +232 -0
  62. examples/simple_document_qa.py +97 -0
  63. examples/spatial_navigation_example.py +108 -0
  64. examples/table_extraction_example.py +135 -0
  65. examples/table_structure_detection.py +155 -0
  66. examples/tatr_cells_test.py +56 -0
  67. examples/tatr_ocr_table_test.py +94 -0
  68. examples/text_search_example.py +122 -0
  69. examples/text_style_example.py +110 -0
  70. examples/tiny-text.py +61 -0
  71. examples/until_boundaries_example.py +156 -0
  72. examples/until_example.py +112 -0
  73. examples/very_basics.py +15 -0
  74. natural_pdf/__init__.py +55 -0
  75. natural_pdf/analyzers/__init__.py +9 -0
  76. natural_pdf/analyzers/document_layout.py +736 -0
  77. natural_pdf/analyzers/text_structure.py +153 -0
  78. natural_pdf/core/__init__.py +3 -0
  79. natural_pdf/core/page.py +2376 -0
  80. natural_pdf/core/pdf.py +572 -0
  81. natural_pdf/elements/__init__.py +3 -0
  82. natural_pdf/elements/base.py +553 -0
  83. natural_pdf/elements/collections.py +770 -0
  84. natural_pdf/elements/line.py +124 -0
  85. natural_pdf/elements/rect.py +122 -0
  86. natural_pdf/elements/region.py +1366 -0
  87. natural_pdf/elements/text.py +304 -0
  88. natural_pdf/ocr/__init__.py +62 -0
  89. natural_pdf/ocr/easyocr_engine.py +254 -0
  90. natural_pdf/ocr/engine.py +158 -0
  91. natural_pdf/ocr/paddleocr_engine.py +263 -0
  92. natural_pdf/qa/__init__.py +3 -0
  93. natural_pdf/qa/document_qa.py +405 -0
  94. natural_pdf/selectors/__init__.py +4 -0
  95. natural_pdf/selectors/parser.py +360 -0
  96. natural_pdf/templates/__init__.py +1 -0
  97. natural_pdf/templates/ocr_debug.html +517 -0
  98. natural_pdf/utils/__init__.py +4 -0
  99. natural_pdf/utils/highlighting.py +605 -0
  100. natural_pdf/utils/ocr.py +515 -0
  101. natural_pdf/utils/reading_order.py +227 -0
  102. natural_pdf/utils/visualization.py +151 -0
  103. natural_pdf-25.3.16.dist-info/LICENSE +21 -0
  104. natural_pdf-25.3.16.dist-info/METADATA +268 -0
  105. natural_pdf-25.3.16.dist-info/RECORD +109 -0
  106. natural_pdf-25.3.16.dist-info/WHEEL +5 -0
  107. natural_pdf-25.3.16.dist-info/top_level.txt +3 -0
  108. tests/__init__.py +3 -0
  109. tests/test_pdf.py +39 -0
@@ -0,0 +1,109 @@
1
+ examples/__init__.py,sha256=5FXw2QRYdkAMT5b89NmR-vC4UbEUZZHGyDK2KDYt36Y,33
2
+ examples/another_exclusion_example.py,sha256=cffipsR_MRBxCJaXa1V-DMtPtFdtNziQoSSnNw89JwQ,517
3
+ examples/basic_usage.py,sha256=LuZLZECcNfRvRoioUxq4SKzqmtfOzqsbecujP3dKfgE,8004
4
+ examples/boundary_exclusion_test.py,sha256=QD9setjqLInYg-Er0BTpAHBa_B43X57Cl0PX25UfoWU,5033
5
+ examples/boundary_inclusion_fix_test.py,sha256=Crnlt2CnX64WuEyi-2x5tSINgVJFv-nXY6_p9vdCzsQ,6681
6
+ examples/chainable_layout_example.py,sha256=hrdzI42bwI9yB7g84M4uIGVyZ4qTj2KODzUtzxet6mY,2683
7
+ examples/color_basic_test.py,sha256=qkpMushxIAJLUZxULCLRpziIDOoUGZ5Zm6TtPVNnCmo,1620
8
+ examples/color_name_example.py,sha256=667GFKD42RXbQIJ_Ey50uT_6OxO7BnK1FGVRqtRxeIs,2300
9
+ examples/color_test.py,sha256=owJ64qH5j5WgVhb7Nl2F-v89ilr1mQNwFm1xphvNnX4,2320
10
+ examples/debug_ocr.py,sha256=oHTHWyamz2B9Est1uuYaC1W4Acubh7YNQcb_4eTMZPw,2521
11
+ examples/direct_ocr_test.py,sha256=eO151awEYv24qKToj1704G4gq0SLgnx9bDXJgMHln64,5661
12
+ examples/direct_paddle_test.py,sha256=awoHkR0WLpDEzcOD_HtxhXoBe9FmVBjzzBwtN4HcbVE,3335
13
+ examples/direct_qa_example.py,sha256=0XxN1I617Tu9fPWoBFFwtyF9oA2Rlhw8HexHzomwJms,5709
14
+ examples/document_layout_analysis.py,sha256=zpr2LroZrrTqoGeb0BWhexc3gwfBIPB6FeEL-VhKyqU,4928
15
+ examples/document_qa_example.py,sha256=IKe7FKnKbdaDPwQ-1uwm3KJenxennzqigQJGiQBIL1g,7240
16
+ examples/exclusion_count_debug.py,sha256=UKrWiFkV42iuXShMR1AlzZyCVJpl9IoalIRcfazbVm4,4990
17
+ examples/exclusion_debug.py,sha256=J2ZXpEWLh-XK-7oDldovC0iGFEMtuwENLmAqGMFswZE,3708
18
+ examples/exclusion_example.py,sha256=JnlC19y3ASPTRjdV2A_5T5W1V4uy_DTAYw6O0TKk1GY,5778
19
+ examples/exclusion_optimization_example.py,sha256=OVkzSlSo2a5tSaruq51uRcvAyfMq06vCBGzcENGOZGI,7156
20
+ examples/extract_text_test.py,sha256=hmcmm8gcXbyOPGkhy3h56iFdT3AxuuuKny2wvQZyvHg,4903
21
+ examples/font_aware_example.py,sha256=62bZXe0uM-rD2WSbvvpEolq563zZPXsFgBzsM_iIx2c,3960
22
+ examples/font_variant_example.py,sha256=fYNxpx3MYjFvK3U47-oNlp1lOq7g4M6ZXqZwncHM_eA,4656
23
+ examples/footer_overlap_test.py,sha256=HoLqS-GV707z8D13NfzZvJUODL7ymfLV71iR0H5w1Fw,4654
24
+ examples/highlight_all_example.py,sha256=eJTQ52R3o6r1gdoAyTU1QOigRciieAZridqqByET2-0,3042
25
+ examples/highlight_attributes_test.py,sha256=ilqaQdTNwUU8Kzq64GHIEC2xk94AgU29YkLS9LQtgrQ,4426
26
+ examples/highlight_confidence_display.py,sha256=SG0W2wMTNlIK2HmzlgGU1gfzRY0NOX75rPPsPfa03dM,4481
27
+ examples/highlight_demo.py,sha256=xLfYKzwtZ-MJ-99AzgJBRihCYQd827QeHapfZXQqBjM,3495
28
+ examples/highlight_float_test.py,sha256=1VKwSJ_K9sVDjYjNNLBpj-1m860rF2ziNLWOXx_JWYU,2250
29
+ examples/highlight_test.py,sha256=nlirCchUB6P3jV9shn55kVSABZd5YcVozx1R47c39Gk,5812
30
+ examples/highlighting_example.py,sha256=8WoXL92nef61e4IDAEqL2EMC_nH06dM09OTXG7EJZO0,4893
31
+ examples/image_width_example.py,sha256=jq5Xekx9oWHzNFfVOGt_H9nIcdlM1xZGbNjRWzdq9Kc,3414
32
+ examples/improved_api_example.py,sha256=R_y_mzZYLJR1WnsAblgIBVGNBPKesLBMvnNEwhlhGpQ,4807
33
+ examples/layout_confidence_display_test.py,sha256=9Ywg5YYUb8yLICtkKWmnRuyHkFsnwC3e4kBfqvq2MSE,2605
34
+ examples/layout_confidence_test.py,sha256=hDr0Fwrv6p1UZ1vfMRXT3oR_SOgwj5GkLw3pd3D_Qaw,3438
35
+ examples/layout_coordinate_debug.py,sha256=H8qG7kAsdw1ZkmOTdcH9tU3WGgMdMGpFj8DDnNAXTO8,11405
36
+ examples/layout_highlight_test.py,sha256=ZOiy4beHuNlkDXVftMDo-xL9jwrzszU610CW6p5lZHI,3057
37
+ examples/logging_example.py,sha256=9xV0IqmNla67Is3ICN_Hvo-Dr4KtoXG1-QqiT711XKg,2543
38
+ examples/ocr_comprehensive.py,sha256=f2uC3m1hN11U9gyVJUKvoZ9Ul8ORkVRj0LWVQ0OraSE,6793
39
+ examples/ocr_debug_example.py,sha256=Ofx2B6HGzE6vSVq-4TOZEH8pzOzLFXxcHlseAMZF-uc,2996
40
+ examples/ocr_default_test.py,sha256=fn4j92M8ODoYKH7nPYEHSt_iT42e4u-KsGZH8HQlJqw,3404
41
+ examples/ocr_engine_comparison.py,sha256=3JRUjH5KxjPlZE45Ov20nSGB2Y2AvhwjlqPd9K3pVEk,8698
42
+ examples/ocr_example.py,sha256=E-b7PKLUmdwqCr4TCfECDvO_-du6Sf4-JFj8YyMCKLE,3375
43
+ examples/ocr_simplified_params.py,sha256=PnxWKj1LY_HrfZHmG-LzYva6lQPoUvD87Vtklv2LQxQ,2302
44
+ examples/ocr_visualization.py,sha256=Vs3KxgyFUGNTQzFvGpOFvO-8o9xpx8GzOTFXokvp3xA,3874
45
+ examples/ocr_visualization_test.py,sha256=Pu-0YY1gkKqt5FCPCn7aFVq_79YzYD6XdJOTyAHaDl4,3836
46
+ examples/paddle_layout_example.py,sha256=YueAv-jLF2--qAv45Ngkl-MlYlwNep6Ln8S00lebzs0,12861
47
+ examples/paddle_layout_simple.py,sha256=mffGwKDGL6aMo2plGIdT_j3iEiUiPwp--ZgM54np21I,2117
48
+ examples/paddleocr_example.py,sha256=Ouz6Sjj75UHqBGYZFEwRfifkgPZpDrViohmKPDf6e-I,7761
49
+ examples/page_collection_example.py,sha256=Nhx1mTnXxe-ThYu3tjUAoMdnUIaXHJigYf4WKt17HEE,4122
50
+ examples/polygon_highlight_example.py,sha256=J-vFzkbwTDJjbruI0AFVoSSwAkNQl-8lp-JsvVWJlXo,2966
51
+ examples/position_methods_example.py,sha256=sP-OkxQfMOnwUXbZ2bsIi4SPWXW8IRID0aqQ_aW4dys,4931
52
+ examples/region_boundary_test.py,sha256=6T3ECxl_ZjsqO6X7it2Tbo92CqIl6skpmOKOCdl9bbo,2584
53
+ examples/region_exclusion_test.py,sha256=_TcQWIb4aLYfoUIk5jlsJ32Q7eX-3IAg-DVkwAG1DKk,6650
54
+ examples/region_expand_example.py,sha256=_iKlMdLUVCUrEywC7N_pNc5rUvuqd5k93Pg1OrNCfvk,4081
55
+ examples/region_image_example.py,sha256=rsyK_LTrU-g6VF8kNu8SI1B92C4aWB1hfMsN1tg9ZGs,3949
56
+ examples/region_ocr_test.py,sha256=Ex8rd-jHjkGftHS4zkdj25tcfuGgu5I0Xv85Ky-OA68,4113
57
+ examples/region_sections_example.py,sha256=4JrL7uiWTds7KnpWItcfgwr_puScBADiPJ_4LLBgZo0,4677
58
+ examples/school_books.py,sha256=ouYsfp_Dm7f3oxg1VBc4ZpIVL5IyaXqMu8Yzujethao,1621
59
+ examples/school_books_all.py,sha256=5PLjbeyVvbTTSE_GCneFWI5dGOugs9MSYDKzxHuoGMU,1774
60
+ examples/scouring.py,sha256=WsBPi3i9DiE22ogWz3Lksex5HXSCvLhSmfa23HdfM5E,926
61
+ examples/section_extraction_example.py,sha256=fn451PFmAfdOTtSNhvah2OvpCGPF4dAnhOai-_yLLH8,8606
62
+ examples/simple_document_qa.py,sha256=B1R2_GclS3OOXmcOUCBO2R4BtWrrFj1bQiLJ3nqR4Y8,3744
63
+ examples/spatial_navigation_example.py,sha256=P5QkGlMOOASR2XY49cL2o5UNhIf7uQ9StG0My3rea2k,3761
64
+ examples/table_extraction_example.py,sha256=KwWtPwR8Db96sNeNXK1p8RJGtrp8EujEkqVKwzB4gfQ,4919
65
+ examples/table_structure_detection.py,sha256=il9-Gl0Qs11DKYo6fqo9c7cnd-9bmOsQVjOc5DI1E8g,5792
66
+ examples/tatr_cells_test.py,sha256=bnXWPk3t2oG_sxluAGEK5mZyEf0SrOHGxZUZp5l-0LE,1773
67
+ examples/tatr_ocr_table_test.py,sha256=B_GGOJarga0ExTViSygOuqnbjcKbFPyuMsEVnNnAzlE,3178
68
+ examples/text_search_example.py,sha256=d6y7S1WFSCEGRETVNwVcKmT7sjLh9R2S1H_NjJLNbow,4765
69
+ examples/text_style_example.py,sha256=pgLb9rbBrERj18icRsrSIgs0ndKuKcBWycwVPAAynrI,4276
70
+ examples/tiny-text.py,sha256=X_SDThngugL8q-XvcKlRe8iNUqouxT3rYCDFqK2MRyo,1693
71
+ examples/until_boundaries_example.py,sha256=rN8YrwDM7rBb1PuxYkpszYVWT-tNMSD-aKF-2zLBoHo,6461
72
+ examples/until_example.py,sha256=4b3GyQxaayGfODiXaCgxcq_92gUgpqaJ0_lMWQnYD_0,4559
73
+ examples/very_basics.py,sha256=cNLnr1z701ri0LgE1cVM4gfMMND0C9UnvvWybnwum6g,418
74
+ natural_pdf/__init__.py,sha256=kKHL7SWzk0_ydDDX12X5W3s9-vEKgVYOBubXzp_SCdM,1784
75
+ natural_pdf/analyzers/__init__.py,sha256=XhxlbwiqbGpeIlS88c4P2t7-MLP98U3CcIr-3nGp488,188
76
+ natural_pdf/analyzers/document_layout.py,sha256=VHZTiiEZByhYUBHqOqmNIgj59zhc3ZNKU5yVaZOa5Fw,31030
77
+ natural_pdf/analyzers/text_structure.py,sha256=ZmUsBMNBENjEYcABHqwziDXIHyCVYdUaEyAW0Ohagzc,5208
78
+ natural_pdf/core/__init__.py,sha256=GUuFtj2Apc9biAdUOlnL8leL3BQncEzubvpiAUaU3ss,37
79
+ natural_pdf/core/page.py,sha256=1DqF6mvpFKqsmRnFFrByV6C-MqGJ2MWyOQIwWiCs8PA,106040
80
+ natural_pdf/core/pdf.py,sha256=zeLiOJ8XZ8jPaCR9mhurCiQ6kzesN6lcTXlBjTowi_4,23363
81
+ natural_pdf/elements/__init__.py,sha256=6FGHZm2oONd8zErahMEawuB4AvJR5jOZPt4KtEwbj80,40
82
+ natural_pdf/elements/base.py,sha256=QJmhk6sYDKErLGrQ5VYhloytuntufxiP6wTzGfZ__9w,22754
83
+ natural_pdf/elements/collections.py,sha256=vFFeMS0XiBL3p9PyNmwXndKMlPhlwp8os3xKLveN_8k,31558
84
+ natural_pdf/elements/line.py,sha256=GrlpcfwcjugUGlneSDLaGa4ojz98A0l16wknlzrBCe0,4056
85
+ natural_pdf/elements/rect.py,sha256=dls9g-R213O78HvfAJMak3_eV14Zh654Zw7hqTTXxDQ,3949
86
+ natural_pdf/elements/region.py,sha256=2xXw6DyFp_nCGiQm6nNT7JfFvi82963R8rheZrkWpC8,57986
87
+ natural_pdf/elements/text.py,sha256=OAuy0ozaemj6yjMwhXPsJ76VZtRPeJbmrFTzpDJA2_U,11017
88
+ natural_pdf/ocr/__init__.py,sha256=m2_hQRNEQihg9yIx6tMkurKfAnsBU7jbREvZyR_c2fs,2206
89
+ natural_pdf/ocr/easyocr_engine.py,sha256=wwAgOf6IrCETyTGppjaVN6d46VlYRgK9ehbpwCE0LVA,9392
90
+ natural_pdf/ocr/engine.py,sha256=NuvZszyHRQoEGwJC7cNdR8UMumgaLADwWiwK0ey9sls,5679
91
+ natural_pdf/ocr/paddleocr_engine.py,sha256=iPKxfZhOLO146rOekOhRRB8y2BqqVTqrm8pkDgkaJgI,9157
92
+ natural_pdf/qa/__init__.py,sha256=kagdfqNMpTnyzjC2EFy_PBX5us38NnJL548ESSQVzfI,107
93
+ natural_pdf/qa/document_qa.py,sha256=kZwI1YWqnbzQafeIFJeNvhvqSIwLuF-85rAmdO0P_sE,16225
94
+ natural_pdf/selectors/__init__.py,sha256=Jfk-JBZEpQ7V5FWVGuLJQLH-qOfqNLC2AdicncMhrmY,121
95
+ natural_pdf/selectors/parser.py,sha256=ornrWpc4m9ABxnoMkL3mkZ8BdL0fFRSrcE0wPDPeqC0,14209
96
+ natural_pdf/templates/__init__.py,sha256=i7N8epDxZoDDsK4p2iUiMwzKVs97i_KtNk8ATArqlC4,19
97
+ natural_pdf/templates/ocr_debug.html,sha256=Zy9StzBeHFQU8ity6cjFSZLe3TY0QOabUux4c5WQUzs,19171
98
+ natural_pdf/utils/__init__.py,sha256=iAq5tqNSGcX5-t5CZkyyt6EFpAwH84spIXTCuJ46YMc,87
99
+ natural_pdf/utils/highlighting.py,sha256=2FWgBVZuoRTlsoKTKciBOhGtziLKQfI2Fyv3aklAfdg,25851
100
+ natural_pdf/utils/ocr.py,sha256=umnfiZ55JqO_uhXMvPGcje8eTG7jfI2WovRKfaYat7E,20308
101
+ natural_pdf/utils/reading_order.py,sha256=1oihH9ZTqQvIVDYc2oVEYqIXyPzi94ERtelp6TyzmWU,7594
102
+ natural_pdf/utils/visualization.py,sha256=Dujxp5xKbEap6UpoVEpArpkHChJLa_Je7FGz2S3Iwvw,5403
103
+ tests/__init__.py,sha256=34RJiJqy8uDxasGCbzXIaJlHQklHprscPcA4xp2s97g,30
104
+ tests/test_pdf.py,sha256=Ud-DI-GHAvnSJGMJewM_EwHtI_UgWTi7Gn9uIwQcpfE,1001
105
+ natural_pdf-25.3.16.dist-info/LICENSE,sha256=9zfwINwJlarbDmdh6iJV4QUG54QSJlSAUcnC1YiC_Ns,1074
106
+ natural_pdf-25.3.16.dist-info/METADATA,sha256=NzJ4A929jjoBvej1FByUxC9NhI5qGqlbIFos4gElEqQ,8365
107
+ natural_pdf-25.3.16.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
108
+ natural_pdf-25.3.16.dist-info/top_level.txt,sha256=2AueS3xkctrmlcDA_te2-_WG0A0wGhS0UQNwnr_cbFQ,27
109
+ natural_pdf-25.3.16.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (76.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,3 @@
1
+ examples
2
+ natural_pdf
3
+ tests
tests/__init__.py ADDED
@@ -0,0 +1,3 @@
1
+ """
2
+ Tests for natural-pdf.
3
+ """
tests/test_pdf.py ADDED
@@ -0,0 +1,39 @@
1
+ """
2
+ Tests for the PDF class.
3
+ """
4
+ import os
5
+ import sys
6
+ import unittest
7
+
8
+ # Add the parent directory to the path to import the package
9
+ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
10
+
11
+ from natural_pdf import PDF
12
+
13
+
14
+ class TestPDF(unittest.TestCase):
15
+ """Tests for the PDF class."""
16
+
17
+ def test_init(self):
18
+ """Test PDF initialization."""
19
+ # This test will fail until a test PDF is available
20
+ # Commented out for now
21
+ # pdf = PDF("test.pdf")
22
+ # self.assertIsNotNone(pdf)
23
+ # self.assertTrue(hasattr(pdf, 'pages'))
24
+ # pdf.close()
25
+ pass
26
+
27
+ def test_page_access(self):
28
+ """Test page access."""
29
+ # This test will fail until a test PDF is available
30
+ # Commented out for now
31
+ # pdf = PDF("test.pdf")
32
+ # self.assertTrue(len(pdf.pages) > 0)
33
+ # self.assertEqual(pdf.pages[0].number, 1)
34
+ # pdf.close()
35
+ pass
36
+
37
+
38
+ if __name__ == '__main__':
39
+ unittest.main()