@@ -57,6 +57,11 module RFPDF | |||
|
57 | 57 | end |
|
58 | 58 | |
|
59 | 59 | out['bits'] = image.channel_depth |
|
60 | File.open( TCPDF.k_path_cache + File::basename(filename), 'w'){|f| | |
|
61 | f.binmode | |
|
62 | f.print image.to_blob | |
|
63 | f.close | |
|
64 | } | |
|
60 | 65 | |
|
61 | 66 | out |
|
62 | 67 | end |
@@ -2049,17 +2049,27 class TCPDF | |||
|
2049 | 2049 | if (@images[file].nil?) |
|
2050 | 2050 | #First use of image, get info |
|
2051 | 2051 | if (type == '') |
|
2052 | pos = file.rindex('.'); | |
|
2053 | if (pos == 0) | |
|
2052 | pos = File::basename(file).rindex('.'); | |
|
2053 | if (pos.nil? or pos == 0) | |
|
2054 | 2054 | Error('Image file has no extension and no type was specified: ' + file); |
|
2055 | 2055 | end |
|
2056 | pos = file.rindex('.'); | |
|
2056 | 2057 | type = file[pos+1..-1]; |
|
2057 | 2058 | end |
|
2058 | 2059 | type.downcase! |
|
2059 | 2060 | if (type == 'jpg' or type == 'jpeg') |
|
2060 | 2061 | info=parsejpg(file); |
|
2061 | elsif (type == 'png') | |
|
2062 | info=parsepng(file); | |
|
2062 | elsif (type == 'png' or type == 'gif') | |
|
2063 | img = Magick::ImageList.new(file) | |
|
2064 | img.format = "PNG" # convert to PNG from gif | |
|
2065 | img.opacity = 0 # PNG alpha channel delete | |
|
2066 | File.open( @@k_path_cache + File::basename(file), 'w'){|f| | |
|
2067 | f.binmode | |
|
2068 | f.print img.to_blob | |
|
2069 | f.close | |
|
2070 | } | |
|
2071 | info=parsepng( @@k_path_cache + File::basename(file)); | |
|
2072 | File.delete( @@k_path_cache + File::basename(file)) | |
|
2063 | 2073 | else |
|
2064 | 2074 | #Allow for additional formats |
|
2065 | 2075 | mtd='parse' + type; |
@@ -2075,15 +2085,37 class TCPDF | |||
|
2075 | 2085 | end |
|
2076 | 2086 | #Automatic width and height calculation if needed |
|
2077 | 2087 | if ((w == 0) and (h == 0)) |
|
2088 | rescale_x = (@w - @r_margin - x) / (info['w'] / (@img_scale * @k)) | |
|
2089 | rescale_x = 1 if rescale_x >= 1 | |
|
2090 | if (y + info['h'] * rescale_x / (@img_scale * @k) > @page_break_trigger and !@in_footer and AcceptPageBreak()) | |
|
2091 | #Automatic page break | |
|
2092 | if @pages[@page+1].nil? | |
|
2093 | ws = @ws; | |
|
2094 | if (ws > 0) | |
|
2095 | @ws = 0; | |
|
2096 | out('0 Tw'); | |
|
2097 | end | |
|
2098 | AddPage(@cur_orientation); | |
|
2099 | if (ws > 0) | |
|
2100 | @ws = ws; | |
|
2101 | out(sprintf('%.3f Tw', ws * @k)); | |
|
2102 | end | |
|
2103 | else | |
|
2104 | @page += 1; | |
|
2105 | end | |
|
2106 | y=@t_margin; | |
|
2107 | end | |
|
2108 | rescale_y = (@page_break_trigger - y) / (info['h'] / (@img_scale * @k)) | |
|
2109 | rescale_y = 1 if rescale_y >= 1 | |
|
2110 | rescale = rescale_y >= rescale_x ? rescale_x : rescale_y | |
|
2111 | ||
|
2078 | 2112 | #Put image at 72 dpi |
|
2079 | 2113 | # 2004-06-14 :: Nicola Asuni, scale factor where added |
|
2080 | w = info['w'] / (@img_scale * @k); | |
|
2081 | h = info['h'] / (@img_scale * @k); | |
|
2082 | end | |
|
2083 | if (w == 0) | |
|
2114 | w = info['w'] * rescale / (@img_scale * @k); | |
|
2115 | h = info['h'] * rescale / (@img_scale * @k); | |
|
2116 | elsif (w == 0) | |
|
2084 | 2117 | w = h * info['w'] / info['h']; |
|
2085 | end | |
|
2086 | if (h == 0) | |
|
2118 | elsif (h == 0) | |
|
2087 | 2119 | h = w * info['h'] / info['w']; |
|
2088 | 2120 | end |
|
2089 | 2121 | out(sprintf('q %.2f 0 0 %.2f %.2f %.2f cm /I%d Do Q', w*@k, h*@k, x*@k, (@h-(y+h))*@k, info['i'])); |
@@ -2846,7 +2878,7 class TCPDF | |||
|
2846 | 2878 | if (a.empty?) |
|
2847 | 2879 | Error('Missing or incorrect image file: ' + file); |
|
2848 | 2880 | end |
|
2849 | if (a[2]!='JPEG') | |
|
2881 | if (!a[2].nil? and a[2]!='JPEG') | |
|
2850 | 2882 | Error('Not a JPEG file: ' + file); |
|
2851 | 2883 | end |
|
2852 | 2884 | if (a['channels'].nil? or a['channels']==3) |
@@ -2859,9 +2891,12 class TCPDF | |||
|
2859 | 2891 | bpc=!a['bits'].nil? ? a['bits'] : 8; |
|
2860 | 2892 | #Read whole file |
|
2861 | 2893 | data=''; |
|
2862 | open(file,'rb') do |f| | |
|
2894 | ||
|
2895 | open( @@k_path_cache + File::basename(file),'rb') do |f| | |
|
2863 | 2896 | data<<f.read(); |
|
2864 | 2897 | end |
|
2898 | File.delete( @@k_path_cache + File::basename(file)) | |
|
2899 | ||
|
2865 | 2900 | return {'w' => a[0],'h' => a[1],'cs' => colspace,'bpc' => bpc,'f'=>'DCTDecode','data' => data} |
|
2866 | 2901 | end |
|
2867 | 2902 | |
@@ -2882,11 +2917,11 class TCPDF | |||
|
2882 | 2917 | end |
|
2883 | 2918 | w=freadint(f); |
|
2884 | 2919 | h=freadint(f); |
|
2885 | bpc=f.read(1)[0]; | |
|
2920 | bpc=f.read(1).unpack('C')[0]; | |
|
2886 | 2921 | if (bpc>8) |
|
2887 | 2922 | Error('16-bit depth not supported: ' + file); |
|
2888 | 2923 | end |
|
2889 | ct=f.read(1)[0]; | |
|
2924 | ct=f.read(1).unpack('C')[0]; | |
|
2890 | 2925 | if (ct==0) |
|
2891 | 2926 | colspace='DeviceGray'; |
|
2892 | 2927 | elsif (ct==2) |
@@ -2896,13 +2931,13 class TCPDF | |||
|
2896 | 2931 | else |
|
2897 | 2932 | Error('Alpha channel not supported: ' + file); |
|
2898 | 2933 | end |
|
2899 | if (f.read(1)[0] != 0) | |
|
2934 | if (f.read(1).unpack('C')[0] != 0) | |
|
2900 | 2935 | Error('Unknown compression method: ' + file); |
|
2901 | 2936 | end |
|
2902 | if (f.read(1)[0]!=0) | |
|
2937 | if (f.read(1).unpack('C')[0] != 0) | |
|
2903 | 2938 | Error('Unknown filter method: ' + file); |
|
2904 | 2939 | end |
|
2905 | if (f.read(1)[0]!=0) | |
|
2940 | if (f.read(1).unpack('C')[0] != 0) | |
|
2906 | 2941 | Error('Interlacing not supported: ' + file); |
|
2907 | 2942 | end |
|
2908 | 2943 | f.read(4); |
@@ -2922,9 +2957,9 class TCPDF | |||
|
2922 | 2957 | #Read transparency info |
|
2923 | 2958 | t=f.read( n); |
|
2924 | 2959 | if (ct==0) |
|
2925 | trns = t[1][0] | |
|
2960 | trns = t[1].unpack('C')[0] | |
|
2926 | 2961 | elsif (ct==2) |
|
2927 | trns = t[[1][0], t[3][0], t[5][0]] | |
|
2962 | trns = t[[1].unpack('C')[0], t[3].unpack('C')[0], t[5].unpack('C')[0]] | |
|
2928 | 2963 | else |
|
2929 | 2964 | pos=t.include?(0.chr); |
|
2930 | 2965 | if (pos!=false) |
@@ -3766,6 +3801,14 class TCPDF | |||
|
3766 | 3801 | end |
|
3767 | 3802 | |
|
3768 | 3803 | # |
|
3804 | # Convert to accessible file path | |
|
3805 | # @param string :attrname image file name | |
|
3806 | # | |
|
3807 | def getImageFilename( attrname ) | |
|
3808 | nil | |
|
3809 | end | |
|
3810 | ||
|
3811 | # | |
|
3769 | 3812 | # Process opening tags. |
|
3770 | 3813 | # @param string :tag tag name (in upcase) |
|
3771 | 3814 | # @param string :attr tag attribute (in upcase) |
@@ -3878,10 +3921,17 class TCPDF | |||
|
3878 | 3921 | |
|
3879 | 3922 | when 'img' |
|
3880 | 3923 | if (!attrs['src'].nil?) |
|
3881 | Write(@lasth, '!' + attrs['src'] + '!', '', fill); | |
|
3882 | =begin Comment out. Because not implement image output yet. | |
|
3883 | # replace relative path with real server path | |
|
3884 | attrs['src'] = attrs['src'].gsub(@@k_path_url_cache, @@k_path_cache); | |
|
3924 | # Only generates image include a pdf if RMagick is avalaible | |
|
3925 | unless Object.const_defined?(:Magick) | |
|
3926 | Write(@lasth, attrs['src'], '', fill); | |
|
3927 | return | |
|
3928 | end | |
|
3929 | file = getImageFilename(attrs['src']) | |
|
3930 | if (file.nil?) | |
|
3931 | Write(@lasth, attrs['src'], '', fill); | |
|
3932 | return | |
|
3933 | end | |
|
3934 | ||
|
3885 | 3935 | if (attrs['width'].nil?) |
|
3886 | 3936 | attrs['width'] = 0; |
|
3887 | 3937 | end |
@@ -3889,10 +3939,17 class TCPDF | |||
|
3889 | 3939 | attrs['height'] = 0; |
|
3890 | 3940 | end |
|
3891 | 3941 | |
|
3892 | Image(attrs['src'], GetX(),GetY(), pixelsToMillimeters(attrs['width']), pixelsToMillimeters(attrs['height'])); | |
|
3893 | #SetX(@img_rb_x); | |
|
3894 |
|
|
|
3895 | =end | |
|
3942 | begin | |
|
3943 | Image(file, GetX(),GetY(), pixelsToMillimeters(attrs['width']), pixelsToMillimeters(attrs['height'])); | |
|
3944 | #SetX(@img_rb_x); | |
|
3945 | SetY(@img_rb_y); | |
|
3946 | rescue => err | |
|
3947 | logger.error "pdf: Image: error: #{err.message}" | |
|
3948 | Write(@lasth, attrs['src'], '', fill); | |
|
3949 | if File.file?( @@k_path_cache + File::basename(file)) | |
|
3950 | File.delete( @@k_path_cache + File::basename(file)) | |
|
3951 | end | |
|
3952 | end | |
|
3896 | 3953 | end |
|
3897 | 3954 | |
|
3898 | 3955 | when 'ul', 'ol' |
General Comments 0
You need to be logged in to leave comments.
Login now