]> source.dussan.org Git - redmine.git/commitdiff
File handling cleanup.
authorEtienne Massip <etienne.massip@gmail.com>
Wed, 11 Jul 2012 00:14:56 +0000 (00:14 +0000)
committerEtienne Massip <etienne.massip@gmail.com>
Wed, 11 Jul 2012 00:14:56 +0000 (00:14 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9973 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/plugins/rfpdf/lib/core/rmagick.rb
lib/plugins/rfpdf/lib/tcpdf.rb
lib/redmine/export/pdf.rb

index d561047cee3047bfeb048fd8beda972e0f2e6ff3..9311ade765c0873bb04b89331b626e84711392c3 100644 (file)
@@ -57,12 +57,7 @@ module RFPDF
     end
 
     out['bits'] = image.channel_depth
-    File.open( TCPDF.k_path_cache + File::basename(filename), 'w'){|f|
-      f.binmode
-      f.print image.to_blob
-      f.close
-    }
-    
+
     out
   end
   
index 1589647092af964af2f57a68bdce6589b49683f7..be5bd1870d3014dc90f4a328f0a0673b31db3a94 100755 (executable)
@@ -31,6 +31,9 @@
 #
 #============================================================+
 
+require 'tempfile'
+require 'core/rmagick'
+
 #
 # TCPDF Class.
 # @package com.tecnick.tcpdf
@@ -86,10 +89,10 @@ class TCPDF
   @@k_small_ratio = 2/3.0
   
   cattr_accessor :k_path_cache
-  @@k_path_cache = Rails.root.join('tmp').to_s
+  @@k_path_cache = Rails.root.join('tmp')
   
   cattr_accessor :k_path_url_cache
-  @@k_path_url_cache = Rails.root.join('tmp').to_s
+  @@k_path_url_cache = Rails.root.join('tmp')
   
   cattr_accessor :decoder
                
@@ -2060,16 +2063,12 @@ class TCPDF
                        type.downcase!
                        if (type == 'jpg' or type == 'jpeg')
                                info=parsejpg(file);
-                       elsif (type == 'png' or type == 'gif')
-                               img = Magick::ImageList.new(file)
-                               img.format = "PNG"     # convert to PNG from gif 
-                               img.opacity = 0        # PNG alpha channel delete
-                               open( @@k_path_cache + File::basename(file), 'w') do |f|
-                                       f.binmode
-                                       f.print img.to_blob
-                               end
-                               info=parsepng( @@k_path_cache + File::basename(file));
-                               File.delete( @@k_path_cache + File::basename(file))
+                       elsif (type == 'png')
+                               info=parsepng(file);
+                       elsif (type == 'gif')
+                         tmpFile = imageToPNG(file);
+                               info=parsepng(tmpFile.path);
+                               tmpFile.delete
                        else
                                #Allow for additional formats
                                mtd='parse' + type;
@@ -2892,14 +2891,29 @@ class TCPDF
                #Read whole file
                data='';
 
-               open( @@k_path_cache + File::basename(file),'rb') do |f|
+               open(file,'rb') do |f|
                        data<<f.read();
                end
-               File.delete( @@k_path_cache + File::basename(file))
 
                return {'w' => a[0],'h' => a[1],'cs' => colspace,'bpc' => bpc,'f'=>'DCTDecode','data' => data}
        end
 
+       def imageToPNG(file)
+               return unless Object.const_defined?(:Magick)
+
+               img = Magick::ImageList.new(file)
+               img.format = 'PNG'       # convert to PNG from gif 
+               img.opacity = 0                  # PNG alpha channel delete
+
+               #use a temporary file....
+               tmpFile = Tempfile.new(['', '_' + File::basename(file) + '.png'], @@k_path_cache);
+               tmpFile.binmode
+               tmpFile.print img.to_blob
+               tmpFile
+       ensure
+               tmpFile.close
+       end
+
        #
        # Extract info from a PNG file
        # @access protected
@@ -3937,9 +3951,6 @@ class TCPDF
                                        rescue => err
                                                logger.error "pdf: Image: error: #{err.message}"
                                                Write(@lasth, attrs['src'], '', fill);
-                                               if File.file?( @@k_path_cache + File::basename(file))
-                                                       File.delete( @@k_path_cache + File::basename(file))
-                                               end
                                        end
                                end
                                
index 899411a53bf28d1c42903f5aafc50e78117a6aea..e821c4e8a6bb259619bab752d31e077c652c07ed 100644 (file)
@@ -22,7 +22,6 @@ require 'tcpdf'
 require 'fpdf/chinese'
 require 'fpdf/japanese'
 require 'fpdf/korean'
-require 'core/rmagick'
 
 module Redmine
   module Export
@@ -36,7 +35,7 @@ module Redmine
         attr_accessor :footer_date
 
         def initialize(lang)
-          @@k_path_cache = Rails.root.join('tmp', 'pdf').to_s
+          @@k_path_cache = Rails.root.join('tmp', 'pdf')
           FileUtils.mkdir_p @@k_path_cache unless File::exist?(@@k_path_cache)
           set_language_if_valid lang
           pdf_encoding = l(:general_pdf_encoding).upcase