Class: Chem::PDFWriter

Inherits:
Object
  • Object
show all
Includes:
Writer
Defined in:
lib/chem/db/pdf.rb

Constant Summary collapse

PDFHeader =
"%PDF-1.3\n1 0 obj\n<< /Type /Catalog\n/Outlines 2 0 R\n/Pages 3 0 R\n>>\nendobj\n2 0 obj\n<< /Type /Outlines\n/Count 0\n>>\nendobj\n3 0 obj\n<< /Type /Pages\n/Kids [ 4 0 R]\n/Count 1\n>>\nendobj\n4 0 obj\n<< /Type /Page\n/Parent 3 0 R\n"
PDFMiddle =
"/Contents 5 0 R\n/Resources << /ProcSet 6 0 R\n/Font << /F1 7 0 R >>\n>>\n>>\nendobj\n5 0 obj\n"
PDFFooter =
"endstream\nendobj\n6 0 obj\n[ /PDF /Text ]\nendobj\n7 0 obj\n<< /Type /Font\n/Subtype /Type1\n/Name /F1\n/BaseFont /Helvetica\n/Encoding /MacRomanEncoding\n>>\nendobj\nxref\n0 8\n0000000000 65535 f\n0000000009 00000 n\n0000000074 00000 n\n0000000120 00000 n\n0000000179 00000 n\n0000000364 00000 n\n0000000466 00000 n\n0000000496 00000 n\ntrailer\n<< /Size 8\n/Root 1 0 R\n>>\nstartxref\n625\n%%EOF\n"

Instance Method Summary collapse

Methods included from Writer

#draw_body, #fbox, #to_256

Constructor Details

#initialize(mol, params) ⇒ PDFWriter

Returns a new instance of PDFWriter.



76
77
78
79
80
81
82
# File 'lib/chem/db/pdf.rb', line 76

def initialize mol, params
  params[:size]        ||= [180, 200]
  params[:orig_point]  ||= [0, 0]
  params[:margin]      ||= [10, 10]
  @default_pointsize = (params[:pointsize] ? params[:pointsize] : 14)
  super
end

Instance Method Details

#fill(nodes, color) ⇒ Object



91
92
93
94
95
96
97
98
99
100
# File 'lib/chem/db/pdf.rb', line 91

def fill(nodes, color)
  @vect << "0 w"                       # setline width
  @vect << color.join(' ') + " RG"     # set setrgbcolor
  @vect << "%d %d m" % [nodes[0][0], nodes[0][1]]
  nodes[1..-1].each do |vect|
    @vect << "%d %d l" % [vect[0], vect[1]]
  end
  @vect << "b"
  @vect << "1 w"                       # setline width
end

#line(from, to, color) ⇒ Object



84
85
86
87
88
89
# File 'lib/chem/db/pdf.rb', line 84

def line(from, to, color)
  @vect << color.join(' ') + " RG"
  @vect << "#{from[0]} #{from[1]} m"
  @vect << "#{to[0]} #{to[1]} l"
  @vect << "S"
end

#save(out) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/chem/db/pdf.rb', line 112

def save out
  @out = out
  @params[:font] ||= 12.0
  @params[:orig_point] ||= [0, 0]
  @vect = ["q"]
  @vect << "1 0 0 1 #{@params[:orig_point][0]} #{@params[:orig_point][1]} cm"
  @out.puts(PDFHeader)
  @out.puts "/MediaBox [ 0 0 %d %d]" % @params[:size]
  @out.puts PDFMiddle

  draw_body

  @vect << "Q"
  str = @vect.join("\n")

  @out.puts "<< /Length #{str.length} >> stream"
  @out.puts str
  @out.puts PDFFooter
end

#text(str, x, y, params = {}) ⇒ Object



102
103
104
105
106
107
108
109
110
# File 'lib/chem/db/pdf.rb', line 102

def text(str, x, y, params = {})
  @vect << "BT"
  color = params[:color].nil? ? "0 0 0" : params[:color].join(" ")
  @vect << "#{color} rg"
  @vect << "/F1 #{@params[:font]} Tf"
  @vect << "1 0 0 1 #{x - @params[:font] * 0.4} #{y - @params[:font] * 0.4} Tm"
  @vect << "(#{str}) Tj"
  @vect << "ET"
end