<< | Index | >>
Problem
The pdf versions and writers (producers)
2010.01.15 %PDF-1.4 2010.01.19 %PDF-1.4 2010.02.20 %PDF-1.4 2010.03.01 %PDF-1.4 2010.03.02 %PDF-1.4 2010.03.16 %PDF-1.4 2010.04.02 %PDF-1.4 2010.04.16 %PDF-1.4 2010.09.09 %PDF-1.4 2010.10.05 %PDF-1.4 2010.10.18 %PDF-1.4 2010.11.12 %PDF-1.4 (Acrobat 5.x) (Acrobat Distiller 7.0 Windows) 2010.11.16 %PDF-1.6 2010.11.26 %PDF-1.6 2010.12.02 %PDF-1.6 2010.12.16 %PDF-1.6 (Acrobat 7.x) (Acrobat Distiller 9.0 Windows) 2011.01.14 %PDF-1.4 (Acrobat 5.x) (pdfFactory 3.25 (Windows Server 2003 R2 Standard Edition German)) 2011.01.18 %PDF-1.4 2011.02.09 %PDF-1.4 2011.02.16 %PDF-1.4 2011.03.14 %PDF-1.4 2011.04.02 %PDF-1.4 2011.04.19 %PDF-1.4 2011.05.04 %PDF-1.4
Note
Experiment (lib/rpdf2txt/object.rb#text)
def text(callback_handler) p "getin text" concat_stream = Stream.new('') if(@contents.size == 1 && @contents.first.is_a?(ReferenceArray)) @contents.first.build_stream(concat_stream) else @contents.each { |stream| concat_stream.append(stream.decoded_stream) } end @text_state.media_box = self.media_box text_snippets = concat_stream.extract_text_objects(self, @text_state) p text_snippets.class p text_snippets.length p text_snippets.map{|x| x.class}.uniq.join("\n") puts 10.times do |i| print i, "\t", text_snippets[i].txt, "\n" end 10.times do |i| print i, "\t", text_snippets[-1-i].txt, "\n" end exit
Result
masa@masa ~/ywesee/rpdf2txt $ ruby -I lib bin/rpdf2txt zubef_old.pdf "getin text" Array 265 "Rpdf2txt::TextState" 0 Zuzahlungsbefreite Arzneimittel nach § 31 Abs. 3 Satz 4 SGB V 1 PZN 2 Arzneimit 3 t 4 e 5 lname 6 Darreichungsf 7 o 8 rm 9 Hersteller 0 Seite 1 von 618 1 mg 2 600 3 n 4 i 5 e 6 st 7 y 8 c 9 l masa@masa ~/ywesee/rpdf2txt $ ruby -I lib bin/rpdf2txt zubef_latest.pdf "getin text" Array 698 "Rpdf2txt::TextState" 0 Zu 1 z 2 a 3 h 4 l 5 ung 6 s 7 b 8 ef 9 r 0 638 1 2 n 3 o 4 v 5 6 1 7 8 e 9 t
Note
Default run
masa@masa ~/ywesee/rpdf2txt $ ruby -I lib bin/rpdf2txt zubef_latest.pdf 638nov1eSiet 600CCAABST 0434230 XAGLEHA teinAscytylce 600 mg 20 t S Tableentt 1216, ACC600ABST 0434224 XHELAAG cetsyineyAtcl ....
Experiment (lib/rpdf2txt/object.rb#join_snippets)
def join_snippets(text_snippets, callback_handler) # text_snippets.sort!
Result
masa@masa ~/ywesee/rpdf2txt $ ruby -I lib bin/rpdf2txt zubef_latest.pdf ZuzahlungsbefreiteArzneimittel nach§31Abs. 3Satz4SGB V PZNArzneimittelname DarreichungsformHersteller Apothekenverkaufspreis inkl.MwSt Packungs- größe Wirkstoff(e) Wirkstärke(n) Produktstand sortiertnachArzneimittelname 01 . 05 . 2011 3867219ACC200 Brausetabletten 12,72HEXALAG 50 St Acetylcystein 200 mg 3867225ACC200 ...
Note
Consideration
Experiment (lib/rpdf2txt/object.rb#join_snippets)
def join_snippets(text_snippets, callback_handler) p "getin join_snippets" text_snippets.sort! columns = [] if(callback_handler.identify_columns?) columns = identify_columns(text_snippets, :width => callback_handler.column_width, :count => callback_handler.column_count) columns.shift #throw away the first colum - we'll use the left media-edge end next_column = nil working_set = [] count = 0 each_pair(text_snippets) { |last_text_state, text_state| print count, "\t", text_state.txt, "\t", text_state.x, "\t", text_state.y, "\n" ...
Result
masa@masa ~/ywesee/rpdf2txt $ ruby -I lib bin/rpdf2txt zubef_old.pdf "getin join_snippets" 0 Zuzahlungsbefreite Arzneimittel nach § 31 Abs. 3 Satz 4 SGB V 43.4305 59.64 Zuzahlungsbefreite Arzneimittel nach § 31 Abs. 3 Satz 4 SGB V 1 Produktstand 43.4305 79.5 Produktstand 2 15 145.39037171 79.5 15 3 . 162.41985007 79.5 . 4 1 169.37920036 79.5 1 5 2 177.17434468 79.5 2 6 . 185.44968557 79.5 . 7 2010 189.35005771 79.5 2010 8 sortiert nach Arzneimittelname 43.4305 96.48702837 sortiert nach Arzneimittelname 9 Arzneimit 43.4827 117.0 Arzneimit 10 t 80.8894 117.0 t 11 e 83.4103 117.0 e 12 lname 88.3873 117.0 lname 13 PZN 176.6305 117.0 PZN 14 Hersteller 221.9725 117.0 Hersteller 15 Wirkstoff 343.9795 117.0 Wirkstoff 16 ( 379.03 117.0 ( 17 e 382.0288 117.0 e 18 ) 386.9455 117.0 ) 19 Wirkstärke 440.3245 117.0 Wirkstärke
masa@masa ~/ywesee/rpdf2txt $ ruby -I lib bin/rpdf2txt zubef_latest.pdf "getin join_snippets" 0 638 5656.8 3132.0 638 1 n 5656.8 3132.0 n 2 o 5656.8 3132.0 o 3 v 5656.8 3132.0 v 4 1 5656.8 3132.0 1 5 e 5656.8 3132.0 e 6 S 5656.8 3132.0 S 7 i 5656.8 3132.0 i 8 e 5656.8 3132.0 e 9 t 5656.8 3132.0 t
Note
Experiment (lib/rpdf2txt/object.rb#join_snippets)
def join_snippets(text_snippets, callback_handler) p "getin join_snippets" text_snippets.sort!
Result
... 165 A 43.44 450.48 A 166 CC 43.44 450.48 CC 167 200 43.44 450.48 200 168 Br 582.24 450.48 Br 169 a 582.24 450.48 a 170 u 582.24 450.48 u 171 s 582.24 450.48 s 172 e 582.24 450.48 e 173 t 582.24 450.48 ...
Note
Consideration
Experiment (lib/rpdf2txt/test_state.rb#<=>)
def <=> (other) if(same_line(other)) @x <=> other.x elsif(other.is_a?(self.class)) p @cmyscale # @cmyscale may be negative, reversing the sort-order (@y <=> other.y) \ * (@cmyscale == 0 ? 1 : @cmyscale) else @y <=> other.y end end
Result
masa@masa ~/ywesee/rpdf2txt $ ruby -I lib bin/rpdf2txt zubef_old.pdf 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ...
masa@masa ~/ywesee/rpdf2txt $ ruby -I lib bin/rpdf2txt zubef_latest.pdf -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0 -1.0
Note
Reference
The snippets are extracted from lib/rpdf2txt/object.rb#extract_text_objects
def extract_text_objects(page, text_state)
@page, @text_state = page, text_state
stack = []
result = []
startpoint = decoded_stream.index(BT_PATTERN)
endpoint = decoded_stream.index(ET_PATTERN)
while FAIL_PTRN.match(decoded_stream[0..(endpoint+2)])
endpoint = decoded_stream.index(ET_PATTERN, endpoint.next)
end
unless(startpoint && endpoint && (startpoint < endpoint))
startpoint = 0
end
rotation = (page && Math::PI * page.attributes[:rotate].to_f / 180) || 0
dmatrix = Matrix[[Math.cos(rotation),Math.sin(rotation),0],
[Math.sin(rotation),-Math.cos(rotation),0],
[0,0,1]]
dm_src = decoded_stream[0...startpoint]
while(endpoint && startpoint)
### pick out the bits in between Text that are relevant to
### text positioning (such as the device-transformation-matrix)
### NOTE: as far as I understand, the device matrix should
### not be used to position text. However it is used
### by some PDF-Creators and therefore we have to include
### it in our calculations.
dmatrix = extract_nontext_objects(dm_src, dmatrix, stack, result)
extract_horizontal_rules(dm_src, dmatrix, result)
tsrc = decoded_stream[startpoint..(endpoint+2)]
while FAIL_PTRN.match(tsrc)
endpoint = decoded_stream.index(ET_PATTERN, endpoint + 2) || -1
tsrc = decoded_stream[startpoint..(endpoint+2)]
end
text = Text.new(tsrc, @target_encoding, dmatrix)
text.current_page = page
text.text_state = text_state
# here @x and @y of TextState instance are set
result.concat text.scan
def scan @snippets = [] ast = Rpdf2txt.text_parser.parse(@src) scan_tree(ast) @snippets rescue Exception puts @src raise end
lib/rpdf2txt/text.rb#scan_tree
def scan_tree(ast) ast.values.each { |node| if(node.name == 'Array') \ && (node.values.first.children_names.first == 'kerning') ## If the case [ 34 (foo) ] crops up, the first operation ## executed on @text_state is advance_x. This results in ## the width of the last text-snipped being calculated twice. ## This here is a workaround that resets the snippet to an ## empty string if we are encountering a [ ??? ] construct ## (an array). ## TODO: find a more general solution @text_state.set_txt('') end node.children_names.each { |child_name| case child_name when 'alpha' @text_state.tmalpha = node.alpha.value.to_f when 'beta' @text_state.tmbeta = -node.beta.value.to_f skew = node.beta.value.to_f > 0.1 if(@current_font && @current_font.skewed != skew) @current_font = @current_font.dup @current_font.skewed = skew @text_state.set_font(@current_font) end when 'xscale' @text_state.set_xscale(node.xscale.value) when 'yscale' @text_state.set_yscale(node.yscale.value) when 'charspace' @text_state.set_char_spacing(node.charspace.value) when 'kerning' @text_state.advance_x(node.kerning.value.to_f) when 'tdleadx' @text_state.update_x(node.tdleadx.value.to_f) when 'tdleady' lead = node.tdleady.value.to_f @text_state.set_lead(lead) @text_state.update_y(lead) when 'xpos' @text_state.update_x(node.xpos.value.to_f) when 'ypos' @text_state.update_y(node.ypos.value.to_f) when 'fontname' @current_font = get_font(node.fontname.value) @text_state.set_font(@current_font) @text_state.set_font_size(node.fontsize.value) when 'tmx' @text_state.set_x(node.tmx.value.to_f) when 'tmy' @text_state.set_y(node.tmy.value) when 'render' val = node.render.value if(@current_font && @current_font.rendering_mode != val) @current_font = @current_font.dup @current_font.rendering_mode = val @text_state.set_font(@current_font) end when 'wordspace' @text_state.set_word_spacing(node.wordspace.value) when 'values' scan_tree(node) when 'snippet' snip(node.snippet.value) when 'aposnippet' @text_state.step snip(node.aposnippet.value) when 'linebreak' @text_state.step when 'textrise' #add functionality for textrise p 387 pdf manual when 'hexsnippet' hex_bytes = node.hexsnippet.value char = '' hex_bytes.scan(/.{2,4}/n) { |pair| dec_byte = pair.hex char << (mapped_ascii(dec_byte) || '?') } _snip(char) end } } end
Note
Check pdf binary data (lib/rpdf2txt/text.rb#scan)
def scan p "getin scan" @snippets = [] ast = Rpdf2txt.text_parser.parse(@src) exit scan_tree(ast) @snippets rescue Exception puts puts @src raise end
Result
BT /TT2 1 Tf 0 14.0053 -13.9999 0 59.64 43.4305 Tm 0 g -.0002 Tc .0008 Tw (Zuzahlungsbefreite Arzneimittel nach � 31 Abs. 3 Satz 4 SGB V)Tj /TT4 1 Tf 0 9.0035 -9 0 117 176.6305 Tm .0009 Tc 0 Tw (PZN)Tj -14.7942 0 TD -.0016 Tc [(Arzneimit)-3.7(t)-3.7(e)1.4(lname)]TJ 59.8165 0 TD [(Darreichungsf)-3.7(o)1.4(rm)]TJ -39.9843 0 TD (Hersteller)Tj 52.2661 0 TD .0001 Tc [(Apo)9.8(t)-8.6(h)9.8(e)-3.5(ke)9.8(nverka)9.8(ufspre)9.8(is)]TJ 3.1321 -1.14 TD -.0006 Tc .0027 Tw [( in)-4.2(kl)8.3(.)-9.3(M)-.6(w)21.8(S)0(t)]TJ ET
BT /F1 13.92 Tf 43.44 535.68 TD -0.10512 Tc (Zu) Tj 0 Tc (z) Tj -0.05952 Tc (a) Tj -0.10512 Tc (h) Tj -0.02976 Tc (l) Tj -0.10512 Tc (ung) Tj -0.05952 Tc (s) Tj -0.10512 Tc (b) Tj -0.05952 Tc (ef) Tj 0.10512 Tc (r) Tj -0.05952 Tc (e) Tj -0.02976 Tc (i) Tj -0.07536 Tc (te) Tj -0.02976 Tc ( ) Tj -0.21024 Tc (A) Tj 0.10512 Tc (r) Tj 0 Tc (z) Tj -0.10512 Tc (n) Tj -0.05952 Tc (e) Tj -0.02976 Tc (i) Tj 0.10512 Tc (m) Tj -0.02976 Tc (i) Tj -0.07536 Tc (tte) Tj -0.02976 Tc (l ) Tj -0.10512 Tc (n) Tj -0.05952 Tc (ac) Tj -0.10512 Tc (h) Tj -0.02976 Tc ( ) Tj -0.05952 Tc (\247) Tj -0.02976 Tc ( ) Tj -0.05952 Tc (31) Tj -0.02976 Tc ( ) Tj -0.21024 Tc (A) Tj -0.10512 Tc (b) Tj -0.05952 Tc (s) Tj -0.02976 Tc (. ) Tj -0.05952 Tc (3) Tj -0.02976 Tc ( ) Tj 0.07536 Tc (S) Tj -0.05952 Tc (at) Tj 0 Tc (z) Tj -0.02976 Tc ( ) Tj -0.05952 Tc (4) Tj -0.02976 Tc ( ) Tj 0.07536 Tc (S) Tj -0.02976 Tc (G) Tj 0.02976 Tc (B) Tj -0.02976 Tc ( V) Tj /F2 8.88 Tf ET
Note
Rpdf2txt.text_parser.parse(@src)
Check each snippet position (@x, @y) (lib/rpdf2txt/text.rb#_snip)
def snip(snippet) snippet_text = snippet[1..-2].gsub(/\\[nrt]/n, " ") snippet_text.gsub!(/\\([()])/n, '\1') snippet_text.gsub!(/./n) { |char| self.mapped_ascii(char.unpack('C*')[0]) || char } print snippet_text, "\t" _snip(snippet_text) end def _snip(snippet_text) @text_state.set_txt(snippet_text) @text_state.update!(@current_page ? @current_page.attributes[:rotate] : 0) print "x = ", @text_state.x, "\ty = ", @text_state.y, "\n" @snippets.push(@text_state.dup).last end
Result
Zuzahlungsbefreite Arzneimittel nach � 31 Abs. 3 Satz 4 SGB V x = 43.4305 y = 59.64 PZN x = 176.6305 y = 117.0 "getin scan_tree" Arzneimit x = 43.4827 y = 117.0 t x = 80.8894 y = 117.0 e x = 83.4103 y = 117.0 lname x = 88.3873 y = 117.0 "getin scan_tree" Darreichungsf x = 581.8312 y = 117.0 o x = 637.6933 y = 117.0 rm x = 642.6703 y = 117.0 Hersteller x = 221.9725 y = 117.0 "getin scan_tree" Apo x = 692.3674 y = 117.0 t x = 708.2929 y = 117.0 h x = 710.8732 y = 117.0 e x = 715.7899 y = 117.0 ke x = 720.8263 y = 117.0 nverka x = 730.2439 y = 117.0 ufspre x = 757.1701 y = 117.0 is x = 782.0983 y = 117.0 "getin scan_tree" in x = 720.5563 y = 127.26399 kl x = 730.1062 y = 127.26399 . x = 736.5187 y = 127.26399 M x = 739.099 y = 127.26399 w x = 746.596 y = 127.26399 S x = 752.8924 y = 127.26399 t x = 758.89 y = 127.26399
Zu x = 43.44 y = 535.68 z x = 43.44 y = 535.68 a x = 43.44 y = 535.68 h x = 43.44 y = 535.68 l x = 43.44 y = 535.68 ung x = 43.44 y = 535.68 s x = 43.44 y = 535.68 b x = 43.44 y = 535.68 ef x = 43.44 y = 535.68 r x = 43.44 y = 535.68 e x = 43.44 y = 535.68 i x = 43.44 y = 535.68 te x = 43.44 y = 535.68 x = 43.44 y = 535.68 A x = 43.44 y = 535.68 r x = 43.44 y = 535.68 z x = 43.44 y = 535.68 n x = 43.44 y = 535.68 e x = 43.44 y = 535.68 i x = 43.44 y = 535.68 m x = 43.44 y = 535.68 i x = 43.44 y = 535.68 tte x = 43.44 y = 535.68 l x = 43.44 y = 535.68 n x = 43.44 y = 535.68 ac x = 43.44 y = 535.68 h x = 43.44 y = 535.68 x = 43.44 y = 535.68 \247 x = 43.44 y = 535.68 x = 43.44 y = 535.68 31 x = 43.44 y = 535.68 x = 43.44 y = 535.68 A x = 43.44 y = 535.68 b x = 43.44 y = 535.68 s x = 43.44 y = 535.68 . x = 43.44 y = 535.68 3 x = 43.44 y = 535.68 x = 43.44 y = 535.68 S x = 43.44 y = 535.68 at x = 43.44 y = 535.68 z x = 43.44 y = 535.68 x = 43.44 y = 535.68 4 x = 43.44 y = 535.68 x = 43.44 y = 535.68 S x = 43.44 y = 535.68 G x = 43.44 y = 535.68 B x = 43.44 y = 535.68 V x = 43.44 y = 535.68
Note
Next
Experiment (lib/rpdf2txt/text_state.rb#update))
def update!(rotation=0) orientation = (rotation.to_f.round / 90) % 2 print "orientation= ", orientation, "\n" print "@tmxoffset = ", @tmxoffset, "\n" print "@cmxoffset = ", @cmxoffset, "\n" print "@tmx = ", @tmx, "\n" print "@dtmx = ", @dtmx, "\n" print "@tmxscale = ", @tmxscale, "\n" print "@tmyoffset = ", @tmyoffset, "\n" print "@cmyoffset = ", @cmyoffset, "\n" print "@tmy = ", @tmy, "\n" print "@dtmy = ", @dtmy, "\n" print "@tmyscale = ", @tmyscale, "\n" print "@w = ", @w, "\n" print "@font_size = ", @font_size, "\n" x, y, x2, y2, bx, by = nil if orientation == 1 x = @tmxoffset + @tmy * @tmalpha y = @tmyoffset + (@tmx + @dtmx) * @tmbeta x2 = bx = x + @font_size * @tmalpha y2 = y + @w * @tmbeta by = y + @boxwidth * @tmbeta @x = y + @cmxoffset @y = x + @cmyoffset @x2 = y2 + @cmxoffset @y2 = x2 + @cmyoffset @right_edge = by + @cmxoffset else x = @tmxoffset + (@tmx + @dtmx) * @tmxscale y = @tmyoffset - @tmy * @tmyscale x2 = x + @w * @tmxscale y2 = by = y - @font_size * @tmyscale bx = x + @boxwidth * @tmxscale @x = x + @cmxoffset @y = y + @cmyoffset @x2 = x2 + @cmxoffset @y2 = y2 + @cmyoffset @right_edge = bx + @cmxoffset end puts print "@x = ", @x, "\n" print "@x2 = ", @x2, "\n" print "@y = ", @y, "\n" print "@y2 = ", @y2, "\n" print "@right_edge= ", @right_edge, "\n" end
Result
snippet_text = Zuzahlungsbefreite Arzneimittel nach � 31 Abs. 3 Satz 4 SGB V orientation= 1 @tmxoffset = 59.64 @cmxoffset = 0 @tmx = 0 @dtmx = 0 @tmxscale = 0.0 @tmyoffset = 43.4305 @cmyoffset = 0 @tmy = 0 @dtmy = nil @tmyscale = 0.0 @w = 29.8378 @font_size = 1.0 @x = 43.4305 @x2 = 461.15671622 @y = 59.64 @y2 = 73.6453 @right_edge= 461.15671622 x = 43.4305 y = 59.64 ================================================== snippet_text = PZN orientation= 1 @tmxoffset = 117.0 @cmxoffset = 0 @tmx = 0 @dtmx = 0 @tmxscale = 0.0 @tmyoffset = 176.6305 @cmyoffset = 0 @tmy = 0 @dtmy = nil @tmyscale = 0.0 @w = 2.0027 @font_size = 1.0 @x = 176.6305 @x2 = 194.6548 @y = 117.0 @y2 = 126.0035 @right_edge= 194.6548 x = 176.6305 y = 117.0 ...
snippet_text = Zu orientation= 0 @tmxoffset = 0.0 @cmxoffset = 0 @tmx = 43.44 @dtmx = 0 @tmxscale = 1.0 @tmyoffset = 0.0 @cmyoffset = 0 @tmy = -535.68 @dtmy = nil @tmyscale = 1.0 @w = 14.0836992 @font_size = 13.92 @x = 43.44 @x2 = 57.5236992 @y = 535.68 @y2 = 521.76 @right_edge= 57.5236992 x = 43.44 y = 535.68 ================================================== snippet_text = z orientation= 0 @tmxoffset = 0.0 @cmxoffset = 0 @tmx = 43.44 @dtmx = 0 @tmxscale = 1.0 @tmyoffset = 0.0 @cmyoffset = 0 @tmy = -535.68 @dtmy = nil @tmyscale = 1.0 @w = 6.96 @font_size = 13.92 @x = 43.44 @x2 = 50.4 @y = 535.68 @y2 = 521.76 @right_edge= 50.4 x = 43.44 y = 535.68 ...
def update!(rotation=0) orientation = (rotation.to_f.round / 90) % 2 print "orientation= ", orientation, "\n" if orientation == 0 print "@tmxoffset = ", @tmxoffset, "\n" print "@tmx = ", @tmx, "\n" print "@dtmx = ", @dtmx, "\n" print "@tmxscale = ", @tmxscale, "\n" print "@cmxoffset = ", @cmxoffset, "\n" print "x = @tmxoffset + (@tmx + @dtmx) * @tmxscale = ", @tmxoffset + (@tmx + @dtmx) * @tmxscale, "\n" print "@x = x + @cmxoffset = ", @tmxoffset + (@tmx + @dtmx) * @tmxscale + @cmxoffset, "\n" elsif orientation == 1 print "@tmxoffset = ", @tmxoffset, "\n" print "@tmy = ", @tmy, "\n" print "@tmalpha = ", @tmalpha, "\n" print "x = @tmxoffset + @tmy * @tmalpha = ", @tmxoffset + @tmy * @tmalpha, "\n" print "@tmyoffset = ", @tmyoffset, "\n" print "@tmx = ", @tmx, "\n" print "@dtmx = ", @dtmx, "\n" print "@tmbeta = ", @tmbeta, "\n" print "y = @tmyoffset + (@tmx + @dtmx) * @tmbeta = ", @tmyoffset + (@tmx + @dtmx) * @tmbeta, "\n" print "@cmxoffset = ", @cmxoffset, "\n" print "@x = y + @cmxoffset = ", @tmyoffset + (@tmx + @dtmx) * @tmbeta + @cmxoffset, "\n" end
Result
snippet_text = Zuzahlungsbefreite Arzneimittel nach � 31 Abs. 3 Satz 4 SGB V orientation= 1 @tmxoffset = 59.64 @tmy = 0 @tmalpha = 14.0053 x = @tmxoffset + @tmy * @tmalpha = 59.64 @tmyoffset = 43.4305 @tmx = 0 @dtmx = 0 @tmbeta = 13.9999 y = @tmyoffset + (@tmx + @dtmx) * @tmbeta = 43.4305 @cmxoffset = 0 @x = y + @cmxoffset = 43.4305 @x = 43.4305 x = 43.4305 y = 59.64 ================================================== snippet_text = PZN orientation= 1 @tmxoffset = 117.0 @tmy = 0 @tmalpha = 9.0035 x = @tmxoffset + @tmy * @tmalpha = 117.0 @tmyoffset = 176.6305 @tmx = 0 @dtmx = 0 @tmbeta = 9.0 y = @tmyoffset + (@tmx + @dtmx) * @tmbeta = 176.6305 @cmxoffset = 0 @x = y + @cmxoffset = 176.6305 @x = 176.6305 x = 176.6305 y = 117.0 ================================================== "getin scan_tree" snippet_text = Arzneimit orientation= 1 @tmxoffset = 117.0 @tmy = 0.0 @tmalpha = 9.0035 x = @tmxoffset + @tmy * @tmalpha = 117.0 @tmyoffset = 176.6305 @tmx = -14.7942 @dtmx = 0 @tmbeta = 9.0 y = @tmyoffset + (@tmx + @dtmx) * @tmbeta = 43.4827 @cmxoffset = 0 @x = y + @cmxoffset = 43.4827 @x = 43.4827 x = 43.4827 y = 117.0 ================================================== snippet_text = t orientation= 1 @tmxoffset = 117.0 @tmy = 0.0 @tmalpha = 9.0035 x = @tmxoffset + @tmy * @tmalpha = 117.0 @tmyoffset = 176.6305 @tmx = -14.7942 @dtmx = 4.1563 @tmbeta = 9.0 y = @tmyoffset + (@tmx + @dtmx) * @tmbeta = 80.8894 @cmxoffset = 0 @x = y + @cmxoffset = 80.8894 @x = 80.8894 x = 80.8894 y = 117.0 ================================================== snippet_text = e orientation= 1 @tmxoffset = 117.0 @tmy = 0.0 @tmalpha = 9.0035 x = @tmxoffset + @tmy * @tmalpha = 117.0 @tmyoffset = 176.6305 @tmx = -14.7942 @dtmx = 4.4364 @tmbeta = 9.0 y = @tmyoffset + (@tmx + @dtmx) * @tmbeta = 83.4103 @cmxoffset = 0 @x = y + @cmxoffset = 83.4103 @x = 83.4103 x = 83.4103 y = 117.0 ================================================== snippet_text = lname orientation= 1 @tmxoffset = 117.0 @tmy = 0.0 @tmalpha = 9.0035 x = @tmxoffset + @tmy * @tmalpha = 117.0 @tmyoffset = 176.6305 @tmx = -14.7942 @dtmx = 4.9894 @tmbeta = 9.0 y = @tmyoffset + (@tmx + @dtmx) * @tmbeta = 88.3873 @cmxoffset = 0 @x = y + @cmxoffset = 88.3873 @x = 88.3873 x = 88.3873 y = 117.0 ================================================== ....
snippet_text = Zu orientation= 0 @tmxoffset = 0.0 @tmx = 43.44 @dtmx = 0 @tmxscale = 1.0 @cmxoffset = 0 x = @tmxoffset + (@tmx + @dtmx) * @tmxscale = 43.44 @x = x + @cmxoffset = 43.44 @x = 43.44 x = 43.44 y = 535.68 ================================================== snippet_text = z orientation= 0 @tmxoffset = 0.0 @tmx = 43.44 @dtmx = 0 @tmxscale = 1.0 @cmxoffset = 0 x = @tmxoffset + (@tmx + @dtmx) * @tmxscale = 43.44 @x = x + @cmxoffset = 43.44 @x = 43.44 x = 43.44 y = 535.68 ================================================== snippet_text = a orientation= 0 @tmxoffset = 0.0 @tmx = 43.44 @dtmx = 0 @tmxscale = 1.0 @cmxoffset = 0 x = @tmxoffset + (@tmx + @dtmx) * @tmxscale = 43.44 @x = x + @cmxoffset = 43.44 @x = 43.44 x = 43.44 y = 535.68 ================================================== snippet_text = h orientation= 0 @tmxoffset = 0.0 @tmx = 43.44 @dtmx = 0 @tmxscale = 1.0 @cmxoffset = 0 x = @tmxoffset + (@tmx + @dtmx) * @tmxscale = 43.44 @x = x + @cmxoffset = 43.44 @x = 43.44 x = 43.44 y = 535.68 ================================================== ...
Next