pdfの1ページ目だけを指定してPNG形式への変換を行う
Q&A
Closed
□解決したいこと
rmagicとcarrierwaveを用いて、投稿したpdfをPNGに変換して表示する機能を実装しております。
その際、複数ページのpdfを投稿した際は1ページ目をPNGに変換して表示しようと考えております。
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
include CarrierWave::MiniMagick
#省略
version :thumb do
process :cover
process resize_to_limit: [1000, 1000]
process convert: 'png'
end
# 1ページ目だけを指定して抜き出す
def cover
image = Magick::Image.read(filename)
image[0]
end
#省略
以上のようにproessからcoverを呼び出し、1ページ目を指定して抜き出す処理を行おうと考えています。しかし、def cover~endの記述の方法がわからず、処理がうまくいきません。
carrierwave及びrmagicを使用することが初めてですので、ご意見いただきたく投稿いたしました。
以下ターミナルに表示されるエラー
Started POST "/tips" for ::1 at 2021-05-15 18:45:39 +0900
Processing by TipsController#create as HTML
Parameters: {"authenticity_token"=>"ToPsPsImK/oGmEf6e6zY57nIMovfzD1OSfKnRaVs8uz1awjjXkrp0R1ud27qCDPlFSqrebSuyLo6bgqZ5xGgdw==", "tip"=>{"title"=>"テスト", "name"=>"", "category_id"=>"3", "image"=>#<ActionDispatch::Http::UploadedFile:0x00007fde8d1156c0 @tempfile=#<Tempfile:/var/folders/6_/7bw90k293ydglk72y4jh4vkc0000gn/T/RackMultipart20210515-36097-1q99ybo.pdf>, @original_filename="建築豆知識アプリ.pdf", @content_type="application/pdf", @headers="Content-Disposition: form-data; name=\"tip[image]\"; filename=\"\xE5\xBB\xBA\xE7\xAF\x89\xE8\xB1\x86\xE7\x9F\xA5\xE8\xAD\x98\xE3\x82\xA2\xE3\x83\x95\xE3\x82\x9A\xE3\x83\xAA.pdf\"\r\nContent-Type: application/pdf\r\n">, "description"=>"aa"}, "commit"=>"投稿する"}
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
Completed 500 Internal Server Error in 743ms (ActiveRecord: 12.6ms | Allocations: 21791)
Magick::ImageMagickError (unable to open image '建築豆知識アプリ.pdf': No such file or directory @ error/blob.c/OpenBlob/3537):
実装の際、参考にしたサイトのURL
https://lab.unicast.ne.jp/2013/11/28/railsrmagickcarrierwaveを使ってアップロードしたpdfの表紙からpng画/
試したこと
prosess :coverをコメントアウトし、1ページのみのpdfを投稿したところ、投稿に成功し画像の変換にも成功しました。
参考URLの方の記述は
def cover
manipulate! do |frame, index|
frame if index.zero?
end
end
とありますが、当該記述ですとエラーが発生してしまします。
そのため、Magick::Image.read(filename)で引数を指定して変換を試みましたが、
引数の指示が無効なため、エラー内にNo such fileとなっております。
pdfの1ページ目を指定して抜き出す方法についてもあまり参考がなかったものですので、お分かりの方、ご助言いただけないでしょうか。
何卒、ご教示いただきたくお願い申し上げます。
環境
'rails', '~> 6.0.0'
carrierwave (2.2.1)
rmagick (4.2.2)
ruby '2.6.5'