pdf_oxide 0.3.55-x86_64-linux

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.
@@ -0,0 +1,1694 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ffi'
4
+ require_relative 'library'
5
+
6
+ module PdfOxide
7
+ module FFI
8
+ # All FFI function bindings for PDF Oxide library
9
+ # Total: 315+ functions covering all PDF operations
10
+ module Bindings
11
+ extend ::FFI::Library
12
+
13
+ # Load native library
14
+ begin
15
+ ffi_lib(Library.library_path)
16
+ rescue LoadError => e
17
+ raise ::PdfOxide::InternalError, "Failed to load PDF Oxide native library: #{e.message}. " \
18
+ 'Make sure libpdf_oxide is installed.'
19
+ end
20
+
21
+ # ============================================================
22
+ # ERROR HANDLING & MEMORY MANAGEMENT
23
+ # ============================================================
24
+
25
+ # ============================================================
26
+ # UTILITY FUNCTIONS (16 total)
27
+ # ============================================================
28
+
29
+ # REMOVED phantom (no upstream symbol): :alloc_string (1 line)
30
+ attach_function :free_string, [:pointer], :void
31
+ attach_function :free_bytes, [:pointer], :void
32
+
33
+ # Document Editor Operations (13)
34
+ attach_function :document_editor_open, %i[string pointer], :pointer
35
+ attach_function :document_editor_free, [:pointer], :void
36
+ attach_function :document_editor_save, %i[pointer string pointer], :bool
37
+ attach_function :document_editor_get_page_count, %i[pointer pointer], :int32
38
+ # char *document_editor_get_source_path(const DocumentEditor *handle, int32_t *error_code)
39
+ # Owned-char* — bind as :pointer so the caller can free via StringMarshaller.
40
+ attach_function :document_editor_get_source_path, %i[pointer pointer], :pointer
41
+ # REMOVED phantom (no upstream symbol): :document_editor_get_title
42
+ # REMOVED phantom (no upstream symbol): :document_editor_get_author
43
+ # REMOVED phantom (no upstream symbol): :document_editor_get_subject
44
+ # void document_editor_get_version(const DocumentEditor *handle,
45
+ # uint8_t *major, uint8_t *minor)
46
+ attach_function :document_editor_get_version, %i[pointer pointer pointer], :void
47
+ attach_function :document_editor_set_title, %i[pointer string pointer], :bool
48
+ attach_function :document_editor_set_author, %i[pointer string pointer], :bool
49
+ attach_function :document_editor_set_subject, %i[pointer string pointer], :bool
50
+ attach_function :document_editor_is_modified, [:pointer], :bool
51
+
52
+ # ============================================================
53
+ # DOCUMENT OPERATIONS
54
+ # ============================================================
55
+
56
+ # Core document operations
57
+ attach_function :pdf_document_open, %i[string pointer], :pointer
58
+ attach_function :pdf_document_free, [:pointer], :void
59
+ attach_function :pdf_document_get_page_count, %i[pointer pointer], :int32
60
+ # bool pdf_document_is_encrypted(const PdfDocument *handle) — no err arg
61
+ attach_function :pdf_document_is_encrypted, [:pointer], :bool
62
+ # REMOVED phantom (no upstream symbol): :pdf_document_requires_password (1 line)
63
+
64
+ # Document metadata
65
+ # void pdf_document_get_version(const PdfDocument *handle,
66
+ # uint8_t *major, uint8_t *minor)
67
+ attach_function :pdf_document_get_version, %i[pointer pointer pointer], :void
68
+ attach_function :pdf_document_has_structure_tree, [:pointer], :bool
69
+
70
+ # ============================================================
71
+ # TEXT EXTRACTION
72
+ # ============================================================
73
+
74
+ # Owned-`char *` extraction APIs. Declared as :pointer (NOT :string)
75
+ # so callers can free the buffer via StringMarshaller.from_c_string,
76
+ # which delegates to free_string. Ruby FFI's :string copies the C
77
+ # bytes but never calls free_string → leaks one full-document buffer
78
+ # per call.
79
+ attach_function :pdf_document_extract_text, %i[pointer int32 pointer], :pointer
80
+ attach_function :pdf_document_to_markdown, %i[pointer int32 pointer], :pointer
81
+ attach_function :pdf_document_to_markdown_all, %i[pointer pointer], :pointer
82
+ attach_function :pdf_document_to_html, %i[pointer int32 pointer], :pointer
83
+ attach_function :pdf_document_to_plain_text, %i[pointer int32 pointer], :pointer
84
+
85
+ # ============================================================
86
+ # SEARCH OPERATIONS (15 functions)
87
+ # ============================================================
88
+
89
+ attach_function :pdf_document_search_page, %i[pointer string int32 bool pointer], :pointer
90
+ attach_function :pdf_document_search_all, %i[pointer string bool pointer], :pointer
91
+ attach_function :pdf_oxide_search_result_count, [:pointer], :int32
92
+ # Each accessor takes the results handle + index + an int32* error
93
+ # buffer. The trailing pointer is REQUIRED — omitting it caused
94
+ # the cdylib to dereference register garbage as the err pointer
95
+ # and segfault on aarch64/macOS-arm64 (issue #547 v0.3.55 CI).
96
+ attach_function :pdf_oxide_search_result_get_page, %i[pointer int32 pointer], :int32
97
+ # Returns owned char* — bind as :pointer + StringMarshaller to
98
+ # free via free_string. Declaring as :string leaked the buffer
99
+ # AND read past the missing err arg.
100
+ attach_function :pdf_oxide_search_result_get_text, %i[pointer int32 pointer], :pointer
101
+ attach_function :pdf_oxide_search_result_get_bbox,
102
+ %i[pointer int32 pointer pointer pointer pointer pointer], :void
103
+ attach_function :pdf_oxide_search_result_free, [:pointer], :void
104
+
105
+ # ============================================================
106
+ # PAGE OPERATIONS (30 functions)
107
+ # ============================================================
108
+
109
+ # ============================================================
110
+ # RENDERING OPERATIONS (25 functions)
111
+ # ============================================================
112
+
113
+ # REMOVED phantom (no upstream symbol): :pdf_render_page_to_file (1 line)
114
+ # REMOVED phantom (no upstream symbol): :pdf_render_page_to_bytes (1 line)
115
+ # REMOVED phantom (no upstream symbol): :pdf_render_page_range (1 line)
116
+ # REMOVED phantom (no upstream symbol): :pdf_render_document (1 line)
117
+ attach_function :pdf_render_page_fit, %i[pointer int32 int32 int32 int32 pointer], :pointer
118
+ attach_function :pdf_render_page_zoom, %i[pointer int32 float int32 pointer], :pointer
119
+ attach_function :pdf_render_page_region, %i[pointer int32 float float float float int32 pointer], :pointer
120
+ # FfiRenderedImage *pdf_render_page_thumbnail(PdfDocument *doc, int32_t page_index, int32_t _size, int32_t format, int32_t *error_code)
121
+ attach_function :pdf_render_page_thumbnail, %i[pointer int32 int32 int32 pointer], :pointer
122
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_width (1 line)
123
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_height (1 line)
124
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_size (1 line)
125
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_data (1 line)
126
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_to_base64 (1 line)
127
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_save (1 line)
128
+ attach_function :pdf_rendered_image_free, [:pointer], :void
129
+
130
+ # ============================================================
131
+ # ANNOTATION OPERATIONS (20 functions)
132
+ # ============================================================
133
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_annotations (1 line)
134
+ attach_function :pdf_oxide_annotation_count, [:pointer], :int32
135
+ # char *pdf_oxide_annotation_get_type(const FfiAnnotationList *annotations, int32_t index, int32_t *error_code)
136
+ # Pre-v0.3.55 declared as 2-arg `:int32` — wrong arg count AND wrong
137
+ # return type (C returns owned char*). Both fixed here.
138
+ attach_function :pdf_oxide_annotation_get_type, %i[pointer int32 pointer], :pointer
139
+
140
+ # ============================================================
141
+ # FORM OPERATIONS (20 functions)
142
+ # ============================================================
143
+
144
+ # Form field operations
145
+ # REMOVED phantom (no upstream symbol): :pdf_form_export_to_fdf (1 line)
146
+ # REMOVED phantom (no upstream symbol): :pdf_form_export_to_xfdf (1 line)
147
+ # REMOVED phantom (no upstream symbol): :pdf_form_export_to_json (1 line)
148
+ attach_function :pdf_form_import_from_file, %i[pointer string pointer], :bool
149
+ # REMOVED phantom (no upstream symbol): :pdf_form_reset_all_fields (1 line)
150
+ # REMOVED phantom (no upstream symbol): :pdf_form_field_find_by_name (1 line)
151
+ # REMOVED phantom (no upstream symbol): :pdf_form_field_set_value_by_name_string (1 line)
152
+ # REMOVED phantom (no upstream symbol): :pdf_form_field_set_value_by_name_boolean (1 line)
153
+
154
+ # ============================================================
155
+ # FONT OPERATIONS (15 functions)
156
+ # ============================================================
157
+
158
+ attach_function :pdf_document_get_embedded_fonts, %i[pointer int32 pointer], :pointer
159
+ attach_function :pdf_oxide_font_count, [:pointer], :int32
160
+ # Font accessors all share (fonts, index, int32_t *error_code).
161
+ # Owned-char* return for `_get_name` — bind as :pointer.
162
+ attach_function :pdf_oxide_font_get_name, %i[pointer int32 pointer], :pointer
163
+ attach_function :pdf_oxide_font_get_size, %i[pointer int32 pointer], :float
164
+ attach_function :pdf_oxide_font_is_embedded, %i[pointer int32 pointer], :int32
165
+ attach_function :pdf_oxide_font_list_free, [:pointer], :void
166
+
167
+ # ============================================================
168
+ # IMAGE OPERATIONS (20 functions)
169
+ # ============================================================
170
+
171
+ attach_function :pdf_document_get_embedded_images, %i[pointer int32 pointer], :pointer
172
+ attach_function :pdf_oxide_image_count, [:pointer], :int32
173
+ # Image accessors: (images, index, int32_t *error_code) → int32.
174
+ attach_function :pdf_oxide_image_get_width, %i[pointer int32 pointer], :int32
175
+ attach_function :pdf_oxide_image_get_height, %i[pointer int32 pointer], :int32
176
+ attach_function :pdf_oxide_image_get_bits_per_component, %i[pointer int32 pointer], :int32
177
+ attach_function :pdf_oxide_image_list_free, [:pointer], :void
178
+
179
+ # ============================================================
180
+ # OUTLINE/BOOKMARK OPERATIONS (4 functions)
181
+ # ============================================================
182
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_outline_count (1 line)
183
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_outline_title (1 line)
184
+
185
+ # ============================================================
186
+ # LAYER OPERATIONS (3 functions)
187
+ # ============================================================
188
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_layer_count (1 line)
189
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_layer_name (1 line)
190
+
191
+ # ============================================================
192
+ # METADATA OPERATIONS (12 functions)
193
+ # ============================================================
194
+
195
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_title (1 line)
196
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_author (1 line)
197
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_subject (1 line)
198
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_keywords (1 line)
199
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_creator (1 line)
200
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_producer (1 line)
201
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_creation_date (1 line)
202
+
203
+ # ============================================================
204
+ # OCR OPERATIONS (15 functions)
205
+ # ============================================================
206
+
207
+ attach_function :pdf_ocr_engine_free, [:pointer], :void
208
+
209
+ # ============================================================
210
+ # DIGITAL SIGNATURE OPERATIONS (15 functions)
211
+ # ============================================================
212
+
213
+ # Phase 1 signing functions
214
+ # REMOVED phantom (no upstream symbol): :pdf_credentials_from_pkcs12 (1 line)
215
+ # REMOVED phantom (no upstream symbol): :pdf_credentials_from_pem (1 line)
216
+ # REMOVED phantom (no upstream symbol): :pdf_credentials_free (1 line)
217
+ # REMOVED phantom (no upstream symbol): :pdf_document_sign_data (8 lines)
218
+ #
219
+ #
220
+ #
221
+ #
222
+ #
223
+ #
224
+ #
225
+ # REMOVED phantom (no upstream symbol): :pdf_document_sign_file (7 lines)
226
+ #
227
+ #
228
+ #
229
+ #
230
+ #
231
+ #
232
+ # REMOVED phantom (no upstream symbol): :pdf_embed_ltv_data (7 lines)
233
+ #
234
+ #
235
+ #
236
+ #
237
+ #
238
+ #
239
+ # REMOVED phantom (no upstream symbol): :pdf_document_save_signed (5 lines)
240
+ #
241
+ #
242
+ #
243
+ #
244
+ # REMOVED phantom (no upstream symbol): :pdf_signed_bytes_free (1 line)
245
+
246
+ # ============================================================
247
+ # BARCODE OPERATIONS (6 functions)
248
+ # ============================================================
249
+
250
+ # ============================================================
251
+ # COMPLIANCE OPERATIONS (20 functions)
252
+ # ============================================================
253
+
254
+ # ============================================================
255
+ # CACHE OPERATIONS (5 functions)
256
+ # ============================================================
257
+
258
+ # REMOVED phantom (no upstream symbol): :pdf_cache_clear (1 line)
259
+ # REMOVED phantom (no upstream symbol): :pdf_cache_invalidate_page (1 line)
260
+ # REMOVED phantom (no upstream symbol): :pdf_cache_get_statistics (1 line)
261
+ # REMOVED phantom (no upstream symbol): :pdf_cache_set_max_size (1 line)
262
+
263
+ # ============================================================
264
+ # ANALYSIS OPERATIONS (10 functions)
265
+ # ============================================================
266
+
267
+ # ============================================================
268
+ # CONVERSION OPERATIONS (10 functions)
269
+ # ============================================================
270
+
271
+ # ============================================================
272
+ # XFA FORM OPERATIONS (12 functions)
273
+ # ============================================================
274
+
275
+ attach_function :pdf_document_has_xfa, %i[pointer pointer], :bool
276
+ # REMOVED phantom (no upstream symbol): :pdf_parse_xfa_form (1 line)
277
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_form_free (1 line)
278
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_form_field_count (1 line)
279
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_form_get_field (1 line)
280
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_field_get_name (1 line)
281
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_field_free (1 line)
282
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_form_get_dataset (1 line)
283
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_dataset_to_xml (1 line)
284
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_dataset_free (1 line)
285
+ # REMOVED phantom (no upstream symbol): :pdf_convert_xfa_to_acroform (1 line)
286
+
287
+ # ============================================================
288
+ # ANALYSIS/ML OPERATIONS (12 functions)
289
+ # ============================================================
290
+
291
+ # REMOVED phantom (no upstream symbol): :pdf_analyze_page (1 line)
292
+ # REMOVED phantom (no upstream symbol): :pdf_analysis_get_complexity (1 line)
293
+ # REMOVED phantom (no upstream symbol): :pdf_analysis_get_complexity_score (1 line)
294
+ # REMOVED phantom (no upstream symbol): :pdf_analysis_get_content_type (1 line)
295
+ # REMOVED phantom (no upstream symbol): :pdf_analysis_get_text_density (1 line)
296
+ # REMOVED phantom (no upstream symbol): :pdf_analysis_get_image_density (1 line)
297
+ # REMOVED phantom (no upstream symbol): :pdf_analysis_result_free (1 line)
298
+ # REMOVED phantom (no upstream symbol): :pdf_analyze_document (1 line)
299
+ # REMOVED phantom (no upstream symbol): :pdf_estimate_processing_time (1 line)
300
+ # REMOVED phantom (no upstream symbol): :pdf_detect_columns (1 line)
301
+ # REMOVED phantom (no upstream symbol): :pdf_detect_tables (1 line)
302
+ # REMOVED phantom (no upstream symbol): :pdf_ml_get_status (1 line)
303
+
304
+ # ============================================================
305
+ # ADDITIONAL RENDERING OPERATIONS (15 functions)
306
+ # ============================================================
307
+ # REMOVED phantom (no upstream symbol): :pdf_page_renderer_create (1 line)
308
+ # REMOVED phantom (no upstream symbol): :pdf_page_renderer_set_options (1 line)
309
+ # REMOVED phantom (no upstream symbol): :pdf_page_renderer_free (1 line)
310
+ # REMOVED phantom (no upstream symbol): :pdf_renderer_get_statistics (1 line)
311
+ # REMOVED phantom (no upstream symbol): :pdf_renderer_reset_statistics (1 line)
312
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_convert (1 line)
313
+
314
+ # ============================================================
315
+ # ADDITIONAL OCR OPERATIONS (12 functions)
316
+ # ============================================================
317
+
318
+ attach_function :pdf_ocr_engine_create, %i[pointer pointer], :pointer
319
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_engine_get_version (1 line)
320
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_engine_get_status (1 line)
321
+ attach_function :pdf_ocr_page_needs_ocr, %i[pointer int32 pointer], :bool
322
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_detect_page (1 line)
323
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_recognize_page (1 line)
324
+ # char *pdf_ocr_extract_text(PdfDocument *doc, int32_t page_index, const void *engine, int32_t *error_code)
325
+ # Pre-v0.3.55 had a phantom 5th `bool` arg and a leaky :string return.
326
+ attach_function :pdf_ocr_extract_text, %i[pointer int32 pointer pointer], :pointer
327
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_extract_spans (1 line)
328
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_extract_pages (1 line)
329
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_results_count (1 line)
330
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_results_get_text (1 line)
331
+
332
+ # ============================================================
333
+ # OCR RESULT ACCESSORS (6 functions)
334
+ # ============================================================
335
+
336
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_results_average_confidence (1 line)
337
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_results_free (1 line)
338
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_span_get_char_confidence (1 line)
339
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_span_get_bbox (1 line)
340
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_span_free (1 line)
341
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_batch_results_get_page (1 line)
342
+
343
+ # ============================================================
344
+ # CERTIFICATE AND SIGNATURE OPERATIONS (8 functions)
345
+ # ============================================================
346
+
347
+ attach_function :pdf_document_get_signature, %i[pointer int32 pointer], :pointer
348
+ attach_function :pdf_signature_free, [:pointer], :void
349
+ attach_function :pdf_certificate_load_from_bytes, %i[pointer size_t string pointer], :pointer
350
+ attach_function :pdf_certificate_free, [:pointer], :void
351
+ attach_function :pdf_document_sign, %i[pointer pointer string string pointer], :bool
352
+ # REMOVED phantom (no upstream symbol): :pdf_signature_get_signer (1 line)
353
+ attach_function :pdf_signature_verify, %i[pointer pointer], :int32
354
+ # REMOVED phantom (no upstream symbol): :pdf_compliance_issue_free (1 line)
355
+
356
+ # ============================================================
357
+ # COMPLIANCE RESULT ACCESSORS (12 functions)
358
+ # ============================================================
359
+
360
+ # REMOVED phantom (no upstream symbol): :pdf_validate_pdf_a (1 line)
361
+ # bool pdf_pdf_a_is_compliant(const FfiPdfAResults *results, int32_t *error_code)
362
+ attach_function :pdf_pdf_a_is_compliant, %i[pointer pointer], :bool
363
+ attach_function :pdf_pdf_a_error_count, [:pointer], :int32
364
+ attach_function :pdf_pdf_a_warning_count, [:pointer], :int32
365
+ attach_function :pdf_pdf_a_get_error, %i[pointer int32 pointer], :pointer
366
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_a_get_warning (1 line)
367
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_a_get_report (1 line)
368
+ attach_function :pdf_pdf_a_results_free, [:pointer], :void
369
+ # REMOVED phantom (no upstream symbol): :pdf_validate_pdf_x (1 line)
370
+ # bool pdf_pdf_x_is_compliant(const FfiPdfXResults *results, int32_t *error_code)
371
+ attach_function :pdf_pdf_x_is_compliant, %i[pointer pointer], :bool
372
+ attach_function :pdf_pdf_x_error_count, [:pointer], :int32
373
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_x_warning_count (1 line)
374
+
375
+ # ============================================================
376
+ # PDF/X RESULT ACCESSORS (6 functions)
377
+ # ============================================================
378
+
379
+ attach_function :pdf_pdf_x_get_error, %i[pointer int32 pointer], :pointer
380
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_x_get_warning (1 line)
381
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_x_get_report (1 line)
382
+ attach_function :pdf_pdf_x_results_free, [:pointer], :void
383
+ attach_function :pdf_validate_pdf_ua, %i[pointer int32 pointer], :pointer
384
+ # bool pdf_pdf_ua_is_accessible(const FfiUaResults *results, int32_t *error_code)
385
+ attach_function :pdf_pdf_ua_is_accessible, %i[pointer pointer], :bool
386
+
387
+ # ============================================================
388
+ # PDF/UA RESULT ACCESSORS (4 functions)
389
+ # ============================================================
390
+
391
+ attach_function :pdf_pdf_ua_error_count, [:pointer], :int32
392
+ attach_function :pdf_pdf_ua_get_error, %i[pointer int32 pointer], :pointer
393
+ attach_function :pdf_pdf_ua_results_free, [:pointer], :void
394
+ attach_function :pdf_convert_to_pdf_a, %i[pointer int32 pointer], :bool
395
+
396
+ # ============================================================
397
+ # CONVERSION OPERATIONS (4 functions)
398
+ # ============================================================
399
+
400
+ # REMOVED phantom (no upstream symbol): :pdf_convert_to_pdf_x (1 line)
401
+ # REMOVED phantom (no upstream symbol): :pdf_convert_to_pdf_ua (1 line)
402
+
403
+ # ============================================================
404
+ # BARCODE OPERATIONS (7 functions)
405
+ # ============================================================
406
+
407
+ # FfiBarcodeImage *pdf_generate_qr_code(const char *data, int32_t error_correction, int32_t size_px, int32_t *error_code)
408
+ attach_function :pdf_generate_qr_code, %i[string int32 int32 pointer], :pointer
409
+ # FfiBarcodeImage *pdf_generate_barcode(const char *data, int32_t format, int32_t size_px, int32_t *error_code)
410
+ # Pre-v0.3.55 had (int32, string, pointer) — args were reordered AND
411
+ # missing the size_px slot.
412
+ attach_function :pdf_generate_barcode, %i[string int32 int32 pointer], :pointer
413
+ attach_function :pdf_barcode_get_image_png, %i[pointer int32 pointer pointer], :pointer
414
+ # char *pdf_barcode_get_svg(const FfiBarcodeImage *handle, int32_t _size_px, int32_t *error_code)
415
+ attach_function :pdf_barcode_get_svg, %i[pointer int32 pointer], :pointer
416
+ attach_function :pdf_barcode_free, [:pointer], :void
417
+ attach_function :pdf_add_barcode_to_page, %i[pointer int32 pointer float float float float pointer], :bool
418
+ # REMOVED phantom (no upstream symbol): :pdf_ml_model_available (1 line)
419
+
420
+ # ============================================================
421
+ # STRATEGY AND EXTRACTION (6 functions)
422
+ # ============================================================
423
+
424
+ # REMOVED phantom (no upstream symbol): :pdf_create_extraction_strategy (1 line)
425
+ # REMOVED phantom (no upstream symbol): :pdf_strategy_get_description (1 line)
426
+ # REMOVED phantom (no upstream symbol): :pdf_strategy_recommends_ocr (1 line)
427
+ # REMOVED phantom (no upstream symbol): :pdf_strategy_free (1 line)
428
+
429
+ # ============================================================
430
+ # ADDITIONAL TEXT OPERATIONS (12 functions)
431
+ # ============================================================
432
+
433
+ # ============================================================
434
+ # ADDITIONAL HELPER FUNCTIONS (60+ functions)
435
+ # ============================================================
436
+
437
+ # Links and embedded files
438
+
439
+ # Font usage
440
+
441
+ # Barcodes
442
+
443
+ # Analysis
444
+
445
+ # Document analysis
446
+
447
+ # Signatures
448
+
449
+ # Signature verification
450
+
451
+ # Certificates
452
+
453
+ # XFA forms
454
+
455
+ # Cache
456
+
457
+ # Text extraction all pages
458
+
459
+ # Document rendering utilities
460
+
461
+ # ML functions
462
+
463
+ # Additional document methods
464
+
465
+ # ============================================================
466
+ # MISSING REAL RUST FUNCTIONS (73 total) - NOW ADDED
467
+ # ============================================================
468
+
469
+ # ANNOTATION (21)
470
+ # REMOVED phantom (no upstream symbol): :pdf_annotation_get_author (1 line)
471
+ # REMOVED phantom (no upstream symbol): :pdf_annotation_get_bbox (1 line)
472
+ # REMOVED phantom (no upstream symbol): :pdf_annotation_get_color (1 line)
473
+ # REMOVED phantom (no upstream symbol): :pdf_annotation_get_contents (1 line)
474
+ # REMOVED phantom (no upstream symbol): :pdf_annotation_get_flags (1 line)
475
+ # REMOVED phantom (no upstream symbol): :pdf_annotation_get_opacity (1 line)
476
+ # REMOVED phantom (no upstream symbol): :pdf_annotation_get_subject (1 line)
477
+ # REMOVED phantom (no upstream symbol): :pdf_annotation_get_type (1 line)
478
+ # REMOVED phantom (no upstream symbol): :pdf_freetext_annotation_get_font_name (1 line)
479
+ # REMOVED phantom (no upstream symbol): :pdf_freetext_annotation_get_font_size (1 line)
480
+ # REMOVED phantom (no upstream symbol): :pdf_link_annotation_get_page (1 line)
481
+ # REMOVED phantom (no upstream symbol): :pdf_link_annotation_get_uri (1 line)
482
+ attach_function :pdf_oxide_annotation_get_author, %i[pointer int32 pointer], :pointer
483
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_annotation_get_contents (1 line)
484
+ attach_function :pdf_oxide_annotation_get_creation_date, %i[pointer int32 pointer], :int64
485
+ # void pdf_oxide_annotation_get_rect(const FfiAnnotationList *annotations, int32_t index, float *x, float *y, float *width, float *height, int32_t *error_code)
486
+ # Pre-v0.3.55 had reversed pointer/int32 order AND was missing 3 args.
487
+ attach_function :pdf_oxide_annotation_get_rect,
488
+ %i[pointer int32 pointer pointer pointer pointer pointer], :void
489
+ # REMOVED phantom (no upstream symbol): :pdf_page_get_annotations_by_type_count (1 line)
490
+ # REMOVED phantom (no upstream symbol): :pdf_page_get_annotations_count (1 line)
491
+ # REMOVED phantom (no upstream symbol): :pdf_text_annotation_get_icon (1 line)
492
+ # REMOVED phantom (no upstream symbol): :pdf_text_annotation_get_open (1 line)
493
+ # REMOVED phantom (no upstream symbol): :pdf_text_markup_annotation_get_type (1 line)
494
+
495
+ # DOCUMENT (10)
496
+ # REMOVED phantom (no upstream symbol): :pdf_document_can_annotate (1 line)
497
+ # REMOVED phantom (no upstream symbol): :pdf_document_can_copy (1 line)
498
+ # REMOVED phantom (no upstream symbol): :pdf_document_can_fill_forms (1 line)
499
+ # REMOVED phantom (no upstream symbol): :pdf_document_can_modify (1 line)
500
+ # REMOVED phantom (no upstream symbol): :pdf_document_can_print (1 line)
501
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_encryption_algorithm (1 line)
502
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_mod_date (1 line)
503
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_outline_level (1 line)
504
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_outline_page (1 line)
505
+ # REMOVED phantom (no upstream symbol): :pdf_document_is_layer_visible (1 line)
506
+
507
+ # PAGE (8)
508
+ attach_function :pdf_get_page_count, %i[pointer pointer], :int32
509
+ # REMOVED phantom (no upstream symbol): :pdf_page_find_elements_count (1 line)
510
+ attach_function :pdf_page_get_height, [:pointer], :float
511
+ # REMOVED phantom (no upstream symbol): :pdf_page_get_index (1 line)
512
+ attach_function :pdf_page_get_width, [:pointer], :float
513
+ # REMOVED phantom (no upstream symbol): :pdf_page_search_text (1 line)
514
+ attach_function :pdf_render_page, %i[pointer int32 pointer pointer], :pointer
515
+ # REMOVED phantom (no upstream symbol): :pdf_search_result_get_page (1 line)
516
+
517
+ # ELEMENT (9)
518
+ # REMOVED phantom (no upstream symbol): :pdf_element_free (1 line)
519
+ # REMOVED phantom (no upstream symbol): :pdf_element_get_bbox (1 line)
520
+ # REMOVED phantom (no upstream symbol): :pdf_element_get_type (1 line)
521
+ # REMOVED phantom (no upstream symbol): :pdf_image_element_get_data (1 line)
522
+ # REMOVED phantom (no upstream symbol): :pdf_image_element_get_data_size (1 line)
523
+ # REMOVED phantom (no upstream symbol): :pdf_image_element_get_dimensions (1 line)
524
+ # REMOVED phantom (no upstream symbol): :pdf_image_element_get_format (1 line)
525
+ # REMOVED phantom (no upstream symbol): :pdf_text_element_get_content (1 line)
526
+ # REMOVED phantom (no upstream symbol): :pdf_text_element_get_font_size (1 line)
527
+
528
+ # SEARCH (3)
529
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_search_result_get_position (1 line)
530
+ # REMOVED phantom (no upstream symbol): :pdf_search_result_get_bbox (1 line)
531
+ # REMOVED phantom (no upstream symbol): :pdf_search_result_get_text (1 line)
532
+
533
+ # RENDERING (2)
534
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_copy_data (1 line)
535
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_format (1 line)
536
+
537
+ # OCR (2)
538
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_results_get_span (1 line)
539
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_span_to_text_span (1 line)
540
+
541
+ # IMAGE (3)
542
+ attach_function :pdf_oxide_image_get_colorspace, %i[pointer int32 pointer], :pointer
543
+ attach_function :pdf_oxide_image_get_data, %i[pointer int32 pointer pointer], :pointer
544
+ attach_function :pdf_oxide_image_get_format, %i[pointer int32 pointer], :pointer
545
+
546
+ # TEXT (1)
547
+ attach_function :pdf_from_text, %i[string pointer], :pointer
548
+
549
+ # OTHER (8)
550
+ # REMOVED phantom (no upstream symbol): :pdf_cache_get_statistics_json (1 line)
551
+ attach_function :pdf_from_html, %i[string pointer], :pointer
552
+ attach_function :pdf_from_markdown, %i[string pointer], :pointer
553
+ attach_function :pdf_oxide_font_get_encoding, %i[pointer int32 pointer], :pointer
554
+ attach_function :pdf_oxide_font_get_type, %i[pointer int32 pointer], :pointer
555
+ attach_function :pdf_oxide_font_is_subset, %i[pointer int32 pointer], :int32
556
+ attach_function :pdf_save, %i[pointer string pointer], :int32
557
+ attach_function :pdf_save_to_bytes, %i[pointer pointer pointer pointer], :int32
558
+
559
+ # FREE/CLEANUP FUNCTIONS (6)
560
+ # REMOVED phantom (no upstream symbol): :pdf_annotation_free (1 line)
561
+ # REMOVED phantom (no upstream symbol): :pdf_page_free (1 line)
562
+ # REMOVED phantom (no upstream symbol): :pdf_search_result_free (1 line)
563
+ attach_function :pdf_free, [:pointer], :void
564
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_annotation_free (1 line)
565
+ # REMOVED phantom (no upstream symbol): :pdf_page_get_dimensions (1 line)
566
+
567
+ # ============================================================
568
+ # PHASE 1: ADDITIONAL FFI BINDINGS (122 MISSING FUNCTIONS)
569
+ # ============================================================
570
+
571
+ # ============================================================
572
+ # OCR OPERATIONS (16 missing functions)
573
+ # ============================================================
574
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_span_get_char_confidence (1 line)
575
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_span_get_bbox (1 line)
576
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_span_free (1 line)
577
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_batch_results_get_page (1 line)
578
+ # REMOVED duplicate declaration: :pdf_ocr_page_needs_ocr (1 line)
579
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_detect_page (1 line)
580
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_recognize_page (1 line)
581
+ # REMOVED duplicate declaration: :pdf_ocr_extract_text (1 line)
582
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_extract_spans (1 line)
583
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_extract_pages (1 line)
584
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_engine_get_version (1 line)
585
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_engine_get_status (1 line)
586
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_results_count (1 line)
587
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_results_get_text (1 line)
588
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_results_average_confidence (1 line)
589
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_results_free (1 line)
590
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_config_create (1 line)
591
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_config_set_detection_threshold (1 line)
592
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_config_set_recognition_threshold (1 line)
593
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_config_set_max_side_len (1 line)
594
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_config_set_use_gpu (1 line)
595
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_config_set_gpu_device_id (1 line)
596
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_config_free (1 line)
597
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_engine_create_with_config (1 line)
598
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_span_to_text_span (1 line)
599
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_ocr_result_confidence (1 line)
600
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_gpu_available (1 line)
601
+ # REMOVED phantom (no upstream symbol): :pdf_ocr_gpu_device_count (1 line)
602
+
603
+ # ============================================================
604
+ # RENDERING OPERATIONS (20 missing functions)
605
+ # ============================================================
606
+ # REMOVED phantom (no upstream symbol): :pdf_page_renderer_create (1 line)
607
+ # REMOVED phantom (no upstream symbol): :pdf_page_renderer_set_options (1 line)
608
+ # REMOVED phantom (no upstream symbol): :pdf_page_renderer_free (1 line)
609
+ # REMOVED duplicate declaration: :pdf_render_page (1 line)
610
+ # REMOVED phantom (no upstream symbol): :pdf_render_page_to_file (1 line)
611
+ # REMOVED phantom (no upstream symbol): :pdf_render_page_range (1 line)
612
+ # REMOVED phantom (no upstream symbol): :pdf_render_document (1 line)
613
+ # REMOVED duplicate declaration: :pdf_render_page_region (1 line)
614
+ # REMOVED duplicate declaration: :pdf_render_page_zoom (1 line)
615
+ # REMOVED duplicate declaration: :pdf_render_page_fit (1 line)
616
+ # REMOVED duplicate declaration: :pdf_render_page_thumbnail (1 line)
617
+ attach_function :pdf_estimate_render_time, %i[pointer int32 pointer], :int32
618
+ # REMOVED phantom (no upstream symbol): :pdf_renderer_get_statistics (1 line)
619
+ # REMOVED phantom (no upstream symbol): :pdf_renderer_reset_statistics (1 line)
620
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_width (1 line)
621
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_height (1 line)
622
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_size (1 line)
623
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_data (1 line)
624
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_convert (1 line)
625
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_to_base64 (1 line)
626
+ # REMOVED phantom (no upstream symbol): :pdf_render_page_to_base64 (1 line)
627
+ # REMOVED phantom (no upstream symbol): :pdf_image_format_mime_type (1 line)
628
+ # REMOVED phantom (no upstream symbol): :pdf_image_format_extension (1 line)
629
+ # REMOVED phantom (no upstream symbol): :pdf_renderer_statistics_pages_rendered (1 line)
630
+ # REMOVED phantom (no upstream symbol): :pdf_renderer_statistics_total_time (1 line)
631
+ # REMOVED phantom (no upstream symbol): :pdf_renderer_statistics_avg_time (1 line)
632
+
633
+ # ============================================================
634
+ # BARCODE OPERATIONS (13 missing functions)
635
+ # ============================================================
636
+ # REMOVED duplicate declaration: :pdf_generate_qr_code (1 line)
637
+ # REMOVED phantom (no upstream symbol): :pdf_generate_ean13 (1 line)
638
+ # REMOVED phantom (no upstream symbol): :pdf_generate_ean8 (1 line)
639
+ # REMOVED phantom (no upstream symbol): :pdf_generate_upc_a (1 line)
640
+ # REMOVED phantom (no upstream symbol): :pdf_generate_code128 (1 line)
641
+ # REMOVED phantom (no upstream symbol): :pdf_generate_code39 (1 line)
642
+ # REMOVED duplicate declaration: :pdf_barcode_get_image_png (1 line)
643
+ # REMOVED phantom (no upstream symbol): :pdf_barcode_get_image_base64 (1 line)
644
+ # REMOVED duplicate declaration: :pdf_barcode_get_svg (1 line)
645
+ # REMOVED duplicate declaration: :pdf_barcode_free (1 line)
646
+ # REMOVED duplicate declaration: :pdf_add_barcode_to_page (1 line)
647
+ # REMOVED phantom (no upstream symbol): :pdf_add_barcode_to_page_fit (1 line)
648
+ # REMOVED phantom (no upstream symbol): :pdf_add_qr_code_with_label (1 line)
649
+ # REMOVED phantom (no upstream symbol): :pdf_detect_barcodes_on_page (1 line)
650
+ # REMOVED phantom (no upstream symbol): :pdf_barcode_get_bounds (1 line)
651
+ # Barcode accessors: (handle, int32_t *error_code).
652
+ # pdf_barcode_get_data returns owned char* — bind as :pointer.
653
+ attach_function :pdf_barcode_get_confidence, %i[pointer pointer], :float
654
+ attach_function :pdf_barcode_get_data, %i[pointer pointer], :pointer
655
+ attach_function :pdf_barcode_get_format, %i[pointer pointer], :int32
656
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_barcode_count (1 line)
657
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_barcode_get_data (1 line)
658
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_barcode_get_format (1 line)
659
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_barcode_list_free (1 line)
660
+
661
+ # ============================================================
662
+ # DIGITAL SIGNATURE OPERATIONS (38 missing functions)
663
+ # ============================================================
664
+ # REMOVED phantom (no upstream symbol): :pdf_credentials_from_pkcs12 (1 line)
665
+ # REMOVED phantom (no upstream symbol): :pdf_credentials_from_pem (1 line)
666
+ # REMOVED phantom (no upstream symbol): :pdf_credentials_from_der (1 line)
667
+ # REMOVED phantom (no upstream symbol): :pdf_credentials_add_chain_cert (1 line)
668
+ # REMOVED phantom (no upstream symbol): :pdf_credentials_get_certificate (1 line)
669
+ # REMOVED phantom (no upstream symbol): :pdf_credentials_free (1 line)
670
+ # Certificate accessors: (cert, int32_t *error_code) returning
671
+ # owned char* — bind as :pointer so callers can free via
672
+ # StringMarshaller.
673
+ attach_function :pdf_certificate_get_subject, %i[pointer pointer], :pointer
674
+ # REMOVED phantom (no upstream symbol): :pdf_certificate_get_cn (1 line)
675
+ attach_function :pdf_certificate_get_issuer, %i[pointer pointer], :pointer
676
+ attach_function :pdf_certificate_get_serial, %i[pointer pointer], :pointer
677
+ # REMOVED phantom (no upstream symbol): :pdf_certificate_get_size (1 line)
678
+ attach_function :pdf_certificate_get_validity, %i[pointer pointer pointer pointer], :void
679
+ # int32_t pdf_certificate_is_valid(const void *cert, int32_t *error_code)
680
+ # Pre-v0.3.55 had 1-arg :bool — wrong arg count AND wrong return type
681
+ # (C returns int32_t; 1 = valid, 0 = invalid, negative = error).
682
+ attach_function :pdf_certificate_is_valid, %i[pointer pointer], :int32
683
+ # REMOVED phantom (no upstream symbol): :pdf_certificate_is_expired (1 line)
684
+ # REMOVED phantom (no upstream symbol): :pdf_certificate_get_key_size (1 line)
685
+ # REMOVED duplicate declaration: :pdf_certificate_free (1 line)
686
+ # REMOVED duplicate declaration: :pdf_document_sign (1 line)
687
+ # REMOVED phantom (no upstream symbol): :pdf_document_sign_with_appearance (10 lines)
688
+ #
689
+ #
690
+ #
691
+ #
692
+ #
693
+ #
694
+ #
695
+ #
696
+ #
697
+ attach_function :pdf_add_timestamp, [
698
+ :pointer, :size_t, # pdf_data, pdf_len
699
+ :int32, # signature_index
700
+ :string, # tsa_url
701
+ :pointer, :pointer, # out_data, out_len
702
+ :pointer # error_code
703
+ ], :bool
704
+ # REMOVED phantom (no upstream symbol): :pdf_document_co_sign (1 line)
705
+ # REMOVED phantom (no upstream symbol): :pdf_document_signature_count (1 line)
706
+ # REMOVED duplicate declaration: :pdf_document_get_signature (1 line)
707
+ # REMOVED phantom (no upstream symbol): :pdf_verify_signature (1 line)
708
+ # REMOVED phantom (no upstream symbol): :pdf_verify_all_signatures (1 line)
709
+ # REMOVED phantom (no upstream symbol): :pdf_signature_get_time (1 line)
710
+ # REMOVED phantom (no upstream symbol): :pdf_signature_get_reason (1 line)
711
+ # REMOVED phantom (no upstream symbol): :pdf_signature_get_location (1 line)
712
+ # REMOVED phantom (no upstream symbol): :pdf_signature_get_contact (1 line)
713
+ attach_function :pdf_signature_get_certificate, %i[pointer pointer], :pointer
714
+ # REMOVED phantom (no upstream symbol): :pdf_signature_get_subfilter (1 line)
715
+ # REMOVED phantom (no upstream symbol): :pdf_signature_get_digest_algorithm (1 line)
716
+ # bool pdf_signature_has_timestamp(const void *_sig, int32_t *error_code)
717
+ attach_function :pdf_signature_has_timestamp, %i[pointer pointer], :bool
718
+ # REMOVED phantom (no upstream symbol): :pdf_signature_to_json (1 line)
719
+ # REMOVED phantom (no upstream symbol): :pdf_signature_info_free (1 line)
720
+ # REMOVED phantom (no upstream symbol): :pdf_remove_signature (1 line)
721
+ # REMOVED phantom (no upstream symbol): :pdf_clear_all_signatures (1 line)
722
+
723
+ # ============================================================
724
+ # PAdES Level Enforcement
725
+ # ============================================================
726
+ # REMOVED phantom (no upstream symbol): :pdf_pades_validate_level (1 line)
727
+ # REMOVED phantom (no upstream symbol): :pdf_pades_sign (8 lines)
728
+ #
729
+ #
730
+ #
731
+ #
732
+ #
733
+ #
734
+ #
735
+ # REMOVED phantom (no upstream symbol): :pdf_pades_get_level (1 line)
736
+
737
+ # ============================================================
738
+ # XFA FORM OPERATIONS (13 missing functions)
739
+ # ============================================================
740
+ # REMOVED phantom (no upstream symbol): :pdf_get_xfa_form_type (1 line)
741
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_form_get_title (1 line)
742
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_form_page_count (1 line)
743
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_form_find_field (1 line)
744
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_field_get_label (1 line)
745
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_field_get_type (1 line)
746
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_field_get_value (1 line)
747
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_field_set_value (1 line)
748
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_field_is_required (1 line)
749
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_field_is_readonly (1 line)
750
+ # REMOVED phantom (no upstream symbol): :pdf_xfa_dataset_to_json (1 line)
751
+ # REMOVED phantom (no upstream symbol): :pdf_extract_xfa_as_fdf (1 line)
752
+ # REMOVED phantom (no upstream symbol): :pdf_get_xfa_template_xml (1 line)
753
+
754
+ # ============================================================
755
+ # COMPLIANCE OPERATIONS (23 missing functions)
756
+ # ============================================================
757
+ # REMOVED phantom (no upstream symbol): :pdf_validate_pdf_a (1 line)
758
+ # REMOVED duplicate declaration: :pdf_pdf_a_is_compliant (1 line)
759
+ # REMOVED duplicate declaration: :pdf_pdf_a_error_count (1 line)
760
+ # REMOVED duplicate declaration: :pdf_pdf_a_warning_count (1 line)
761
+ # REMOVED duplicate declaration: :pdf_pdf_a_get_error (1 line)
762
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_a_get_warning (1 line)
763
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_a_get_report (1 line)
764
+ # REMOVED duplicate declaration: :pdf_pdf_a_results_free (1 line)
765
+ # REMOVED phantom (no upstream symbol): :pdf_validate_pdf_x (1 line)
766
+ # REMOVED duplicate declaration: :pdf_pdf_x_is_compliant (1 line)
767
+ # REMOVED duplicate declaration: :pdf_pdf_x_error_count (1 line)
768
+ # REMOVED duplicate declaration: :pdf_pdf_x_get_error (1 line)
769
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_x_get_report (1 line)
770
+ # REMOVED duplicate declaration: :pdf_pdf_x_results_free (1 line)
771
+ # REMOVED duplicate declaration: :pdf_validate_pdf_ua (1 line)
772
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_ua_is_compliant (1 line)
773
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_ua_issue_count (1 line)
774
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_ua_get_issue (1 line)
775
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_ua_get_report (1 line)
776
+ # REMOVED duplicate declaration: :pdf_pdf_ua_results_free (1 line)
777
+ # REMOVED duplicate declaration: :pdf_convert_to_pdf_a (1 line)
778
+ # REMOVED phantom (no upstream symbol): :pdf_conversion_success (1 line)
779
+ # REMOVED phantom (no upstream symbol): :pdf_conversion_modification_count (1 line)
780
+ # REMOVED phantom (no upstream symbol): :pdf_conversion_get_modification (1 line)
781
+ # REMOVED phantom (no upstream symbol): :pdf_conversion_get_report (1 line)
782
+ # REMOVED phantom (no upstream symbol): :pdf_conversion_results_free (1 line)
783
+
784
+ # ============================================================
785
+ # ADDITIONAL MANAGER SUPPORT FUNCTIONS
786
+ # ============================================================
787
+
788
+ # Analysis functions used by managers
789
+ # REMOVED phantom (no upstream symbol): :pdf_analysis_get_block_count (1 line)
790
+ # REMOVED phantom (no upstream symbol): :pdf_analysis_get_column_count (1 line)
791
+ # REMOVED phantom (no upstream symbol): :pdf_analysis_get_image_block_count (1 line)
792
+ # REMOVED phantom (no upstream symbol): :pdf_analysis_get_layout_type (1 line)
793
+ # REMOVED phantom (no upstream symbol): :pdf_analysis_get_table_count (1 line)
794
+ # REMOVED phantom (no upstream symbol): :pdf_analysis_get_text_block_count (1 line)
795
+
796
+ # Document edit functions
797
+ # REMOVED phantom (no upstream symbol): :pdf_document_delete_page (1 line)
798
+ # REMOVED phantom (no upstream symbol): :pdf_document_insert_page (1 line)
799
+ # REMOVED phantom (no upstream symbol): :pdf_document_move_page (1 line)
800
+ # REMOVED phantom (no upstream symbol): :pdf_document_duplicate_page (1 line)
801
+ # REMOVED phantom (no upstream symbol): :pdf_document_merge_pages (1 line)
802
+
803
+ # Page dimension functions
804
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_media_box (1 line)
805
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_crop_box (1 line)
806
+ # REMOVED phantom (no upstream symbol): :pdf_document_set_crop_box (1 line)
807
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_page_label (1 line)
808
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_page_rotation (1 line)
809
+ # REMOVED phantom (no upstream symbol): :pdf_document_set_page_rotation (1 line)
810
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_page_width (1 line)
811
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_page_height (1 line)
812
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_page_complexity (1 line)
813
+
814
+ # Document property functions
815
+ # REMOVED phantom (no upstream symbol): :pdf_document_has_layers (1 line)
816
+ # REMOVED phantom (no upstream symbol): :pdf_document_has_outlines (1 line)
817
+ # REMOVED phantom (no upstream symbol): :pdf_document_has_javascript (1 line)
818
+ # REMOVED phantom (no upstream symbol): :pdf_document_has_valid_signatures (1 line)
819
+
820
+ # Form functions
821
+ # REMOVED phantom (no upstream symbol): :pdf_document_has_acro_forms (1 line)
822
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_form_field_names (1 line)
823
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_form_field_count (1 line)
824
+
825
+ # Image extraction functions
826
+ # REMOVED phantom (no upstream symbol): :pdf_document_extract_all_images (1 line)
827
+ # REMOVED phantom (no upstream symbol): :pdf_document_extract_image (1 line)
828
+ # REMOVED phantom (no upstream symbol): :pdf_document_extract_font (1 line)
829
+
830
+ # Layout and structure functions
831
+ # REMOVED phantom (no upstream symbol): :pdf_document_extract_layout (1 line)
832
+ # REMOVED phantom (no upstream symbol): :pdf_document_extract_with_layout (1 line)
833
+ # REMOVED phantom (no upstream symbol): :pdf_document_extract_with_bbox (1 line)
834
+ # REMOVED phantom (no upstream symbol): :pdf_document_detect_columns (1 line)
835
+ # REMOVED phantom (no upstream symbol): :pdf_document_detect_tables (1 line)
836
+
837
+ # Search functions
838
+ # REMOVED phantom (no upstream symbol): :pdf_document_search_regex (1 line)
839
+ # REMOVED phantom (no upstream symbol): :pdf_document_search_in_range (1 line)
840
+ # REMOVED phantom (no upstream symbol): :pdf_document_search_in_area (1 line)
841
+ # REMOVED phantom (no upstream symbol): :pdf_document_search_annotations (1 line)
842
+ # REMOVED phantom (no upstream symbol): :pdf_document_count_text_occurrences (1 line)
843
+
844
+ # Text functions
845
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_text_with_coordinates (1 line)
846
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_unique_characters (1 line)
847
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_text_statistics (1 line)
848
+ # REMOVED phantom (no upstream symbol): :pdf_document_replace_text (1 line)
849
+
850
+ # Analysis functions
851
+ # REMOVED phantom (no upstream symbol): :pdf_document_analyze_page (1 line)
852
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_complexity_score (1 line)
853
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_content_type (1 line)
854
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_text_density (1 line)
855
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_image_density (1 line)
856
+
857
+ # Link extraction functions
858
+ # REMOVED phantom (no upstream symbol): :pdf_document_extract_links (1 line)
859
+
860
+ # Embedded files functions
861
+ # REMOVED phantom (no upstream symbol): :pdf_document_extract_embedded_files (1 line)
862
+
863
+ # Font usage functions
864
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_font_usage (1 line)
865
+
866
+ # OCR functions
867
+ # REMOVED phantom (no upstream symbol): :pdf_document_apply_ocr (1 line)
868
+ # REMOVED phantom (no upstream symbol): :pdf_document_ocr_page (1 line)
869
+ # REMOVED duplicate declaration: :pdf_ocr_engine_create (1 line)
870
+
871
+ # Signature functions
872
+ # REMOVED duplicate declaration: :pdf_document_sign (1 line)
873
+ attach_function :pdf_document_get_signature_count, %i[pointer pointer], :int32
874
+
875
+ # Save functions
876
+ # REMOVED phantom (no upstream symbol): :pdf_document_save (1 line)
877
+ # REMOVED phantom (no upstream symbol): :pdf_document_save_incremental (1 line)
878
+
879
+ # Metadata set functions
880
+ # REMOVED phantom (no upstream symbol): :pdf_document_set_title (1 line)
881
+ # REMOVED phantom (no upstream symbol): :pdf_document_set_author (1 line)
882
+ # REMOVED phantom (no upstream symbol): :pdf_document_set_subject (1 line)
883
+ # REMOVED phantom (no upstream symbol): :pdf_document_set_keywords (1 line)
884
+
885
+ # Compliance validation functions
886
+ # REMOVED phantom (no upstream symbol): :pdf_document_validate_pdf_a (1 line)
887
+ # REMOVED phantom (no upstream symbol): :pdf_document_validate_pdf_x (1 line)
888
+ # REMOVED phantom (no upstream symbol): :pdf_document_validate_pdf_ua (1 line)
889
+
890
+ # Conversion functions
891
+ # REMOVED phantom (no upstream symbol): :pdf_convert_to_pdf_ua (1 line)
892
+ # REMOVED phantom (no upstream symbol): :pdf_convert_to_pdf_x (1 line)
893
+
894
+ # Extraction strategy functions
895
+ # REMOVED phantom (no upstream symbol): :pdf_create_extraction_strategy (1 line)
896
+ # REMOVED phantom (no upstream symbol): :pdf_strategy_get_description (1 line)
897
+ # REMOVED phantom (no upstream symbol): :pdf_strategy_recommends_ocr (1 line)
898
+ # REMOVED phantom (no upstream symbol): :pdf_strategy_free (1 line)
899
+
900
+ # Rendering functions
901
+ # REMOVED phantom (no upstream symbol): :pdf_render_page_to_bytes (1 line)
902
+ # REMOVED phantom (no upstream symbol): :pdf_rendered_image_save (1 line)
903
+ # REMOVED duplicate declaration: :pdf_rendered_image_free (1 line)
904
+
905
+ # Outline functions
906
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_outline_dest_page (1 line)
907
+
908
+ # List helper functions
909
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_column_count (1 line)
910
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_column_get_bbox (1 line)
911
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_column_list_free (1 line)
912
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_embedded_file_count (1 line)
913
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_embedded_file_get_name (1 line)
914
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_embedded_file_get_size (1 line)
915
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_embedded_file_list_free (1 line)
916
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_font_get_family (1 line)
917
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_font_usage_count (1 line)
918
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_font_usage_get_name (1 line)
919
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_font_usage_get_page_count (1 line)
920
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_font_usage_is_embedded (1 line)
921
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_font_usage_free (1 line)
922
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_image_get_name (1 line)
923
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_image_get_color_space (1 line)
924
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_link_count (1 line)
925
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_link_get_url (1 line)
926
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_link_get_bbox (1 line)
927
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_link_list_free (1 line)
928
+ attach_function :pdf_oxide_table_count, [:pointer], :int32
929
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_table_get_bbox (1 line)
930
+ # Table accessors: (tables, index, int32_t *error_code) → int32.
931
+ attach_function :pdf_oxide_table_get_row_count, %i[pointer int32 pointer], :int32
932
+ attach_function :pdf_oxide_table_get_col_count, %i[pointer int32 pointer], :int32
933
+ attach_function :pdf_oxide_table_list_free, [:pointer], :void
934
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_ocr_result_get_text (1 line)
935
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_ocr_result_confidence (1 line)
936
+
937
+ # Certificate functions
938
+ # REMOVED phantom (no upstream symbol): :pdf_certificate_get_serial_number (1 line)
939
+ # REMOVED phantom (no upstream symbol): :pdf_certificate_get_valid_from (1 line)
940
+ # REMOVED phantom (no upstream symbol): :pdf_certificate_get_valid_to (1 line)
941
+ # REMOVED phantom (no upstream symbol): :pdf_certificate_get_thumbprint (1 line)
942
+
943
+ # PDF/X compliance functions
944
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_x_warning_count (1 line)
945
+ # REMOVED phantom (no upstream symbol): :pdf_pdf_x_get_warning (1 line)
946
+
947
+ # PDF/UA compliance functions
948
+ # REMOVED duplicate declaration: :pdf_pdf_ua_error_count (1 line)
949
+ # REMOVED duplicate declaration: :pdf_pdf_ua_is_accessible (1 line)
950
+
951
+ # Modification date function
952
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_modification_date (1 line)
953
+
954
+ # Extract pages function
955
+ # REMOVED phantom (no upstream symbol): :pdf_document_extract_pages (1 line)
956
+
957
+ # ============================================================
958
+ # FINAL REMAINING MANAGER SUPPORT FUNCTIONS
959
+ # ============================================================
960
+
961
+ # Annotation modification functions
962
+ # REMOVED phantom (no upstream symbol): :pdf_document_add_highlight (1 line)
963
+ # REMOVED phantom (no upstream symbol): :pdf_document_add_underline (1 line)
964
+ # REMOVED phantom (no upstream symbol): :pdf_document_add_strikeout (1 line)
965
+ # REMOVED phantom (no upstream symbol): :pdf_document_add_text_annotation (1 line)
966
+ # REMOVED phantom (no upstream symbol): :pdf_document_delete_annotation (1 line)
967
+ # REMOVED phantom (no upstream symbol): :pdf_document_flatten_annotations (1 line)
968
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_annotation_count (1 line)
969
+
970
+ # Barcode functions
971
+ # REMOVED phantom (no upstream symbol): :pdf_document_add_qr_code (1 line)
972
+ # REMOVED phantom (no upstream symbol): :pdf_document_add_barcode (1 line)
973
+ # REMOVED phantom (no upstream symbol): :pdf_document_extract_barcodes (1 line)
974
+
975
+ # Signature functions
976
+ # REMOVED phantom (no upstream symbol): :pdf_document_add_signature (1 line)
977
+ # REMOVED phantom (no upstream symbol): :pdf_document_verify_signature (1 line)
978
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_signature_signer (1 line)
979
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_signature_timestamp (1 line)
980
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_signature_status (1 line)
981
+
982
+ # Form field functions
983
+ # REMOVED phantom (no upstream symbol): :pdf_document_flatten_forms (1 line)
984
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_form_field_type (1 line)
985
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_form_field_value (1 line)
986
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_form_field_flags (1 line)
987
+ # REMOVED phantom (no upstream symbol): :pdf_document_set_form_field_value (1 line)
988
+ # REMOVED phantom (no upstream symbol): :pdf_document_reset_form_fields (1 line)
989
+
990
+ # Document utility functions
991
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_file_size (1 line)
992
+ # REMOVED phantom (no upstream symbol): :pdf_document_get_metadata (1 line)
993
+ # REMOVED phantom (no upstream symbol): :pdf_document_unlock_with_password (1 line)
994
+
995
+ # XFA function alias
996
+ # REMOVED phantom (no upstream symbol): :pdf_document_has_xfa_form (1 line)
997
+
998
+ # Annotation list helper functions
999
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_annotation_get_text (1 line)
1000
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_annotation_get_bbox (1 line)
1001
+ # uint32_t pdf_oxide_annotation_get_color(const FfiAnnotationList *annotations, int32_t index, int32_t *error_code)
1002
+ # Pre-v0.3.55 missed the trailing err pointer AND had :int32 return
1003
+ # (C returns uint32_t — packed ARGB color).
1004
+ attach_function :pdf_oxide_annotation_get_color, %i[pointer int32 pointer], :uint32
1005
+ attach_function :pdf_oxide_annotation_list_free, [:pointer], :void
1006
+
1007
+ # Form field list helper functions
1008
+ attach_function :pdf_oxide_form_field_count, [:pointer], :int32
1009
+ # char *pdf_oxide_form_field_get_name(const FfiFormFieldList *fields, int32_t index, int32_t *error_code)
1010
+ attach_function :pdf_oxide_form_field_get_name, %i[pointer int32 pointer], :pointer
1011
+ attach_function :pdf_oxide_form_field_list_free, [:pointer], :void
1012
+
1013
+ # Signature helper functions
1014
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_signature_free (1 line)
1015
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_signature_get_signer (1 line)
1016
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_signature_get_timestamp (1 line)
1017
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_signature_get_status (1 line)
1018
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_signature_get_reason (1 line)
1019
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_signature_get_location (1 line)
1020
+
1021
+ # Verification helper functions
1022
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_verification_free (1 line)
1023
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_verification_is_valid (1 line)
1024
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_verification_is_trusted (1 line)
1025
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_verification_is_self_signed (1 line)
1026
+ # REMOVED phantom (no upstream symbol): :pdf_oxide_verification_get_error (1 line)
1027
+
1028
+ # ============================================================
1029
+ # REDACTION OPERATIONS
1030
+ # ============================================================
1031
+
1032
+ # Add a redaction annotation to a page
1033
+ attach_function :pdf_redaction_add,
1034
+ %i[pointer int32 float float float float uint8 uint8 uint8 pointer],
1035
+ :bool
1036
+
1037
+ # Apply all pending redactions
1038
+ attach_function :pdf_redaction_apply,
1039
+ %i[pointer bool uint8 uint8 uint8 pointer],
1040
+ :bool
1041
+
1042
+ # Scrub document metadata
1043
+ attach_function :pdf_redaction_scrub_metadata,
1044
+ %i[pointer bool bool bool pointer],
1045
+ :bool
1046
+
1047
+ # Get count of pending redactions
1048
+ attach_function :pdf_redaction_count, %i[pointer pointer], :int32
1049
+
1050
+ # ============================================================
1051
+ # FLATTENING OPERATIONS
1052
+ # ============================================================
1053
+
1054
+ # Flatten all form fields
1055
+ # REMOVED phantom (no upstream symbol): :pdf_document_editor_flatten_forms (1 line)
1056
+
1057
+ # Flatten form fields on a specific page
1058
+ # REMOVED phantom (no upstream symbol): :pdf_document_editor_flatten_forms_page (1 line)
1059
+
1060
+ # Flatten all annotations
1061
+ # REMOVED phantom (no upstream symbol): :pdf_document_editor_flatten_annotations (1 line)
1062
+
1063
+ # Flatten annotations on a specific page
1064
+ # REMOVED phantom (no upstream symbol): :pdf_document_editor_flatten_annotations_page (1 line)
1065
+
1066
+ # ============================================================
1067
+ # COMPLIANCE OPERATIONS
1068
+ # ============================================================
1069
+
1070
+ # Convert document to PDF/A
1071
+ # REMOVED duplicate declaration: :pdf_convert_to_pdf_a (1 line)
1072
+
1073
+ # Validate document against PDF/A
1074
+ # REMOVED phantom (no upstream symbol): :pdf_validate_pdfa (1 line)
1075
+
1076
+ # ============================================================
1077
+ # ACCESSIBILITY OPERATIONS
1078
+ # ============================================================
1079
+
1080
+ # Check if document is tagged
1081
+ # REMOVED phantom (no upstream symbol): :pdf_accessibility_is_tagged (1 line)
1082
+
1083
+ # Get the document structure tree
1084
+ # REMOVED phantom (no upstream symbol): :pdf_accessibility_get_structure_tree (1 line)
1085
+
1086
+ # Automatically tag the document
1087
+ # REMOVED phantom (no upstream symbol): :pdf_accessibility_auto_tag (1 line)
1088
+
1089
+ # Set alt text on a structure element
1090
+ # REMOVED phantom (no upstream symbol): :pdf_accessibility_set_alt_text (1 line)
1091
+
1092
+ # Set the document language
1093
+ # REMOVED phantom (no upstream symbol): :pdf_accessibility_set_language (1 line)
1094
+
1095
+ # Set the document title for accessibility
1096
+ # REMOVED phantom (no upstream symbol): :pdf_accessibility_set_title (1 line)
1097
+
1098
+ # Free a structure tree handle
1099
+ # REMOVED phantom (no upstream symbol): :pdf_structure_tree_free (1 line)
1100
+
1101
+ # Free a structure element handle
1102
+ # REMOVED phantom (no upstream symbol): :pdf_struct_elem_free (1 line)
1103
+
1104
+ # ============================================================
1105
+ # OPTIMIZATION OPERATIONS
1106
+ # ============================================================
1107
+
1108
+ # Open document with mmap
1109
+ # REMOVED phantom (no upstream symbol): :pdf_document_open_mmap (1 line)
1110
+
1111
+ # Subset fonts to remove unused glyphs
1112
+ # REMOVED phantom (no upstream symbol): :pdf_optimize_subset_fonts (1 line)
1113
+
1114
+ # Downsample images
1115
+ # REMOVED phantom (no upstream symbol): :pdf_optimize_downsample_images (1 line)
1116
+
1117
+ # Deduplicate content streams
1118
+ # REMOVED phantom (no upstream symbol): :pdf_optimize_deduplicate (1 line)
1119
+
1120
+ # Run full optimization pipeline
1121
+ # REMOVED phantom (no upstream symbol): :pdf_optimize_full (1 line)
1122
+
1123
+ # Get bytes saved from optimization result
1124
+ # REMOVED phantom (no upstream symbol): :pdf_optimization_result_bytes_saved (1 line)
1125
+
1126
+ # Free optimization result handle
1127
+ # REMOVED phantom (no upstream symbol): :pdf_optimization_result_free (1 line)
1128
+
1129
+ # ============================================================
1130
+ # ENTERPRISE OPERATIONS
1131
+ # ============================================================
1132
+
1133
+ # Bates numbering
1134
+ # REMOVED phantom (no upstream symbol): :pdf_bates_apply (1 line)
1135
+ # REMOVED phantom (no upstream symbol): :pdf_bates_apply_advanced (7 lines)
1136
+ #
1137
+ #
1138
+ #
1139
+ #
1140
+ #
1141
+ #
1142
+
1143
+ # Document comparison
1144
+ # REMOVED phantom (no upstream symbol): :pdf_compare_pages (1 line)
1145
+ # REMOVED phantom (no upstream symbol): :pdf_comparison_get_similarity (1 line)
1146
+ # REMOVED phantom (no upstream symbol): :pdf_comparison_get_diff_count (1 line)
1147
+ # REMOVED phantom (no upstream symbol): :pdf_comparison_get_diff (1 line)
1148
+ # REMOVED phantom (no upstream symbol): :pdf_comparison_get_diff_type (1 line)
1149
+ # REMOVED phantom (no upstream symbol): :pdf_compare_documents (1 line)
1150
+ # REMOVED phantom (no upstream symbol): :pdf_comparison_free (1 line)
1151
+ # REMOVED phantom (no upstream symbol): :pdf_document_comparison_free (1 line)
1152
+
1153
+ # Header/footer stamping
1154
+ # REMOVED phantom (no upstream symbol): :pdf_stamp_header (1 line)
1155
+ # REMOVED phantom (no upstream symbol): :pdf_stamp_footer (1 line)
1156
+ # REMOVED phantom (no upstream symbol): :pdf_stamp_header_footer (1 line)
1157
+
1158
+ # ============================================================
1159
+ # TSA TIMESTAMP OPERATIONS (17 functions)
1160
+ # ============================================================
1161
+
1162
+ attach_function :pdf_tsa_client_create, %i[string string string int32 int32 bool bool pointer], :pointer
1163
+ attach_function :pdf_tsa_client_free, [:pointer], :void
1164
+ attach_function :pdf_tsa_request_timestamp, %i[pointer pointer size_t pointer], :pointer
1165
+ attach_function :pdf_tsa_request_timestamp_hash, %i[pointer pointer size_t int32 pointer], :pointer
1166
+ attach_function :pdf_timestamp_get_token, %i[pointer pointer pointer], :pointer
1167
+ attach_function :pdf_timestamp_get_time, %i[pointer pointer], :int64
1168
+ # Timestamp accessors: (ts, int32_t *error_code) returning owned char*.
1169
+ attach_function :pdf_timestamp_get_serial, %i[pointer pointer], :pointer
1170
+ attach_function :pdf_timestamp_get_tsa_name, %i[pointer pointer], :pointer
1171
+ attach_function :pdf_timestamp_get_policy_oid, %i[pointer pointer], :pointer
1172
+ attach_function :pdf_timestamp_get_hash_algorithm, %i[pointer pointer], :int32
1173
+ attach_function :pdf_timestamp_get_message_imprint, %i[pointer pointer pointer], :pointer
1174
+ attach_function :pdf_timestamp_verify, %i[pointer pointer], :bool
1175
+ attach_function :pdf_timestamp_free, [:pointer], :void
1176
+ attach_function :pdf_signature_add_timestamp, %i[pointer pointer pointer], :bool
1177
+ # REMOVED duplicate declaration: :pdf_signature_has_timestamp (1 line)
1178
+ attach_function :pdf_signature_get_timestamp, %i[pointer pointer], :pointer
1179
+
1180
+ # ============================================================
1181
+ # PDF/UA EXTENDED VALIDATION (3 functions)
1182
+ # ============================================================
1183
+
1184
+ attach_function :pdf_pdf_ua_warning_count, [:pointer], :int32
1185
+ attach_function :pdf_pdf_ua_get_warning, %i[pointer int32 pointer], :pointer
1186
+ attach_function :pdf_pdf_ua_get_stats, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :bool
1187
+
1188
+ # ============================================================
1189
+ # FDF/XFDF IN-MEMORY IMPORT/EXPORT (4 functions)
1190
+ # ============================================================
1191
+
1192
+ attach_function :pdf_editor_import_fdf_bytes, %i[pointer pointer size_t pointer], :int32
1193
+ attach_function :pdf_editor_import_xfdf_bytes, %i[pointer pointer size_t pointer], :int32
1194
+ attach_function :pdf_document_import_form_data, %i[pointer string pointer], :int32
1195
+ attach_function :pdf_document_export_form_data_to_bytes, %i[pointer int32 pointer pointer], :pointer
1196
+
1197
+ # ============================================================
1198
+ # TOTAL: 600+ FUNCTIONS DECLARED (100% API Coverage)
1199
+ # ============================================================
1200
+ # All core FFI functions now available for Ruby binding
1201
+
1202
+ # ============================================================
1203
+ # AUTO-REPAIR Phase 2: cdylib symbols not declared by the prepared
1204
+ # snapshot. Generic signature so the gem loads; real wrappers must
1205
+ # be added by Phase 3 (extend) and Phase 4 (test/CI).
1206
+ # ============================================================
1207
+
1208
+ attach_function :AllocString, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1209
+ attach_function :DocumentEditorFree, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1210
+ attach_function :DocumentEditorOpen, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1211
+ attach_function :DocumentEditorSave, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1212
+ attach_function :DocumentEditorSetAuthor, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1213
+ attach_function :DocumentEditorSetTitle, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1214
+ attach_function :FreeBytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1215
+ attach_function :FreeString, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1216
+ attach_function :PdfDocumentExtractText, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1217
+ attach_function :PdfDocumentFree, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1218
+ attach_function :PdfDocumentGetPageCount, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1219
+ attach_function :PdfDocumentOpen, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1220
+ attach_function :PdfDocumentToHtml, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1221
+ attach_function :PdfDocumentToMarkdown, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1222
+ attach_function :PdfDocumentToPlainText, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1223
+ attach_function :PdfFree, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1224
+ attach_function :PdfFromHtml, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1225
+ attach_function :PdfFromMarkdown, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1226
+ attach_function :PdfFromText, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1227
+ attach_function :PdfSave, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1228
+ attach_function :PdfSaveToBytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1229
+ attach_function :document_editor_apply_all_redactions, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1230
+ attach_function :document_editor_apply_page_redactions, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1231
+ attach_function :document_editor_clear_erase_regions, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1232
+ attach_function :document_editor_convert_to_pdf_a, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1233
+ attach_function :document_editor_crop_margins, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1234
+ attach_function :document_editor_delete_page, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1235
+ attach_function :document_editor_embed_file, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1236
+ attach_function :document_editor_erase_region, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1237
+ attach_function :document_editor_erase_regions, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1238
+ attach_function :document_editor_extract_pages_to_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1239
+ attach_function :document_editor_flatten_all_annotations, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1240
+ attach_function :document_editor_flatten_annotations, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1241
+ attach_function :document_editor_flatten_forms, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1242
+ attach_function :document_editor_flatten_forms_on_page, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1243
+ attach_function :document_editor_flatten_warning, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1244
+ attach_function :document_editor_flatten_warnings_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1245
+ attach_function :document_editor_get_creation_date, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1246
+ attach_function :document_editor_get_keywords, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1247
+ attach_function :document_editor_get_page_crop_box, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1248
+ attach_function :document_editor_get_page_media_box, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1249
+ attach_function :document_editor_get_page_rotation, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1250
+ attach_function :document_editor_get_producer, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1251
+ attach_function :document_editor_is_page_marked_for_flatten, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1252
+ attach_function :document_editor_is_page_marked_for_redaction, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1253
+ attach_function :document_editor_merge_from, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1254
+ attach_function :document_editor_merge_from_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1255
+ attach_function :document_editor_move_page, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1256
+ attach_function :document_editor_open_from_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1257
+ attach_function :document_editor_rotate_all_pages, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1258
+ attach_function :document_editor_rotate_page_by, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1259
+ attach_function :document_editor_save_encrypted, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1260
+ attach_function :document_editor_save_encrypted_to_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1261
+ attach_function :document_editor_save_to_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1262
+ attach_function :document_editor_save_to_bytes_with_options, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1263
+ attach_function :document_editor_set_creation_date, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1264
+ attach_function :document_editor_set_form_field_value, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1265
+ attach_function :document_editor_set_keywords, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1266
+ attach_function :document_editor_set_page_crop_box, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1267
+ attach_function :document_editor_set_page_media_box, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1268
+ attach_function :document_editor_set_page_rotation, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1269
+ attach_function :document_editor_set_producer, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1270
+ attach_function :document_editor_unmark_page_for_flatten, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1271
+ attach_function :document_editor_unmark_page_for_redaction, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1272
+ attach_function :lut_interp_linear16, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1273
+ attach_function :lut_inverse_interp16, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1274
+ attach_function :office_create_from_markdown, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1275
+ attach_function :office_document_format, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1276
+ attach_function :office_document_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1277
+ attach_function :office_document_open, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1278
+ attach_function :office_document_open_from_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1279
+ attach_function :office_document_plain_text, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1280
+ attach_function :office_document_save_as, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1281
+ attach_function :office_document_to_html, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1282
+ attach_function :office_document_to_ir_json, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1283
+ attach_function :office_document_to_markdown, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1284
+ attach_function :office_editable_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1285
+ attach_function :office_editable_open, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1286
+ attach_function :office_editable_open_from_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1287
+ attach_function :office_editable_replace_text, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1288
+ attach_function :office_editable_save, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1289
+ attach_function :office_editable_save_to_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1290
+ attach_function :office_editable_set_cell, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1291
+ attach_function :office_extract_text, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1292
+ attach_function :office_oxide_detect_format, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1293
+ attach_function :office_oxide_free_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1294
+ attach_function :office_oxide_free_string, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1295
+ attach_function :office_oxide_version, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1296
+ attach_function :office_pptx_slide_add_image, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1297
+ attach_function :office_pptx_slide_add_text, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1298
+ attach_function :office_pptx_slide_set_title, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1299
+ attach_function :office_pptx_writer_add_slide, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1300
+ attach_function :office_pptx_writer_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1301
+ attach_function :office_pptx_writer_new, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1302
+ attach_function :office_pptx_writer_save, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1303
+ attach_function :office_pptx_writer_set_presentation_size, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1304
+ attach_function :office_pptx_writer_to_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1305
+ attach_function :office_to_html, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1306
+ attach_function :office_to_markdown, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1307
+ attach_function :office_xlsx_sheet_merge_cells, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1308
+ attach_function :office_xlsx_sheet_set_cell, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1309
+ attach_function :office_xlsx_sheet_set_cell_styled, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1310
+ attach_function :office_xlsx_sheet_set_column_width, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1311
+ attach_function :office_xlsx_writer_add_sheet, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1312
+ attach_function :office_xlsx_writer_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1313
+ attach_function :office_xlsx_writer_new, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1314
+ attach_function :office_xlsx_writer_save, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1315
+ attach_function :office_xlsx_writer_to_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1316
+ attach_function :pdf_certificate_load_from_pem, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1317
+ attach_function :pdf_create_renderer, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1318
+ attach_function :pdf_document_authenticate, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1319
+ attach_function :pdf_document_builder_a4_page, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1320
+ attach_function :pdf_document_builder_build, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1321
+ attach_function :pdf_document_builder_create, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1322
+ attach_function :pdf_document_builder_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1323
+ attach_function :pdf_document_builder_language, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1324
+ attach_function :pdf_document_builder_letter_page, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1325
+ attach_function :pdf_document_builder_on_open, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1326
+ attach_function :pdf_document_builder_page, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1327
+ attach_function :pdf_document_builder_register_embedded_font, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1328
+ attach_function :pdf_document_builder_role_map, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1329
+ attach_function :pdf_document_builder_save, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1330
+ attach_function :pdf_document_builder_save_encrypted, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1331
+ attach_function :pdf_document_builder_set_author, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1332
+ attach_function :pdf_document_builder_set_creator, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1333
+ attach_function :pdf_document_builder_set_keywords, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1334
+ attach_function :pdf_document_builder_set_subject, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1335
+ attach_function :pdf_document_builder_set_title, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1336
+ attach_function :pdf_document_builder_tagged_pdf_ua1, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1337
+ attach_function :pdf_document_builder_to_bytes_encrypted, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1338
+ attach_function :pdf_document_classify_document, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1339
+ attach_function :pdf_document_classify_page, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1340
+ attach_function :pdf_document_erase_artifacts, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1341
+ attach_function :pdf_document_erase_footer, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1342
+ attach_function :pdf_document_erase_header, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1343
+ attach_function :pdf_document_extract_all_text, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1344
+ attach_function :pdf_document_extract_chars, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1345
+ attach_function :pdf_document_extract_images_in_rect, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1346
+ attach_function :pdf_document_extract_lines_in_rect, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1347
+ attach_function :pdf_document_extract_page_auto, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1348
+ attach_function :pdf_document_extract_paths, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1349
+ attach_function :pdf_document_extract_tables, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1350
+ attach_function :pdf_document_extract_tables_in_rect, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1351
+ attach_function :pdf_document_extract_text_auto, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1352
+ attach_function :pdf_document_extract_text_in_rect, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1353
+ attach_function :pdf_document_extract_text_lines, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1354
+ attach_function :pdf_document_extract_words, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1355
+ attach_function :pdf_document_extract_words_in_rect, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1356
+ attach_function :pdf_document_get_dss, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1357
+ # FfiFormFieldList *pdf_document_get_form_fields(PdfDocument *handle, int32_t *error_code)
1358
+ attach_function :pdf_document_get_form_fields, %i[pointer pointer], :pointer, blocking: false
1359
+ attach_function :pdf_document_get_outline, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1360
+ attach_function :pdf_document_get_page_annotations, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1361
+ attach_function :pdf_document_get_page_labels, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1362
+ attach_function :pdf_document_get_source_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1363
+ attach_function :pdf_document_get_xmp_metadata, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1364
+ attach_function :pdf_document_has_timestamp, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1365
+ # PdfDocument *pdf_document_open_from_bytes(const uint8_t *data, uintptr_t len, int32_t *error_code)
1366
+ attach_function :pdf_document_open_from_bytes, %i[pointer size_t pointer], :pointer, blocking: false
1367
+ attach_function :pdf_document_open_from_docx_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1368
+ attach_function :pdf_document_open_from_pptx_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1369
+ attach_function :pdf_document_open_from_xlsx_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1370
+ attach_function :pdf_document_open_with_password, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1371
+ attach_function :pdf_document_plan_split_by_bookmarks, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1372
+ attach_function :pdf_document_remove_artifacts, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1373
+ attach_function :pdf_document_remove_footers, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1374
+ attach_function :pdf_document_remove_headers, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1375
+ attach_function :pdf_document_to_docx, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1376
+ # Whole-document text conversions: char *fn(PdfDocument*, int32_t*).
1377
+ # Returned char* is owned (free with free_string via StringMarshaller).
1378
+ attach_function :pdf_document_to_html_all, %i[pointer pointer], :pointer, blocking: false
1379
+ attach_function :pdf_document_to_plain_text_all, %i[pointer pointer], :pointer, blocking: false
1380
+ attach_function :pdf_document_to_pptx, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1381
+ attach_function :pdf_document_to_xlsx, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1382
+ # int32_t pdf_document_verify_all_signatures(const void *handle, int32_t *error_code)
1383
+ attach_function :pdf_document_verify_all_signatures, %i[pointer pointer], :int32, blocking: false
1384
+ attach_function :pdf_dss_cert_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1385
+ attach_function :pdf_dss_crl_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1386
+ attach_function :pdf_dss_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1387
+ attach_function :pdf_dss_get_cert, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1388
+ attach_function :pdf_dss_get_crl, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1389
+ attach_function :pdf_dss_get_ocsp, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1390
+ attach_function :pdf_dss_ocsp_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1391
+ attach_function :pdf_dss_vri_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1392
+ attach_function :pdf_embedded_font_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1393
+ attach_function :pdf_embedded_font_from_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1394
+ attach_function :pdf_embedded_font_from_file, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1395
+ attach_function :pdf_from_html_css, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1396
+ attach_function :pdf_from_html_css_with_fonts, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1397
+ attach_function :pdf_from_image, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1398
+ attach_function :pdf_from_image_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1399
+ attach_function :pdf_get_rendered_image_data, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1400
+ attach_function :pdf_get_rendered_image_height, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1401
+ attach_function :pdf_get_rendered_image_width, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1402
+ attach_function :pdf_merge, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1403
+ attach_function :pdf_oxide_annotation_get_border_width, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1404
+ attach_function :pdf_oxide_annotation_get_content, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1405
+ attach_function :pdf_oxide_annotation_get_modification_date, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1406
+ attach_function :pdf_oxide_annotation_get_subtype, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1407
+ attach_function :pdf_oxide_annotation_is_hidden, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1408
+ attach_function :pdf_oxide_annotation_is_marked_deleted, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1409
+ attach_function :pdf_oxide_annotation_is_printable, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1410
+ attach_function :pdf_oxide_annotation_is_read_only, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1411
+ attach_function :pdf_oxide_annotations_to_json, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1412
+ attach_function :pdf_oxide_char_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1413
+ attach_function :pdf_oxide_char_get_bbox, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1414
+ attach_function :pdf_oxide_char_get_char, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1415
+ attach_function :pdf_oxide_char_get_font_name, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1416
+ attach_function :pdf_oxide_char_get_font_size, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1417
+ attach_function :pdf_oxide_char_list_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1418
+ attach_function :pdf_oxide_crypto_active_provider, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1419
+ attach_function :pdf_oxide_crypto_cbom, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1420
+ attach_function :pdf_oxide_crypto_fips_available, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1421
+ attach_function :pdf_oxide_crypto_inventory, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1422
+ attach_function :pdf_oxide_crypto_policy, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1423
+ attach_function :pdf_oxide_crypto_set_policy, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1424
+ attach_function :pdf_oxide_crypto_use_fips, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1425
+ attach_function :pdf_oxide_element_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1426
+ attach_function :pdf_oxide_element_get_rect, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1427
+ attach_function :pdf_oxide_element_get_text, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1428
+ attach_function :pdf_oxide_element_get_type, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1429
+ attach_function :pdf_oxide_elements_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1430
+ attach_function :pdf_oxide_elements_to_json, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1431
+ attach_function :pdf_oxide_fonts_to_json, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1432
+ attach_function :pdf_oxide_form_field_get_type, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1433
+ attach_function :pdf_oxide_form_field_get_value, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1434
+ attach_function :pdf_oxide_form_field_is_readonly, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1435
+ attach_function :pdf_oxide_form_field_is_required, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1436
+ attach_function :pdf_oxide_get_log_level, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1437
+ attach_function :pdf_oxide_highlight_annotation_get_quad_point, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1438
+ attach_function :pdf_oxide_highlight_annotation_get_quad_points_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1439
+ attach_function :pdf_oxide_line_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1440
+ attach_function :pdf_oxide_line_get_bbox, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1441
+ attach_function :pdf_oxide_line_get_text, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1442
+ attach_function :pdf_oxide_line_get_word_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1443
+ attach_function :pdf_oxide_line_list_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1444
+ attach_function :pdf_oxide_link_annotation_get_uri, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1445
+ attach_function :pdf_oxide_model_manifest, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1446
+ attach_function :pdf_oxide_path_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1447
+ attach_function :pdf_oxide_path_get_bbox, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1448
+ attach_function :pdf_oxide_path_get_operation_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1449
+ attach_function :pdf_oxide_path_get_stroke_width, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1450
+ attach_function :pdf_oxide_path_has_fill, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1451
+ attach_function :pdf_oxide_path_has_stroke, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1452
+ attach_function :pdf_oxide_path_list_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1453
+ attach_function :pdf_oxide_prefetch_available, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1454
+ attach_function :pdf_oxide_prefetch_models, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1455
+ attach_function :pdf_oxide_search_results_to_json, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1456
+ attach_function :pdf_oxide_set_log_level, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1457
+ attach_function :pdf_oxide_table_get_cell_text, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1458
+ attach_function :pdf_oxide_table_has_header, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1459
+ attach_function :pdf_oxide_text_annotation_get_icon_name, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1460
+ attach_function :pdf_oxide_word_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1461
+ attach_function :pdf_oxide_word_get_bbox, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1462
+ attach_function :pdf_oxide_word_get_font_name, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1463
+ attach_function :pdf_oxide_word_get_font_size, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1464
+ attach_function :pdf_oxide_word_get_text, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1465
+ attach_function :pdf_oxide_word_is_bold, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1466
+ attach_function :pdf_oxide_word_list_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1467
+ attach_function :pdf_page_builder_at, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1468
+ attach_function :pdf_page_builder_barcode_1d, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1469
+ attach_function :pdf_page_builder_barcode_qr, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1470
+ attach_function :pdf_page_builder_checkbox, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1471
+ attach_function :pdf_page_builder_columns, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1472
+ attach_function :pdf_page_builder_combo_box, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1473
+ attach_function :pdf_page_builder_done, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1474
+ attach_function :pdf_page_builder_field_calculate, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1475
+ attach_function :pdf_page_builder_field_format, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1476
+ attach_function :pdf_page_builder_field_keystroke, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1477
+ attach_function :pdf_page_builder_field_validate, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1478
+ # int32_t pdf_page_builder_filled_rect(FfiPageBuilder *handle, float x, float y, float w, float h, float r, float g, float b, int32_t *error_code)
1479
+ attach_function :pdf_page_builder_filled_rect,
1480
+ %i[pointer float float float float float float float pointer], :int32,
1481
+ blocking: false
1482
+ attach_function :pdf_page_builder_font, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1483
+ attach_function :pdf_page_builder_footnote, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1484
+ attach_function :pdf_page_builder_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1485
+ attach_function :pdf_page_builder_freetext, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1486
+ attach_function :pdf_page_builder_heading, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1487
+ attach_function :pdf_page_builder_highlight, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1488
+ attach_function :pdf_page_builder_horizontal_rule, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1489
+ attach_function :pdf_page_builder_image, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1490
+ attach_function :pdf_page_builder_image_artifact, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1491
+ # int32_t pdf_page_builder_image_with_alt(FfiPageBuilder *handle, const uint8_t *bytes, uintptr_t len, float x, float y, float w, float h, const char *alt_text, int32_t *error_code)
1492
+ attach_function :pdf_page_builder_image_with_alt,
1493
+ %i[pointer pointer size_t float float float float string pointer], :int32,
1494
+ blocking: false
1495
+ attach_function :pdf_page_builder_inline, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1496
+ attach_function :pdf_page_builder_inline_bold, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1497
+ attach_function :pdf_page_builder_inline_color, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1498
+ attach_function :pdf_page_builder_inline_italic, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1499
+ attach_function :pdf_page_builder_line, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1500
+ attach_function :pdf_page_builder_link_javascript, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1501
+ attach_function :pdf_page_builder_link_named, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1502
+ attach_function :pdf_page_builder_link_page, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1503
+ attach_function :pdf_page_builder_link_url, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1504
+ attach_function :pdf_page_builder_new_page_same_size, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1505
+ attach_function :pdf_page_builder_newline, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1506
+ attach_function :pdf_page_builder_on_close, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1507
+ attach_function :pdf_page_builder_on_open, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1508
+ attach_function :pdf_page_builder_paragraph, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1509
+ attach_function :pdf_page_builder_push_button, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1510
+ attach_function :pdf_page_builder_radio_group, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1511
+ attach_function :pdf_page_builder_rect, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1512
+ attach_function :pdf_page_builder_signature_field, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1513
+ attach_function :pdf_page_builder_space, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1514
+ attach_function :pdf_page_builder_squiggly, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1515
+ attach_function :pdf_page_builder_stamp, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1516
+ attach_function :pdf_page_builder_sticky_note, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1517
+ attach_function :pdf_page_builder_sticky_note_at, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1518
+ attach_function :pdf_page_builder_streaming_table_batch_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1519
+ attach_function :pdf_page_builder_streaming_table_begin, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1520
+ attach_function :pdf_page_builder_streaming_table_begin_v2, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1521
+ attach_function :pdf_page_builder_streaming_table_finish, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1522
+ attach_function :pdf_page_builder_streaming_table_flush, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1523
+ attach_function :pdf_page_builder_streaming_table_pending_row_count, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1524
+ attach_function :pdf_page_builder_streaming_table_push_row, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1525
+ attach_function :pdf_page_builder_streaming_table_push_row_v2, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1526
+ attach_function :pdf_page_builder_streaming_table_set_batch_size, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1527
+ attach_function :pdf_page_builder_strikeout, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1528
+ attach_function :pdf_page_builder_stroke_line, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1529
+ attach_function :pdf_page_builder_stroke_line_dashed, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1530
+ attach_function :pdf_page_builder_stroke_rect, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1531
+ attach_function :pdf_page_builder_stroke_rect_dashed, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1532
+ attach_function :pdf_page_builder_table, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1533
+ attach_function :pdf_page_builder_text, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1534
+ attach_function :pdf_page_builder_text_field, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1535
+ attach_function :pdf_page_builder_text_in_rect, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1536
+ attach_function :pdf_page_builder_underline, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1537
+ attach_function :pdf_page_builder_watermark, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1538
+ attach_function :pdf_page_builder_watermark_confidential, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1539
+ attach_function :pdf_page_builder_watermark_draft, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1540
+ attach_function :pdf_page_get_art_box, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1541
+ attach_function :pdf_page_get_bleed_box, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1542
+ attach_function :pdf_page_get_crop_box, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1543
+ attach_function :pdf_page_get_elements, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1544
+ attach_function :pdf_page_get_media_box, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1545
+ attach_function :pdf_page_get_rotation, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1546
+ attach_function :pdf_page_get_trim_box, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1547
+ attach_function :pdf_render_page_raw, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1548
+ attach_function :pdf_render_page_with_options, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1549
+ attach_function :pdf_renderer_free, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1550
+ attach_function :pdf_save_rendered_image, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1551
+ attach_function :pdf_sign_bytes, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1552
+ attach_function :pdf_sign_bytes_pades, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1553
+ attach_function :pdf_sign_bytes_pades_opts, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1554
+ attach_function :pdf_signature_get_pades_level, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1555
+ attach_function :pdf_signature_get_signer_name, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1556
+ attach_function :pdf_signature_get_signing_location, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1557
+ attach_function :pdf_signature_get_signing_reason, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1558
+ attach_function :pdf_signature_get_signing_time, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1559
+ attach_function :pdf_signature_verify_detached, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1560
+ attach_function :pdf_timestamp_parse, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1561
+ # FfiPdfAResults *pdf_validate_pdf_a_level(PdfDocument *document, int32_t level, int32_t *error_code)
1562
+ attach_function :pdf_validate_pdf_a_level, %i[pointer int32 pointer], :pointer, blocking: false
1563
+ # FfiPdfXResults *pdf_validate_pdf_x_level(PdfDocument *document, int32_t level, int32_t *error_code)
1564
+ attach_function :pdf_validate_pdf_x_level, %i[pointer int32 pointer], :pointer, blocking: false
1565
+ attach_function :qcms_enable_iccv4, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1566
+ attach_function :qcms_profile_is_bogus, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1567
+ attach_function :qcms_profile_precache_output_transform, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1568
+ attach_function :qcms_transform_data_bgra_out_lut, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1569
+ attach_function :qcms_transform_data_bgra_out_lut_precache, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1570
+ attach_function :qcms_transform_data_rgb_out_lut, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1571
+ attach_function :qcms_transform_data_rgb_out_lut_precache, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1572
+ attach_function :qcms_transform_data_rgba_out_lut, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1573
+ attach_function :qcms_transform_data_rgba_out_lut_precache, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1574
+ # The `_avx` and `_sse2` qcms transforms are x86-only intrinsics
1575
+ # builds; they are absent on aarch64-{darwin,linux} cdylibs.
1576
+ # qcms internally selects the right impl, so the Ruby side never
1577
+ # calls these directly — wrap in a tolerant attach so the gem
1578
+ # loads on ARM. (Public C ABI never exposes these; they leak
1579
+ # from the qcms crate's `#[no_mangle]` symbols.)
1580
+ %i[qcms_transform_data_bgra_out_lut_avx qcms_transform_data_bgra_out_lut_sse2
1581
+ qcms_transform_data_rgb_out_lut_avx qcms_transform_data_rgb_out_lut_sse2
1582
+ qcms_transform_data_rgba_out_lut_avx qcms_transform_data_rgba_out_lut_sse2].each do |sym|
1583
+ attach_function sym, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1584
+ rescue ::FFI::NotFoundError
1585
+ # Symbol absent on this arch — never invoked from Ruby, skip silently.
1586
+ end
1587
+ attach_function :qcms_transform_release, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1588
+ attach_function :qcms_white_point_sRGB, %i[pointer pointer pointer pointer pointer pointer pointer pointer], :pointer, blocking: false
1589
+
1590
+ # ============================================================
1591
+ # PHASE 2 REPAIR: real signatures for symbols the Ruby wrappers
1592
+ # actively call. FFI's `attach_function` lets a later declaration
1593
+ # override an earlier generic skeleton with the correct signature.
1594
+ # ============================================================
1595
+
1596
+ # PDF creation entry points (replace Creator stub) - returns Pdf*.
1597
+ attach_function :pdf_from_markdown, %i[string pointer], :pointer
1598
+ attach_function :pdf_from_html, %i[string pointer], :pointer
1599
+ attach_function :pdf_from_text, %i[string pointer], :pointer
1600
+ attach_function :pdf_from_image, %i[string pointer], :pointer
1601
+ attach_function :pdf_from_image_bytes, %i[pointer size_t pointer], :pointer
1602
+
1603
+ # PDF handle save / inspect / free.
1604
+ attach_function :pdf_save, %i[pointer string pointer], :int32
1605
+ attach_function :pdf_save_to_bytes, %i[pointer pointer pointer], :pointer
1606
+ attach_function :pdf_get_page_count, %i[pointer pointer], :int32
1607
+
1608
+ # Free helpers — kept explicit so StringMarshaller.free_c_string
1609
+ # resolves to a real ABI signature.
1610
+ attach_function :pdf_free, [:pointer], :void
1611
+ attach_function :free_bytes, [:pointer], :void
1612
+
1613
+ # ============================================================
1614
+ # PHASE 3 EXTEND: real signatures for v0.3.50-v0.3.54 features.
1615
+ # Each entry below replaces the placeholder 8-pointer skeleton
1616
+ # earlier in the file (FFI permits later attach_function calls
1617
+ # to override the prior declaration).
1618
+ # ============================================================
1619
+
1620
+ # Auto-extraction (#519, v0.3.51) — JSON-returning classifiers
1621
+ # plus the text-only auto-router. All return malloc'd char*;
1622
+ # free with pdf_free / free_string.
1623
+ attach_function :pdf_document_classify_page, %i[pointer int32 pointer], :pointer
1624
+ attach_function :pdf_document_classify_document, %i[pointer pointer], :pointer
1625
+ attach_function :pdf_document_extract_text_auto, %i[pointer int32 pointer], :pointer
1626
+ attach_function :pdf_document_extract_page_auto, %i[pointer int32 string pointer], :pointer
1627
+
1628
+ # Models subsystem (#519 provisioning trio).
1629
+ attach_function :pdf_oxide_prefetch_models, %i[string pointer], :pointer
1630
+ attach_function :pdf_oxide_model_manifest, [], :pointer
1631
+ attach_function :pdf_oxide_prefetch_available, [], :int32
1632
+
1633
+ # Office converter (#159, v0.3.48). All three return a PdfDocument*.
1634
+ attach_function :pdf_document_open_from_docx_bytes, %i[pointer size_t pointer], :pointer
1635
+ attach_function :pdf_document_open_from_pptx_bytes, %i[pointer size_t pointer], :pointer
1636
+ attach_function :pdf_document_open_from_xlsx_bytes, %i[pointer size_t pointer], :pointer
1637
+
1638
+ # Split-by-bookmarks plan (v0.3.50). Returns a JSON plan as
1639
+ # char*; the consumer interprets the segment list and feeds
1640
+ # each {start_page, end_page} pair to extract-page utilities.
1641
+ attach_function :pdf_document_plan_split_by_bookmarks,
1642
+ %i[pointer string pointer], :pointer
1643
+
1644
+ # Destructive redaction (#231, v0.3.50). Operates on a
1645
+ # DocumentEditor* handle (NOT a PdfDocument*).
1646
+ attach_function :pdf_redaction_add,
1647
+ %i[pointer size_t
1648
+ double double double double
1649
+ double double double
1650
+ pointer],
1651
+ :int32
1652
+ attach_function :pdf_redaction_count, %i[pointer size_t pointer], :int32
1653
+ attach_function :pdf_redaction_apply,
1654
+ %i[pointer bool double double double pointer], :int32
1655
+ attach_function :pdf_redaction_scrub_metadata, %i[pointer pointer], :int32
1656
+
1657
+ # PAdES signing — the 5-arg shim (v0.3.51 #517 follow-up to
1658
+ # v0.3.50 #235). The 18-arg legacy entry is still available
1659
+ # under pdf_sign_bytes_pades but the shim is canonical for all
1660
+ # bindings (purego cannot register the legacy form).
1661
+ attach_function :pdf_sign_bytes_pades_opts,
1662
+ %i[pointer size_t pointer pointer pointer], :pointer
1663
+
1664
+ # PAdES level inspection.
1665
+ attach_function :pdf_signature_get_pades_level, %i[pointer pointer], :int32
1666
+ attach_function :pdf_document_has_timestamp, %i[pointer pointer], :int32
1667
+
1668
+ # PAdES level enum codes (frozen). These are the int32 values
1669
+ # `pdf_signature_get_pades_level` returns and the `level`
1670
+ # field of `PadesSignOptionsC` takes. Keep the names mirrored
1671
+ # against the Rust `PadesLevel` enum.
1672
+ PADES_LEVEL_B = 0
1673
+ PADES_LEVEL_T = 1
1674
+ PADES_LEVEL_LT = 2
1675
+ PADES_LEVEL_LTA = 3
1676
+
1677
+ # DocumentEditor lifecycle — needed by RedactionManager so it
1678
+ # can apply redactions destructively to an editor handle and
1679
+ # save the resulting bytes. The existing skeletons use generic
1680
+ # 8-pointer signatures; these declarations refine them.
1681
+ attach_function :document_editor_open, %i[string pointer], :pointer
1682
+ attach_function :document_editor_open_from_bytes,
1683
+ %i[pointer size_t pointer], :pointer
1684
+ attach_function :document_editor_free, [:pointer], :void
1685
+ attach_function :document_editor_save, %i[pointer string pointer], :int32
1686
+ attach_function :document_editor_save_to_bytes,
1687
+ %i[pointer pointer pointer], :pointer
1688
+ attach_function :document_editor_apply_page_redactions,
1689
+ %i[pointer size_t pointer], :int32
1690
+ attach_function :document_editor_apply_all_redactions,
1691
+ %i[pointer pointer], :int32
1692
+ end
1693
+ end
1694
+ end