hexapdf 0.23.0 → 0.24.0

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 (243) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +66 -0
  3. data/LICENSE +1 -1
  4. data/Rakefile +1 -1
  5. data/examples/016-frame_automatic_box_placement.rb +7 -2
  6. data/examples/017-frame_text_flow.rb +10 -18
  7. data/examples/020-column_box.rb +40 -0
  8. data/examples/021-list_box.rb +26 -0
  9. data/lib/hexapdf/cli/batch.rb +1 -1
  10. data/lib/hexapdf/cli/command.rb +1 -1
  11. data/lib/hexapdf/cli/files.rb +1 -1
  12. data/lib/hexapdf/cli/fonts.rb +1 -1
  13. data/lib/hexapdf/cli/form.rb +2 -2
  14. data/lib/hexapdf/cli/image2pdf.rb +1 -1
  15. data/lib/hexapdf/cli/images.rb +1 -1
  16. data/lib/hexapdf/cli/info.rb +2 -2
  17. data/lib/hexapdf/cli/inspect.rb +2 -2
  18. data/lib/hexapdf/cli/merge.rb +1 -1
  19. data/lib/hexapdf/cli/modify.rb +1 -1
  20. data/lib/hexapdf/cli/optimize.rb +1 -1
  21. data/lib/hexapdf/cli/split.rb +1 -1
  22. data/lib/hexapdf/cli/watermark.rb +1 -1
  23. data/lib/hexapdf/cli.rb +1 -1
  24. data/lib/hexapdf/composer.rb +45 -126
  25. data/lib/hexapdf/configuration.rb +17 -1
  26. data/lib/hexapdf/content/canvas.rb +1 -1
  27. data/lib/hexapdf/content/color_space.rb +1 -1
  28. data/lib/hexapdf/content/graphic_object/arc.rb +1 -1
  29. data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +1 -1
  30. data/lib/hexapdf/content/graphic_object/geom2d.rb +2 -1
  31. data/lib/hexapdf/content/graphic_object/solid_arc.rb +1 -1
  32. data/lib/hexapdf/content/graphic_object.rb +1 -1
  33. data/lib/hexapdf/content/graphics_state.rb +1 -1
  34. data/lib/hexapdf/content/operator.rb +1 -1
  35. data/lib/hexapdf/content/parser.rb +1 -1
  36. data/lib/hexapdf/content/processor.rb +1 -1
  37. data/lib/hexapdf/content/transformation_matrix.rb +1 -1
  38. data/lib/hexapdf/content.rb +1 -1
  39. data/lib/hexapdf/data_dir.rb +1 -1
  40. data/lib/hexapdf/dictionary.rb +1 -1
  41. data/lib/hexapdf/dictionary_fields.rb +1 -1
  42. data/lib/hexapdf/document/files.rb +1 -1
  43. data/lib/hexapdf/document/fonts.rb +1 -1
  44. data/lib/hexapdf/document/images.rb +1 -1
  45. data/lib/hexapdf/document/layout.rb +397 -0
  46. data/lib/hexapdf/document/pages.rb +17 -1
  47. data/lib/hexapdf/document/signatures.rb +5 -4
  48. data/lib/hexapdf/document.rb +8 -1
  49. data/lib/hexapdf/encryption/aes.rb +1 -1
  50. data/lib/hexapdf/encryption/arc4.rb +1 -1
  51. data/lib/hexapdf/encryption/fast_aes.rb +1 -1
  52. data/lib/hexapdf/encryption/fast_arc4.rb +30 -21
  53. data/lib/hexapdf/encryption/identity.rb +1 -1
  54. data/lib/hexapdf/encryption/ruby_aes.rb +1 -1
  55. data/lib/hexapdf/encryption/ruby_arc4.rb +1 -1
  56. data/lib/hexapdf/encryption/security_handler.rb +1 -1
  57. data/lib/hexapdf/encryption/standard_security_handler.rb +1 -1
  58. data/lib/hexapdf/encryption.rb +1 -1
  59. data/lib/hexapdf/error.rb +1 -1
  60. data/lib/hexapdf/filter/ascii85_decode.rb +1 -1
  61. data/lib/hexapdf/filter/ascii_hex_decode.rb +1 -1
  62. data/lib/hexapdf/filter/crypt.rb +1 -1
  63. data/lib/hexapdf/filter/encryption.rb +1 -1
  64. data/lib/hexapdf/filter/flate_decode.rb +1 -1
  65. data/lib/hexapdf/filter/lzw_decode.rb +1 -1
  66. data/lib/hexapdf/filter/pass_through.rb +1 -1
  67. data/lib/hexapdf/filter/predictor.rb +1 -1
  68. data/lib/hexapdf/filter/run_length_decode.rb +1 -1
  69. data/lib/hexapdf/filter.rb +1 -1
  70. data/lib/hexapdf/font/cmap/parser.rb +1 -1
  71. data/lib/hexapdf/font/cmap/writer.rb +1 -1
  72. data/lib/hexapdf/font/cmap.rb +1 -1
  73. data/lib/hexapdf/font/encoding/base.rb +1 -1
  74. data/lib/hexapdf/font/encoding/difference_encoding.rb +1 -1
  75. data/lib/hexapdf/font/encoding/glyph_list.rb +2 -2
  76. data/lib/hexapdf/font/encoding/mac_expert_encoding.rb +1 -1
  77. data/lib/hexapdf/font/encoding/mac_roman_encoding.rb +1 -1
  78. data/lib/hexapdf/font/encoding/standard_encoding.rb +1 -1
  79. data/lib/hexapdf/font/encoding/symbol_encoding.rb +1 -1
  80. data/lib/hexapdf/font/encoding/win_ansi_encoding.rb +1 -1
  81. data/lib/hexapdf/font/encoding/zapf_dingbats_encoding.rb +1 -1
  82. data/lib/hexapdf/font/encoding.rb +1 -1
  83. data/lib/hexapdf/font/invalid_glyph.rb +1 -1
  84. data/lib/hexapdf/font/true_type/builder.rb +1 -1
  85. data/lib/hexapdf/font/true_type/font.rb +1 -1
  86. data/lib/hexapdf/font/true_type/optimizer.rb +1 -1
  87. data/lib/hexapdf/font/true_type/subsetter.rb +1 -1
  88. data/lib/hexapdf/font/true_type/table/cmap.rb +1 -1
  89. data/lib/hexapdf/font/true_type/table/cmap_subtable.rb +1 -1
  90. data/lib/hexapdf/font/true_type/table/directory.rb +1 -1
  91. data/lib/hexapdf/font/true_type/table/glyf.rb +1 -1
  92. data/lib/hexapdf/font/true_type/table/head.rb +1 -1
  93. data/lib/hexapdf/font/true_type/table/hhea.rb +1 -1
  94. data/lib/hexapdf/font/true_type/table/hmtx.rb +1 -1
  95. data/lib/hexapdf/font/true_type/table/kern.rb +1 -1
  96. data/lib/hexapdf/font/true_type/table/loca.rb +1 -1
  97. data/lib/hexapdf/font/true_type/table/maxp.rb +1 -1
  98. data/lib/hexapdf/font/true_type/table/name.rb +1 -1
  99. data/lib/hexapdf/font/true_type/table/os2.rb +1 -1
  100. data/lib/hexapdf/font/true_type/table/post.rb +1 -1
  101. data/lib/hexapdf/font/true_type/table.rb +1 -1
  102. data/lib/hexapdf/font/true_type.rb +1 -1
  103. data/lib/hexapdf/font/true_type_wrapper.rb +1 -1
  104. data/lib/hexapdf/font/type1/afm_parser.rb +1 -1
  105. data/lib/hexapdf/font/type1/character_metrics.rb +1 -1
  106. data/lib/hexapdf/font/type1/font.rb +1 -1
  107. data/lib/hexapdf/font/type1/font_metrics.rb +1 -1
  108. data/lib/hexapdf/font/type1/pfb_parser.rb +1 -1
  109. data/lib/hexapdf/font/type1.rb +1 -1
  110. data/lib/hexapdf/font/type1_wrapper.rb +1 -1
  111. data/lib/hexapdf/font_loader/from_configuration.rb +1 -1
  112. data/lib/hexapdf/font_loader/from_file.rb +1 -1
  113. data/lib/hexapdf/font_loader/standard14.rb +1 -1
  114. data/lib/hexapdf/font_loader.rb +1 -1
  115. data/lib/hexapdf/image_loader/jpeg.rb +1 -1
  116. data/lib/hexapdf/image_loader/pdf.rb +1 -1
  117. data/lib/hexapdf/image_loader/png.rb +1 -1
  118. data/lib/hexapdf/image_loader.rb +1 -1
  119. data/lib/hexapdf/importer.rb +1 -1
  120. data/lib/hexapdf/layout/box.rb +121 -22
  121. data/lib/hexapdf/layout/box_fitter.rb +136 -0
  122. data/lib/hexapdf/layout/column_box.rb +247 -0
  123. data/lib/hexapdf/layout/frame.rb +155 -139
  124. data/lib/hexapdf/layout/image_box.rb +19 -4
  125. data/lib/hexapdf/layout/inline_box.rb +1 -1
  126. data/lib/hexapdf/layout/line.rb +1 -1
  127. data/lib/hexapdf/layout/list_box.rb +355 -0
  128. data/lib/hexapdf/layout/numeric_refinements.rb +1 -1
  129. data/lib/hexapdf/layout/style.rb +5 -1
  130. data/lib/hexapdf/layout/text_box.rb +20 -9
  131. data/lib/hexapdf/layout/text_fragment.rb +3 -2
  132. data/lib/hexapdf/layout/text_layouter.rb +17 -2
  133. data/lib/hexapdf/layout/text_shaper.rb +1 -1
  134. data/lib/hexapdf/layout/width_from_polygon.rb +12 -7
  135. data/lib/hexapdf/layout.rb +4 -1
  136. data/lib/hexapdf/name_tree_node.rb +1 -1
  137. data/lib/hexapdf/number_tree_node.rb +1 -1
  138. data/lib/hexapdf/object.rb +1 -1
  139. data/lib/hexapdf/parser.rb +1 -8
  140. data/lib/hexapdf/pdf_array.rb +1 -1
  141. data/lib/hexapdf/rectangle.rb +1 -1
  142. data/lib/hexapdf/reference.rb +1 -1
  143. data/lib/hexapdf/revision.rb +1 -1
  144. data/lib/hexapdf/revisions.rb +1 -1
  145. data/lib/hexapdf/serializer.rb +1 -1
  146. data/lib/hexapdf/stream.rb +1 -1
  147. data/lib/hexapdf/task/dereference.rb +1 -1
  148. data/lib/hexapdf/task/optimize.rb +1 -1
  149. data/lib/hexapdf/task.rb +1 -1
  150. data/lib/hexapdf/tokenizer.rb +1 -1
  151. data/lib/hexapdf/type/acro_form/appearance_generator.rb +1 -1
  152. data/lib/hexapdf/type/acro_form/button_field.rb +1 -1
  153. data/lib/hexapdf/type/acro_form/choice_field.rb +1 -1
  154. data/lib/hexapdf/type/acro_form/field.rb +1 -1
  155. data/lib/hexapdf/type/acro_form/form.rb +1 -1
  156. data/lib/hexapdf/type/acro_form/signature_field.rb +1 -1
  157. data/lib/hexapdf/type/acro_form/text_field.rb +1 -1
  158. data/lib/hexapdf/type/acro_form/variable_text_field.rb +1 -1
  159. data/lib/hexapdf/type/acro_form.rb +1 -1
  160. data/lib/hexapdf/type/action.rb +1 -1
  161. data/lib/hexapdf/type/actions/go_to.rb +1 -1
  162. data/lib/hexapdf/type/actions/go_to_r.rb +1 -1
  163. data/lib/hexapdf/type/actions/launch.rb +1 -1
  164. data/lib/hexapdf/type/actions/uri.rb +1 -1
  165. data/lib/hexapdf/type/actions.rb +1 -1
  166. data/lib/hexapdf/type/annotation.rb +1 -1
  167. data/lib/hexapdf/type/annotations/link.rb +1 -1
  168. data/lib/hexapdf/type/annotations/markup_annotation.rb +1 -1
  169. data/lib/hexapdf/type/annotations/text.rb +1 -1
  170. data/lib/hexapdf/type/annotations/widget.rb +1 -1
  171. data/lib/hexapdf/type/annotations.rb +1 -1
  172. data/lib/hexapdf/type/catalog.rb +1 -1
  173. data/lib/hexapdf/type/cid_font.rb +1 -1
  174. data/lib/hexapdf/type/embedded_file.rb +1 -1
  175. data/lib/hexapdf/type/file_specification.rb +1 -1
  176. data/lib/hexapdf/type/font.rb +1 -1
  177. data/lib/hexapdf/type/font_descriptor.rb +1 -1
  178. data/lib/hexapdf/type/font_simple.rb +1 -1
  179. data/lib/hexapdf/type/font_true_type.rb +1 -1
  180. data/lib/hexapdf/type/font_type0.rb +1 -1
  181. data/lib/hexapdf/type/font_type1.rb +1 -1
  182. data/lib/hexapdf/type/font_type3.rb +1 -1
  183. data/lib/hexapdf/type/form.rb +1 -1
  184. data/lib/hexapdf/type/graphics_state_parameter.rb +1 -1
  185. data/lib/hexapdf/type/icon_fit.rb +1 -1
  186. data/lib/hexapdf/type/image.rb +1 -1
  187. data/lib/hexapdf/type/info.rb +1 -1
  188. data/lib/hexapdf/type/names.rb +1 -1
  189. data/lib/hexapdf/type/object_stream.rb +1 -1
  190. data/lib/hexapdf/type/page.rb +1 -1
  191. data/lib/hexapdf/type/page_tree_node.rb +19 -2
  192. data/lib/hexapdf/type/resources.rb +1 -1
  193. data/lib/hexapdf/type/signature/adbe_pkcs7_detached.rb +1 -1
  194. data/lib/hexapdf/type/signature/adbe_x509_rsa_sha1.rb +1 -1
  195. data/lib/hexapdf/type/signature/handler.rb +1 -1
  196. data/lib/hexapdf/type/signature/verification_result.rb +1 -1
  197. data/lib/hexapdf/type/signature.rb +1 -1
  198. data/lib/hexapdf/type/trailer.rb +2 -2
  199. data/lib/hexapdf/type/viewer_preferences.rb +1 -1
  200. data/lib/hexapdf/type/xref_stream.rb +1 -1
  201. data/lib/hexapdf/type.rb +1 -1
  202. data/lib/hexapdf/utils/bit_field.rb +1 -1
  203. data/lib/hexapdf/utils/bit_stream.rb +1 -1
  204. data/lib/hexapdf/utils/graphics_helpers.rb +1 -1
  205. data/lib/hexapdf/utils/lru_cache.rb +1 -1
  206. data/lib/hexapdf/utils/math_helpers.rb +1 -1
  207. data/lib/hexapdf/utils/object_hash.rb +1 -1
  208. data/lib/hexapdf/utils/pdf_doc_encoding.rb +1 -1
  209. data/lib/hexapdf/utils/sorted_tree_node.rb +1 -1
  210. data/lib/hexapdf/version.rb +2 -2
  211. data/lib/hexapdf/writer.rb +9 -7
  212. data/lib/hexapdf/xref_section.rb +1 -1
  213. data/lib/hexapdf.rb +1 -1
  214. data/test/hexapdf/content/graphic_object/test_geom2d.rb +1 -1
  215. data/test/hexapdf/document/test_destinations.rb +1 -1
  216. data/test/hexapdf/document/test_images.rb +1 -1
  217. data/test/hexapdf/document/test_layout.rb +264 -0
  218. data/test/hexapdf/document/test_pages.rb +9 -0
  219. data/test/hexapdf/document/test_signatures.rb +10 -3
  220. data/test/hexapdf/encryption/test_security_handler.rb +1 -1
  221. data/test/hexapdf/font/encoding/test_glyph_list.rb +4 -0
  222. data/test/hexapdf/layout/test_box.rb +53 -3
  223. data/test/hexapdf/layout/test_box_fitter.rb +62 -0
  224. data/test/hexapdf/layout/test_column_box.rb +159 -0
  225. data/test/hexapdf/layout/test_frame.rb +99 -38
  226. data/test/hexapdf/layout/test_image_box.rb +1 -1
  227. data/test/hexapdf/layout/test_list_box.rb +249 -0
  228. data/test/hexapdf/layout/test_text_box.rb +17 -2
  229. data/test/hexapdf/layout/test_text_fragment.rb +1 -1
  230. data/test/hexapdf/layout/test_text_layouter.rb +42 -17
  231. data/test/hexapdf/layout/test_width_from_polygon.rb +13 -0
  232. data/test/hexapdf/test_composer.rb +11 -0
  233. data/test/hexapdf/test_dictionary_fields.rb +9 -9
  234. data/test/hexapdf/test_document.rb +4 -4
  235. data/test/hexapdf/test_filter.rb +1 -1
  236. data/test/hexapdf/test_parser.rb +0 -2
  237. data/test/hexapdf/test_revisions.rb +2 -2
  238. data/test/hexapdf/test_serializer.rb +1 -5
  239. data/test/hexapdf/test_writer.rb +58 -3
  240. data/test/hexapdf/type/test_page_tree_node.rb +21 -1
  241. data/test/hexapdf/type/test_trailer.rb +3 -3
  242. data/test/test_helper.rb +5 -1
  243. metadata +28 -3
