Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
tree: b9da8ebedd
Fetching contributors…

Cannot retrieve contributors at this time

59 lines (49 sloc) 1.81 kb
###
PDFReference - represents a reference to another object in the PDF object heirarchy
By Devon Govett
###
zlib = require 'zlib'
class PDFReference
constructor: (@id, @data = {}) ->
@gen = 0
@stream = null
@finalizedStream = null
object: (compress, fn) ->
unless @finalizedStream?
return @finalize compress, => @object compress, fn
out = ["#{@id} #{@gen} obj"]
out.push PDFObject.convert(@data)
if @stream
out.push "stream"
out.push @finalizedStream
out.push "endstream"
out.push "endobj"
fn out.join '\n'
add: (s) ->
@stream ?= []
@stream.push if Buffer.isBuffer(s) then s.toString('binary') else s
finalize: (compress = false, fn) ->
# cache the finalized stream
if @stream
data = @stream.join '\n'
if compress and not @data.Filter
# create a byte array instead of passing a string to the Buffer
# fixes a weird unicode bug.
data = new Buffer(data.charCodeAt(i) for i in [0...data.length])
zlib.deflate data, (err, compressedData) =>
throw err if err
@finalizedStream = compressedData.toString 'binary'
@data.Filter = 'FlateDecode'
@data.Length = @finalizedStream.length
fn()
else
@finalizedStream = data
@data.Length = @finalizedStream.length
fn()
else
@finalizedStream = ''
fn()
toString: ->
"#{@id} #{@gen} R"
module.exports = PDFReference
PDFObject = require './object'
Jump to Line
Something went wrong with that request. Please try again.