Class: JotPDF::Core::DocumentContext
Instance Method Summary
collapse
#initialize, #objects
Instance Method Details
#alloc_obj ⇒ Object
220
221
222
|
# File 'lib/jot_pdf/core.rb', line 220
def alloc_obj
@writer.new_object
end
|
#dsl(&block) ⇒ Object
272
273
274
|
# File 'lib/jot_pdf/core.rb', line 272
def dsl(&block)
Docile.dsl_eval(self, &block)
end
|
215
216
217
218
|
# File 'lib/jot_pdf/core.rb', line 215
def (version = "1.4")
@writer << "%PDF-#{version}\n"
@writer << "%\xff\xff\xff\xff\n"
end
|
#obj(object_ref = nil, &block) ⇒ Object
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
|
# File 'lib/jot_pdf/core.rb', line 224
def obj(object_ref = nil, &block)
object_ref ||= @writer.new_object
@writer.update_object_entry(object_ref)
@writer << "#{object_ref.number} #{object_ref.generation} obj"
if block
ObjectWriteContext.new(@writer).dsl(&block)
@writer << "\nendobj\n"
object_ref
else
finalizer = proc { @writer << "\nendobj\n"; object_ref }
ObjectInterm.new(writer: @writer, finalizer:)
end
end
|
#trailer(&block) ⇒ Object
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
|
# File 'lib/jot_pdf/core.rb', line 256
def trailer(&block)
@writer << "trailer\n<<\n"
DictionaryWriteContext.new(@writer).dsl do
entry("Size").of_num objects.size
entry("Prev").of_num @prev_xref_offset if @prev_xref_offset
dsl(&block)
end
@writer << ">>\n"
@writer << "startxref\n"
@writer << @xref_offset.to_s
@writer << "\n"
@writer << "%%EOF\n"
end
|
#xref ⇒ Object
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
|
# File 'lib/jot_pdf/core.rb', line 240
def xref
@prev_xref_offset = @xref_offset
@xref_offset = @writer.offset
@writer << "xref\n"
section_objs = @writer.finish_section
section_objs.sort.slice_when { |prev, curr| curr != prev.next }.each do |subsection|
@writer << "#{subsection.first} #{subsection.size}\n"
subsection.each do |n|
object = objects[n]
u = object.usage == :in_use ? "n" : "f"
@writer << "#{object.offset.to_s.rjust(10, "0")} #{object.generation.to_s.rjust(5, "0")} #{u} \n"
end
end
end
|