Module: PdfLibrary
- Defined in:
- lib/majorsilence_pdf/pdf_native.rb
Class Method Summary collapse
- .last_error_str(fns) ⇒ Object
-
.load(lib_path) ⇒ Object
Load the pdfnative shared library and initialize the engine.
Class Method Details
.last_error_str(fns) ⇒ Object
144 145 146 147 148 149 |
# File 'lib/majorsilence_pdf/pdf_native.rb', line 144 def self.last_error_str(fns) ptr = fns[:pdf_last_error].call return 'unknown error' if ptr.nil? || ptr.zero? Fiddle::Pointer.new(ptr).to_s end |
.load(lib_path) ⇒ Object
Load the pdfnative shared library and initialize the engine. Returns a Hash of bound Fiddle::Function objects. Call this once per process before creating any PdfDocument instances.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/majorsilence_pdf/pdf_native.rb', line 73 def self.load(lib_path) lib_path = File.(lib_path) lib_dir = File.dirname(lib_path) ENV['PDFNATIVE_LIB_DIR'] = lib_dir # Pre-load all shared libraries in the directory with RTLD_GLOBAL so that # .NET 10+ runtime components are globally visible. ext = RUBY_PLATFORM =~ /darwin/ ? '*.dylib' : '*.so' Dir.glob(File.join(lib_dir, ext)).sort.each do |f| begin Fiddle.dlopen(f) rescue Fiddle::DLError; end end handle = Fiddle.dlopen(lib_path) fns = { pdf_init: Fiddle::Function.new(handle['pdf_init'], [], Fiddle::TYPE_INT), pdf_doc_create: Fiddle::Function.new(handle['pdf_doc_create'], [], Fiddle::TYPE_VOIDP), pdf_doc_set_title: Fiddle::Function.new(handle['pdf_doc_set_title'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT), pdf_doc_set_author: Fiddle::Function.new(handle['pdf_doc_set_author'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT), pdf_doc_set_subject: Fiddle::Function.new(handle['pdf_doc_set_subject'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT), pdf_doc_set_creator: Fiddle::Function.new(handle['pdf_doc_set_creator'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT), pdf_doc_set_security: Fiddle::Function.new(handle['pdf_doc_set_security'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP, Fiddle::TYPE_INT, Fiddle::TYPE_INT], Fiddle::TYPE_INT), pdf_doc_add_page: Fiddle::Function.new(handle['pdf_doc_add_page'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT], Fiddle::TYPE_VOIDP), pdf_doc_save_file: Fiddle::Function.new(handle['pdf_doc_save_file'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT), pdf_doc_close: Fiddle::Function.new(handle['pdf_doc_close'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_VOID), pdf_canvas_draw_text: Fiddle::Function.new(handle['pdf_canvas_draw_text'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT), pdf_canvas_draw_textbox: Fiddle::Function.new(handle['pdf_canvas_draw_textbox'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_VOIDP, Fiddle::TYPE_FLOAT], Fiddle::TYPE_INT), pdf_canvas_draw_line: Fiddle::Function.new(handle['pdf_canvas_draw_line'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_FLOAT], Fiddle::TYPE_INT), pdf_canvas_draw_rect: Fiddle::Function.new(handle['pdf_canvas_draw_rect'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_INT], Fiddle::TYPE_INT), pdf_canvas_draw_ellipse: Fiddle::Function.new(handle['pdf_canvas_draw_ellipse'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_INT], Fiddle::TYPE_INT), pdf_canvas_draw_table: Fiddle::Function.new(handle['pdf_canvas_draw_table'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT], Fiddle::TYPE_INT), pdf_canvas_add_link: Fiddle::Function.new(handle['pdf_canvas_add_link'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT), pdf_canvas_close: Fiddle::Function.new(handle['pdf_canvas_close'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_VOID), pdf_style_create: Fiddle::Function.new(handle['pdf_style_create'], [], Fiddle::TYPE_VOIDP), pdf_style_set_font_family:Fiddle::Function.new(handle['pdf_style_set_font_family'],[Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT), pdf_style_set_font_file: Fiddle::Function.new(handle['pdf_style_set_font_file'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT), pdf_style_set_size: Fiddle::Function.new(handle['pdf_style_set_size'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_FLOAT], Fiddle::TYPE_INT), pdf_style_set_color: Fiddle::Function.new(handle['pdf_style_set_color'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT], Fiddle::TYPE_INT), pdf_style_set_bold: Fiddle::Function.new(handle['pdf_style_set_bold'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_INT], Fiddle::TYPE_INT), pdf_style_set_italic: Fiddle::Function.new(handle['pdf_style_set_italic'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_INT], Fiddle::TYPE_INT), pdf_style_set_alignment: Fiddle::Function.new(handle['pdf_style_set_alignment'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_INT], Fiddle::TYPE_INT), pdf_style_set_decoration: Fiddle::Function.new(handle['pdf_style_set_decoration'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_INT], Fiddle::TYPE_INT), pdf_style_close: Fiddle::Function.new(handle['pdf_style_close'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_VOID), pdf_table_create: Fiddle::Function.new(handle['pdf_table_create'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP), pdf_table_set_header_bg: Fiddle::Function.new(handle['pdf_table_set_header_bg'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT], Fiddle::TYPE_INT), pdf_table_set_alternate_bg:Fiddle::Function.new(handle['pdf_table_set_alternate_bg'],[Fiddle::TYPE_VOIDP, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT], Fiddle::TYPE_INT), pdf_table_set_border: Fiddle::Function.new(handle['pdf_table_set_border'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_FLOAT], Fiddle::TYPE_INT), pdf_table_set_cell_padding:Fiddle::Function.new(handle['pdf_table_set_cell_padding'],[Fiddle::TYPE_VOIDP, Fiddle::TYPE_FLOAT], Fiddle::TYPE_INT), pdf_table_stage_cell: Fiddle::Function.new(handle['pdf_table_stage_cell'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT), pdf_table_commit_row: Fiddle::Function.new(handle['pdf_table_commit_row'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT), pdf_table_close: Fiddle::Function.new(handle['pdf_table_close'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_VOID), pdf_merge_create: Fiddle::Function.new(handle['pdf_merge_create'], [], Fiddle::TYPE_VOIDP), pdf_merge_add_bytes: Fiddle::Function.new(handle['pdf_merge_add_bytes'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP, Fiddle::TYPE_INT], Fiddle::TYPE_INT), pdf_merge_save_file: Fiddle::Function.new(handle['pdf_merge_save_file'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT), pdf_merge_close: Fiddle::Function.new(handle['pdf_merge_close'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_VOID), pdf_last_error: Fiddle::Function.new(handle['pdf_last_error'], [], Fiddle::TYPE_VOIDP), } ret = fns[:pdf_init].call raise "pdf_init failed: #{last_error_str(fns)}" unless ret.zero? fns end |