@@ -40,7 +40,7 @@ describe HexaPDF::Writer do
40
40
  219
41
41
  %%EOF
42
42
  3 0 obj
43
- <</Producer(HexaPDF version 0.23.0)>>
43
+ <</Producer(HexaPDF version 0.24.0)>>
44
44
  endobj
45
45
  xref
46
46
  3 1
@@ -72,7 +72,7 @@ describe HexaPDF::Writer do
72
72
  141
73
73
  %%EOF
74
74
  6 0 obj
75
- <</Producer(HexaPDF version 0.23.0)>>
75
+ <</Producer(HexaPDF version 0.24.0)>>
76
76
  endobj
77
77
  2 0 obj
78
78
  <</Length 10>>stream
@@ -94,8 +94,9 @@ describe HexaPDF::Writer do
94
94
  document = HexaPDF::Document.new(io: input_io)
95
95
  document.trailer.info[:Producer] = "unknown"
96
96
  output_io = StringIO.new(''.force_encoding(Encoding::BINARY))
97
- xref_section = HexaPDF::Writer.write(document, output_io)
97
+ start_xref_offset, xref_section = HexaPDF::Writer.write(document, output_io)
98
98
  assert_kind_of(HexaPDF::XRefSection, xref_section)
99
+ assert_kind_of(Integer, start_xref_offset)
99
100
  assert_equal(input_io.string, output_io.string)
