pdf_oxide 0.3.77 → 0.3.78
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.
- checksums.yaml +4 -4
- data/Gemfile +5 -5
- data/lib/pdf_oxide/ffi/bindings.rb +27 -0
- data/lib/pdf_oxide/pdf_document.rb +39 -20
- data/lib/pdf_oxide/version.rb +1 -1
- metadata +14 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 768090956e21394fb25c44004bdc5209a86d88f554ec44f55513a27f174bdac5
|
|
4
|
+
data.tar.gz: 758285b03559fb9f2592bfbac06072f3084ceb63f3fb211574e034b4c2f2c163
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7e622db16ff5e275624a4e4cbc2866a6ecd1c18726ad0a6dcec5fba95ae3939cdceb34df995f1db1a32814035654516c9426077a142f439d0e8e4ce17760c969
|
|
7
|
+
data.tar.gz: bbc46aa91b57a375a0557d10fc103bb0abaca13c306bf881d54e63b60448eaca868635e1c3795676afc0ac0e0558d06ef3954a2e39e3c3e5fdc5ed9d9ffc68cf
|
data/Gemfile
CHANGED
|
@@ -6,11 +6,11 @@ gemspec
|
|
|
6
6
|
|
|
7
7
|
group :development do
|
|
8
8
|
gem 'bundler', '>= 2.0'
|
|
9
|
-
gem 'rake', '~> 13.
|
|
10
|
-
gem 'rspec', '~> 3.
|
|
11
|
-
gem 'rubocop', '~> 1.
|
|
12
|
-
gem 'rubocop-rspec', '~> 3.
|
|
9
|
+
gem 'rake', '~> 13.4'
|
|
10
|
+
gem 'rspec', '~> 3.13'
|
|
11
|
+
gem 'rubocop', '~> 1.90'
|
|
12
|
+
gem 'rubocop-rspec', '~> 3.10'
|
|
13
13
|
gem 'yard', '~> 0.9'
|
|
14
14
|
gem 'simplecov', '~> 0.22'
|
|
15
|
-
gem 'simplecov-lcov', '~> 0.
|
|
15
|
+
gem 'simplecov-lcov', '~> 0.9'
|
|
16
16
|
end
|
|
@@ -1429,6 +1429,15 @@ module PdfOxide
|
|
|
1429
1429
|
attach_function :pdf_oxide_crypto_set_policy, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
|
|
1430
1430
|
attach_function :pdf_oxide_crypto_use_fips, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
|
|
1431
1431
|
attach_function :pdf_oxide_element_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
|
|
1432
|
+
# void pdf_oxide_element_get_page_rect(const FfiElementList *elements, int32_t index,
|
|
1433
|
+
# float *x, float *y, float *width, float *height,
|
|
1434
|
+
# int32_t *error_code)
|
|
1435
|
+
# Page-space extents of the span: the rect from pdf_oxide_element_get_rect with any
|
|
1436
|
+
# text-matrix rotation resolved into an axis-aligned page-space hull;
|
|
1437
|
+
# identical to pdf_oxide_element_get_rect for upright runs.
|
|
1438
|
+
attach_function :pdf_oxide_element_get_page_rect,
|
|
1439
|
+
%i[pointer int32 pointer pointer pointer pointer pointer], :void,
|
|
1440
|
+
blocking: false
|
|
1432
1441
|
attach_function :pdf_oxide_element_get_rect, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
|
|
1433
1442
|
attach_function :pdf_oxide_element_get_text, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
|
|
1434
1443
|
attach_function :pdf_oxide_element_get_type, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
|
|
@@ -1645,6 +1654,13 @@ module PdfOxide
|
|
|
1645
1654
|
attach_function :pdf_document_extract_text_auto, %i[pointer int32 pointer], :pointer
|
|
1646
1655
|
attach_function :pdf_document_extract_page_auto, %i[pointer int32 string pointer], :pointer
|
|
1647
1656
|
|
|
1657
|
+
# Structured diagnostics — malloc'd JSON array of warning objects
|
|
1658
|
+
# ("[]" when there are none); free with free_string. `category` is
|
|
1659
|
+
# an open-ended snake_case token: keep it a string and tolerate
|
|
1660
|
+
# tokens this binding has never seen. The `take_` variant drains.
|
|
1661
|
+
attach_function :pdf_document_structured_warnings, %i[pointer pointer], :pointer
|
|
1662
|
+
attach_function :pdf_document_take_structured_warnings, %i[pointer pointer], :pointer
|
|
1663
|
+
|
|
1648
1664
|
# Models subsystem (#519 provisioning trio).
|
|
1649
1665
|
attach_function :pdf_oxide_prefetch_models, %i[string pointer], :pointer
|
|
1650
1666
|
attach_function :pdf_oxide_model_manifest, [], :pointer
|
|
@@ -1742,6 +1758,17 @@ module PdfOxide
|
|
|
1742
1758
|
pointer size_t
|
|
1743
1759
|
pointer],
|
|
1744
1760
|
:pointer
|
|
1761
|
+
|
|
1762
|
+
# uint8_t *pdf_get_rendered_image_data(
|
|
1763
|
+
# const FfiRenderedImage *img, int32_t *data_len, int32_t *error_code)
|
|
1764
|
+
# Returns the encoded image bytes (PNG or JPEG per the format the
|
|
1765
|
+
# image was rendered with). Caller-owned; free with free_bytes.
|
|
1766
|
+
# Overrides the auto-generated 8-pointer placeholder declared
|
|
1767
|
+
# earlier in this file — that placeholder signature does not match
|
|
1768
|
+
# the real 3-argument ABI and cannot be called as-is.
|
|
1769
|
+
attach_function :pdf_get_rendered_image_data,
|
|
1770
|
+
%i[pointer pointer pointer],
|
|
1771
|
+
:pointer
|
|
1745
1772
|
end
|
|
1746
1773
|
end
|
|
1747
1774
|
end
|
|
@@ -170,6 +170,32 @@ module PdfOxide
|
|
|
170
170
|
StringMarshaller.from_c_string(ptr) || ''
|
|
171
171
|
end
|
|
172
172
|
|
|
173
|
+
# This document's structured diagnostics, as a raw JSON array string
|
|
174
|
+
# (`"[]"` when there are none). Non-destructive: a later call returns
|
|
175
|
+
# the same entries plus any raised since.
|
|
176
|
+
#
|
|
177
|
+
# Left unparsed on purpose: each entry's `category` is an open-ended
|
|
178
|
+
# snake_case token and new ones ship in minor releases, so callers
|
|
179
|
+
# must tolerate tokens they do not know.
|
|
180
|
+
# @return [String] JSON array.
|
|
181
|
+
def structured_warnings
|
|
182
|
+
err = ::FFI::MemoryPointer.new(:int32)
|
|
183
|
+
ptr = Bindings.pdf_document_structured_warnings(handle, err)
|
|
184
|
+
raise_for_code(err.read_int32, 'structured_warnings')
|
|
185
|
+
StringMarshaller.from_c_string(ptr) || ''
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# As {#structured_warnings}, but drains: the returned entries are
|
|
189
|
+
# removed, so a batch pipeline can read per document without the sink
|
|
190
|
+
# growing across the run.
|
|
191
|
+
# @return [String] JSON array.
|
|
192
|
+
def take_structured_warnings
|
|
193
|
+
err = ::FFI::MemoryPointer.new(:int32)
|
|
194
|
+
ptr = Bindings.pdf_document_take_structured_warnings(handle, err)
|
|
195
|
+
raise_for_code(err.read_int32, 'take_structured_warnings')
|
|
196
|
+
StringMarshaller.from_c_string(ptr) || ''
|
|
197
|
+
end
|
|
198
|
+
|
|
173
199
|
# Convert one page to Markdown.
|
|
174
200
|
# @param page_index [Integer]
|
|
175
201
|
# @return [String] Markdown.
|
|
@@ -438,26 +464,19 @@ module PdfOxide
|
|
|
438
464
|
end
|
|
439
465
|
|
|
440
466
|
def read_rendered_image_bytes(img_ptr)
|
|
441
|
-
# The cdylib
|
|
442
|
-
#
|
|
443
|
-
#
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
bytes
|
|
455
|
-
else
|
|
456
|
-
# Fall back to an empty BINARY string; render() callers see a
|
|
457
|
-
# clean error path rather than a segfault when the build is
|
|
458
|
-
# missing the rendered-image accessor.
|
|
459
|
-
''
|
|
460
|
-
end
|
|
467
|
+
# The cdylib exposes the rendered-image byte buffer through
|
|
468
|
+
# pdf_get_rendered_image_data (data_len is *mut i32, not size_t);
|
|
469
|
+
# the caller owns the returned buffer and must free it via
|
|
470
|
+
# free_bytes.
|
|
471
|
+
len_ptr = ::FFI::MemoryPointer.new(:int32)
|
|
472
|
+
err = ::FFI::MemoryPointer.new(:int32)
|
|
473
|
+
buf = Bindings.pdf_get_rendered_image_data(img_ptr, len_ptr, err)
|
|
474
|
+
raise_for_code(err.read_int32, 'render_bytes')
|
|
475
|
+
return '' if buf.nil? || buf.null?
|
|
476
|
+
|
|
477
|
+
bytes = buf.read_string(len_ptr.read_int32)
|
|
478
|
+
Bindings.free_bytes(buf)
|
|
479
|
+
bytes
|
|
461
480
|
end
|
|
462
481
|
|
|
463
482
|
# Map a cdylib error code (`int32_t *err`) to the matching Ruby
|
data/lib/pdf_oxide/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pdf_oxide
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.78
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- PDF Oxide Contributors
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-09-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: ffi
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '1.
|
|
19
|
+
version: '1.17'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '1.
|
|
26
|
+
version: '1.17'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: bundler
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -44,70 +44,70 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '13.
|
|
47
|
+
version: '13.4'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '13.
|
|
54
|
+
version: '13.4'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: rspec
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '3.
|
|
61
|
+
version: '3.13'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '3.
|
|
68
|
+
version: '3.13'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: rubocop
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '1.
|
|
75
|
+
version: '1.90'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '1.
|
|
82
|
+
version: '1.90'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: rubocop-rspec
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
87
|
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '3.
|
|
89
|
+
version: '3.10'
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
94
|
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '3.
|
|
96
|
+
version: '3.10'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: simplecov-lcov
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
101
|
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '0.
|
|
103
|
+
version: '0.9'
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - "~>"
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '0.
|
|
110
|
+
version: '0.9'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: yard
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|