LoginSignup
1
1

More than 1 year has passed since last update.

【Ruby on Rails】PDFをzipファイルに圧縮する方法

Last updated at Posted at 2023-01-29

前提条件

  • Ruby 3.1.0
  • Rails 7.0.4
  • gem 'rubyzip'

やりたいこと

PDFファイルをzipファイルに圧縮する。

方法

1. rubyzipのGemをインストールする

Gemファイルに以下を追加する。

Gemfile
gem 'rubyzip'

コンソールからGemをインストールする。

コンソール
bundle install

2. rubyzipを使用してプログラムを作成する

pdf_to_zip.rb
require 'zip'

module ABC
  class PdfToZip
    class << self
      def exe
        #zip化するPDFが格納されているディレクトリ  
        pdf_folder_path = "<PDFが格納されているディレクトリパス>"
        #zipファイルを出力するディレクトリ/ファイル名
        zip_folder_name = "<zipファイルを出力するディレクトリパス>/<zipファイル名>" 

        #zip化するPDFをリストに格納
        pdfs = [test.pdf, test2.pdf, test3.pdf]
        
        #リストのファイルを一つのzipファイルに圧縮
        Zip::File.open(zip_folder_name, Zip::File::CREATE) do |zipfile|
          pdfs.each do |input|
            zipfile.add("<zipファイル内のファイル名>", "<圧縮するPDFのフルパス>")
          end
        end
      end
    end
  end
end

-詳細-
① rubyzipライブラリを使う宣言をする。

pdf_to_zip.rb
require 'zip'

② zip化するPDFが格納されているディレクトリ、zipファイルを出力するディレクトリ/ファイル名を変数に代入する。
(例)

PDFが格納されているディレクトリ zipファイルを出力するディレクトリ zipファイル名
spec/data/pdf spec/data test.zip
pdf_to_zip.rb
#zip化するPDFが格納されているディレクトリ  
pdf_folder_path = "spec/data/pdf"
#zipファイルを出力するディレクトリ/ファイル名
zip_folder_name = "spec/data/test.zip" 

③ zip化するPDFをリストに格納する。

pdf_to_zip.rb
#zip化するPDFをリストに格納
pdfs = [test.pdf, test2.pdf, test3.pdf]

④ リストのファイルをzipファイル(変数zip_folder_name)に圧縮する
(例)

zipファイル内のファイル名 圧縮するPDFのフルパス
test.pdf spec/data/pdf/test.pdf
test2.pdf spec/data/pdf/test2.pdf
test3.pdf spec/data/pdf/test3.pdf
pdf_to_zip.rb
#リストのファイルを一つのzipファイルに圧縮
Zip::File.open(zip_folder_name, Zip::File::CREATE) do |zipfile|
  pdfs.each do |input|
    zipfile.add(input, File.join(pdf_folder_path, input)
  end
end

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1