100
101
  end
101
102
 
@@ -190,6 +191,60 @@ describe HexaPDF::Writer do
190
191
  assert(document.revisions.all[2].one? {|obj| obj.type == :XRef })
191
192
  end
192
193
 
194
+ it "doesn't create an xref stream if one was just used for an XRefStm entry" do
195
+ # The following document's structure is built like a typical MS Word created PDF
196
+ input = StringIO.new(<<~EOF.force_encoding(Encoding::BINARY))
197
+ %PDF-1.2
198
+ %\xCF\xEC\xFF\xE8\xD7\xCB\xCD
199
+ 1 0 obj
200
+ <</Type/Catalog/Pages 2 0 R>>
201
+ endobj
202
+ 2 0 obj
203
+ <</Type/Pages/Kids[3 0 R]/Count 1>>
204
+ endobj
205
+ 3 0 obj
206
+ <</Type/Page/MediaBox[0 0 595 842]/Parent 2 0 R/Resources<<>>>>
207
+ endobj
208
+ 5 0 obj
209
+ <</Producer(HexaPDF version 0.24.0)>>
210
+ endobj
211
+ 4 0 obj
212
+ <</Root 1 0 R/Info 5 0 R/Size 6/Type/XRef/W[1 1 2]/Index[0 6]/Filter/FlateDecode/DecodeParms<</Columns 4/Predictor 12>>/Length 33>>stream
213
+ x\xDAcb`\xF8\xFF\x9F\x89Q\x88\x91\x91\x89A\x97\x81\x81\x89\xC1\x18D\xB4\x80\x88\xD3\f\f\x00C\xDE\x03\xCF
214
+ endstream
215
+ endobj
216
+ xref
217
+ 0 6
218
+ 0000000000 65535 f
219
+ 0000000018 00000 n
220
+ 0000000063 00000 n
221
+ 0000000114 00000 n
222
+ 0000000246 00000 n
223
+ 0000000193 00000 n
224
+ trailer
225
+ <</Root 1 0 R/Info 5 0 R/Size 6>>
226
+ startxref
227
+ 443
228
+ %%EOF
229
+
230
+ xref
231
+ 0 0
232
+ trailer
233
+ <</Root 1 0 R/Info 5 0 R/Prev 443/XRefStm 246>>
234
+ startxref
235
+ 629
236
+ %%EOF
237
+ EOF
238
+
239
+ document = HexaPDF::Document.new(io: input)
240
+ document.pages.add
241
+ io = StringIO.new
242
+ HexaPDF::Writer.new(document, io).write_incremental
243
+
244
+ document = HexaPDF::Document.new(io: io)
245
+ refute(document.trailer.key?(:Type))
246
+ end
247
+
193
248
  it "raises an error if the class is misused and an xref section contains invalid entries" do
194
249
  document = HexaPDF::Document.new
195
250
  io = StringIO.new
@@ -217,9 +217,19 @@ describe HexaPDF::Type::PageTreeNode do
217
217
  assert(@root.validate)
218
218
  end
219
219
 
220
+ it "works if the location stays the same" do
221
+ @root.move_page(3, 3)
222
+ assert_equal(@pages, @root.each_page.to_a)
223
+ assert(@root.validate)
224
+
225
+ @root.move_page(-2, -2)
226
+ assert_equal(@pages, @root.each_page.to_a)
227
+ assert(@root.validate)
228
+ end
229
+
220
230
  it "moves the page to the correct location with a positive index" do
221
231
  @root.move_page(1, 3)
222
- assert_equal([@pages[0], @pages[2], @pages[1], *@pages[3..-1]], @root.each_page.to_a)
232
+ assert_equal([@pages[0], @pages[2], @pages[3], @pages[1], *@pages[4..-1]], @root.each_page.to_a)
223
233
  assert(@root.validate)
224
234
  end
225
235
 
@@ -229,6 +239,16 @@ describe HexaPDF::Type::PageTreeNode do
229
239
  assert(@root.validate)
230
240
  end
231
241
 
242
+ it "moves the page to the correct location within the same parent node" do
243
+ @root.move_page(2, 4)
244
+ assert_equal([@pages[0], @pages[1], @pages[3], @pages[4], @pages[2], *@pages[5..-1]], @root.each_page.to_a)
245
+ assert(@root.validate)
246
+
247
+ @root.move_page(4, 3)
248
+ assert_equal([@pages[0], @pages[1], @pages[3], @pages[2], @pages[4], *@pages[5..-1]], @root.each_page.to_a)
249
+ assert(@root.validate)
250
+ end
251
+
232
252
  it "fails if the index to the moving page is invalid" do
233
253
  assert_raises(HexaPDF::Error) { @root.move_page(10, 0) }
234
254
  end
@@ -25,7 +25,7 @@ describe HexaPDF::Type::Trailer do
25
25
 
26
26
  it "returns the catalog object, creating it if needed" do
27
27
  doc = Minitest::Mock.new
28
- doc.expect(:add, :val, [{Type: :Catalog}])
28
+ doc.expect(:add, :val, [{Type: :Catalog}], type: :Catalog)
29
29
  trailer = HexaPDF::Type::Trailer.new({}, document: doc)
30
30
  assert_equal(:val, trailer.catalog)
31
31
  doc.verify
@@ -34,7 +34,7 @@ describe HexaPDF::Type::Trailer do
34
34
 
35
35
  it "returns the info object, creating it if needed" do
36
36
  doc = Minitest::Mock.new
37
- doc.expect(:add, :val, [{}, type: :XXInfo])
37
+ doc.expect(:add, :val, [{}], type: :XXInfo)
38
38
  trailer = HexaPDF::Type::Trailer.new({}, document: doc)
39
39
  assert_equal(:val, trailer.info)
40
40
  doc.verify
@@ -89,7 +89,7 @@ describe HexaPDF::Type::Trailer do
89
89
  it "corrects a missing Catalog entry" do
90
90
  @obj.delete(:Root)
91
91
  @obj.set_random_id
92
- def (@doc).add(val) HexaPDF::Object.new(val, oid: 3) end
92
+ def (@doc).add(val, type:); type.to_s; HexaPDF::Object.new(val, oid: 3) end
93
93
 
94
94
  message = ''
95
95
  refute(@obj.validate(auto_correct: false) {|m, _| message = m })
data/test/test_helper.rb CHANGED
@@ -3,7 +3,9 @@
3
3
  begin
4
4
  require 'simplecov'
5
5
  SimpleCov.start do
6
+ minimum_coverage line: 100
6
7
  add_filter '/test/'
8
+ add_filter '/fast_arc4.rb'
7
9
  end
8
10
  rescue LoadError
9
11
  end
@@ -14,10 +16,12 @@ require 'fiber'
14
16
  require 'zlib'
15
17
 
16
18
  TEST_DATA_DIR = File.join(__dir__, 'data')
17
- MINIMAL_PDF = File.read(File.join(TEST_DATA_DIR, 'minimal.pdf')).freeze
19
+ MINIMAL_PDF = File.binread(File.join(TEST_DATA_DIR, 'minimal.pdf')).freeze
18
20
 
19
21
  Minitest::Test.make_my_diffs_pretty!
20
22
 
23
+ ENV['TZ'] = 'UTC'
24
+
21
25
  module TestHelper
22
26
 
23
27
  # Asserts that the method +name+ of +object+ gets invoked with the +expected_values+ when
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hexapdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.0
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Leitner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-26 00:00:00.000000000 Z
11
+ date: 2022-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cmdparse
@@ -58,6 +58,20 @@ dependencies:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '2.3'
61
+ - !ruby/object:Gem::Dependency
62
+ name: minitest
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '5.16'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '5.16'
61
75
  - !ruby/object:Gem::Dependency
62
76
  name: reline
63
77
  requirement: !ruby/object:Gem::Requirement
@@ -217,6 +231,8 @@ files:
217
231
  - examples/017-frame_text_flow.rb
218
232
  - examples/018-composer.rb
219
233
  - examples/019-acro_form.rb
234
+ - examples/020-column_box.rb
235
+ - examples/021-list_box.rb
220
236
  - examples/emoji-smile.png
221
237
  - examples/emoji-wink.png
222
238
  - examples/machupicchu.jpg
@@ -259,6 +275,7 @@ files:
259
275
  - lib/hexapdf/document/files.rb
260
276
  - lib/hexapdf/document/fonts.rb
261
277
  - lib/hexapdf/document/images.rb
278
+ - lib/hexapdf/document/layout.rb
262
279
  - lib/hexapdf/document/pages.rb
263
280
  - lib/hexapdf/document/signatures.rb
264
281
  - lib/hexapdf/encryption.rb
@@ -334,10 +351,13 @@ files:
334
351
  - lib/hexapdf/importer.rb
335
352
  - lib/hexapdf/layout.rb
336
353
  - lib/hexapdf/layout/box.rb
354
+ - lib/hexapdf/layout/box_fitter.rb
355
+ - lib/hexapdf/layout/column_box.rb
337
356
  - lib/hexapdf/layout/frame.rb
338
357
  - lib/hexapdf/layout/image_box.rb
339
358
  - lib/hexapdf/layout/inline_box.rb
340
359
  - lib/hexapdf/layout/line.rb
360
+ - lib/hexapdf/layout/list_box.rb
341
361
  - lib/hexapdf/layout/numeric_refinements.rb
342
362
  - lib/hexapdf/layout/style.rb
343
363
  - lib/hexapdf/layout/text_box.rb
@@ -509,6 +529,7 @@ files:
509
529
  - test/hexapdf/document/test_files.rb
510
530
  - test/hexapdf/document/test_fonts.rb
511
531
  - test/hexapdf/document/test_images.rb
532
+ - test/hexapdf/document/test_layout.rb
512
533
  - test/hexapdf/document/test_pages.rb
513
534
  - test/hexapdf/document/test_signatures.rb
514
535
  - test/hexapdf/encryption/common.rb
@@ -573,10 +594,13 @@ files:
573
594
  - test/hexapdf/image_loader/test_pdf.rb
574
595
  - test/hexapdf/image_loader/test_png.rb
575
596
  - test/hexapdf/layout/test_box.rb
597
+ - test/hexapdf/layout/test_box_fitter.rb
598
+ - test/hexapdf/layout/test_column_box.rb
576
599
  - test/hexapdf/layout/test_frame.rb
577
600
  - test/hexapdf/layout/test_image_box.rb
578
601
  - test/hexapdf/layout/test_inline_box.rb
579
602
  - test/hexapdf/layout/test_line.rb
603
+ - test/hexapdf/layout/test_list_box.rb
580
604
  - test/hexapdf/layout/test_style.rb
581
605
  - test/hexapdf/layout/test_text_box.rb
582
606
  - test/hexapdf/layout/test_text_fragment.rb
@@ -674,7 +698,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
674
698
  - !ruby/object:Gem::Version
675
699
  version: '0'
676
700
  requirements: []
677
- rubygems_version: 3.2.32
701
+ rubyforge_project:
702
+ rubygems_version: 2.7.6.2
678
703
  signing_key:
679
704
  specification_version: 4
680
705
  summary: HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby