12

この方法でPDFファイルのサムネイルを処理しています:

  version :thumb do
    process :resize_to_limit => [260, 192]
    process :convert => :jpg
    process :set_content_type
  end

  def set_content_type(*args)
    self.file.instance_variable_set(:@content_type, "image/jpeg")
  end

ただし、PDF ファイルが複数ページの場合、すべてのページのサムネイルが 1 つの jpg ファイルに生成されます。最初のページだけサムネイルを作成する方法はありますか?

4

3 に答える 3

15

これを行うために、今年の初めにパッチを提出しました。カスタム プロセッサを使用します。

def cover 
  manipulate! do |frame, index|
    frame if index.zero?
  end
end

process :cover
于 2012-08-10T09:29:05.997 に答える
8

Tanzeebによる素晴らしいソリューション!ありがとうございました。

だから私はこのようなことをすることができます:

 def cover 
    manipulate! do |frame, index|
      frame if index.zero?
    end
  end   

親指の生成にこれを使用しました

  version :thumb do
    process :cover    
    process :resize_to_fill => [50, 50, Magick::NorthGravity]
    process :convert => 'png'
  end

すごい!

于 2012-12-04T20:20:35.657 に答える
3

この同じ問題の解決策を探しているときに、この投稿に出くわしました。PDF を jpeg に変換すると、すべてのページが端から端までつながった長い PDF が作成されるため、必要な縦横比に合わせて画像をトリミングし、残りを破棄する必要があります。以下は私が最終的に使用したものです:

version :thumb_safari do #special version for safari and ios
  process :resize_to_fit => [200,200]
  process :convert => 'jpg'
  process :paper_shape
  def full_filename (for_file = model.logo.file)
     super.chomp(File.extname(super)) + '.jpg'
  end     
end

version :thumb do #all browsers except safari
  process :resize_to_fit => [200,200]
  process :convert => 'jpg' #must convert to jpg before running paper shape
  process :paper_shape
  process :convert => 'jpg' #after running paper_shape it will default to original file type
  def full_filename (for_file = model.logo.file)
    super.chomp(File.extname(super)) + '.jpg'
  end
end

def paper_shape
   manipulate! do |img|
     if img.rows*4 != img.columns*3
       width=img.columns
       height=img.columns/3*4
       img.crop!(0,0,width,height,true)
     else
       img
     end
   end
 end

コントローラー/ビューでは、useragent gem を使用して次のようにしました。

documents_controller.rb

def index
  @user_agent=UserAgent.parse(request.user_agent)
  @search = Document.search(params[:q])
end

index.html.rb

<% if @user_agent.browser.downcase == 'safari' %>
<%= link_to(image_tag(doc.pdfdoc_url(:thumb_safari).to_s, :class=>"dropshadow", :size => "150x225"), doc.pdfdoc_url)%>
<% else %>
<%= link_to(image_tag(doc.pdfdoc_url(:thumb).to_s, :class=>"dropshadow", :size => "150x225"), doc.pdfdoc_url)%>
<% end %>

これを行うためのより良い方法があることは間違いありませんが、これは今のところ機能しています。

于 2012-11-11T19:14:59.560 に答える