[Rails5] wicked_pdf 란 무엇입니까?
소개
Rails의 공부로서 gem 주위를 만져 보는 기획입니다.
이번에는...
wicked_pdf
시도해 보겠습니다.
무슨 젬이야?
간단히 말하면 HTML을 PDF로 변환하여 다운로드하는 것을 실현하는 gem입니다.
함께 wkhtmltopdf
라는 명령줄 도구의 gem도 사용합니다.
이 wkhtmltopdf
를 Rails 사용하려면 이번 wicked_pdf가 필요합니다.
(wicked_pdf는 래퍼에 해당하는 gem 같다.)
조속히 시도해 봅시다.
검증 환경
다음 환경에서 실시했습니다.
[client]
・MacOS Mojave(10.14.2)
・Vagrant 2.2.2
・VBoxManage 6.0.0
[virtual]
・CentOS 7.6
・Rails 5.2.2
・ruby 2.3.1
참고까지.
wicked_pdf 소개
1.gem 설치
사전에 Rails 공부용으로 작성한 프로젝트로 진행합니다.
각 MVC는 적당히 게시판 앱을 상정하여 Posts 컨트롤러 등을 생성 완료되었습니다.
(index, show, edit의 빈 페이지를 볼 수있는 정도)
$ rails g model post
$ rails g controller posts index show edit
그 전제하에 Gemfile에 다음을 추가한다.
Gemfile# wicked_pdf
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'
추가하면 설치.
$ bundle install
-----------
Fetching wicked_pdf 1.1.0
Installing wicked_pdf 1.1.0
Fetching wkhtmltopdf-binary 0.12.4
Installing wkhtmltopdf-binary 0.12.4
-----------
→無事に完了。
계속해서 이니셜라이저를 생성.
$ rails g wicked_pdf
create config/initializers/wicked_pdf.rb
2.wicked_pdf 설정하기
위의 명령으로 생성된 파일의 내용을 조정합니다.
wicked_pdf.rb# WickedPDF Global Configuration
#
# Use this to set up shared configuration options for your entire application.
# Any of the configuration options shown here can also be applied to single
# models by passing arguments to the `render :pdf` call.
#
# To learn more, check out the README:
#
# https://github.com/mileszs/wicked_pdf/blob/master/README.md
WickedPdf.config = {
# Path to the wkhtmltopdf executable: This usually isn't needed if using
# one of the wkhtmltopdf-binary family of gems.
# exe_path: '/usr/local/bin/wkhtmltopdf',
# or
# exe_path: Gem.bin_path('wkhtmltopdf-binary', 'wkhtmltopdf')
# これを追記
:exe_path => "#{Gem.loaded_specs['wkhtmltopdf-binary'].full_gem_path}/bin/wkhtmltopdf"
# Layout file to be used for all PDFs
# (but can be overridden in `render :pdf` calls)
# layout: 'pdf.html',
}
이 설정의 기술 방법은 이쪽을 참고로 했습니다.
견적:
rails에서 wicked_pdf를 사용하는 방법
by 🌸 님
또한 gem의 README에도 적혀 있지만,
Rails 버전이 오래된 경우 mime_types.rb
다음 설명이 필요할 것 같습니다.
mime_types.rbMime::Type.register "application/pdf", :pdf
이번에는 새로운 버전의 Rails 때문에,
특히 추가하지 않아도 되므로 스루.
3.wicked_pdf를 사용해보기
이제 wicked_pdf를 사용하여 구현해 보겠습니다.
posts_controller.rbdef show
# とりあえず愚直に
respond_to do |format|
format.html
format.pdf do
render pdf: "sample", # PDF名
template: "posts/show.html.erb" # viewを対象にする
end
end
end
4. 동작 확인
그럼 서버를 시작해 페이지를 보자.
액세스 URL로 /posts/show
또는 /posts/show.html
지금까지와 같이 일반 HTML 페이지가 표시되었습니다.
그리고 본제의 posts/show.pdf
에 액세스하면 ...
오류! ! ! ! ! ! ! ! !
RuntimeError (Failed to execute:
["/usr/local/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/wkhtmltopdf-binary-0.12.4/bin/wkhtmltopdf", "-q", "file:////tmp/wicked_pdf20190108-8274-1n8d1sj.html", "/tmp/wicked_pdf_generated_file20190108-8274-7au09y.pdf"]
Error: PDF could not be generated!
Command Error: /usr/local/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/wkhtmltopdf-binary-0.12.4/bin/wkhtmltopdf_linux_amd64: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory
):
명령 오류의 결과로 생성 실패했습니다.
libXrender.so.1이 없습니까?
오류 해결
어쩐지・・・.
라는 느낌으로 벽에 부딪쳤기 때문에,
Google 선생님에게 여러가지 들으면서 대응책을 조사한다.
조사한 결과, 지금의 가상 환경에 라이브러리가 부족하지 않은 모습.
우선 libXrender를 넣어 본다.
$ yum -y install libXrender
위를 설치 한 후 페이지를 다시 보았을 때,
이번에는 "libfontconfig.so.1"이 ~라는 오류!
계속 추가 추가 추가 ぁ!
(그 밖에도 마찬가지로 에러가 나왔기 때문에 단번에 정리해 기재합니다)
$ yum -y install libfontconfig.so.1
$ yum -y install fontconfig
$ yum -y install libXext
그리고 마침내 ...
표시된 했어요!
소감
도하마했습니다.
gem이고, 거기까지 고생하지 않고 만질 것이라고 생각했지만,
그런 일은 없었다. 그냥 환상이었습니다.
하지만 어쨌든,
본래 하고 싶었던 HTML을 PDF로 변환하는 기능은 할 수 있었으므로,
좋았고 좋았습니다.
어쩌면 여기에서 먼저,
일본어 넣거나, 출력시의 레이아웃 조정 등,
여러 가지 더 어려운 일이 있다고 생각하지만,
우선은 단락으로서 일단 여기에서 단락짓습니다.
2019/01/09 추가:
계속 썼습니다.
결론
뭔가 눈치채는 점이 있으면,
지적이나 어드바이스등 받을 수 있으면 매우 도움이 됩니다!
Reference
이 문제에 관하여([Rails5] wicked_pdf 란 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/betti/items/8b65146903cce1ff739c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[client]
・MacOS Mojave(10.14.2)
・Vagrant 2.2.2
・VBoxManage 6.0.0
[virtual]
・CentOS 7.6
・Rails 5.2.2
・ruby 2.3.1
1.gem 설치
사전에 Rails 공부용으로 작성한 프로젝트로 진행합니다.
각 MVC는 적당히 게시판 앱을 상정하여 Posts 컨트롤러 등을 생성 완료되었습니다.
(index, show, edit의 빈 페이지를 볼 수있는 정도)
$ rails g model post
$ rails g controller posts index show edit
그 전제하에 Gemfile에 다음을 추가한다.
Gemfile
# wicked_pdf
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'
추가하면 설치.
$ bundle install
-----------
Fetching wicked_pdf 1.1.0
Installing wicked_pdf 1.1.0
Fetching wkhtmltopdf-binary 0.12.4
Installing wkhtmltopdf-binary 0.12.4
-----------
→無事に完了。
계속해서 이니셜라이저를 생성.
$ rails g wicked_pdf
create config/initializers/wicked_pdf.rb
2.wicked_pdf 설정하기
위의 명령으로 생성된 파일의 내용을 조정합니다.
wicked_pdf.rb
# WickedPDF Global Configuration
#
# Use this to set up shared configuration options for your entire application.
# Any of the configuration options shown here can also be applied to single
# models by passing arguments to the `render :pdf` call.
#
# To learn more, check out the README:
#
# https://github.com/mileszs/wicked_pdf/blob/master/README.md
WickedPdf.config = {
# Path to the wkhtmltopdf executable: This usually isn't needed if using
# one of the wkhtmltopdf-binary family of gems.
# exe_path: '/usr/local/bin/wkhtmltopdf',
# or
# exe_path: Gem.bin_path('wkhtmltopdf-binary', 'wkhtmltopdf')
# これを追記
:exe_path => "#{Gem.loaded_specs['wkhtmltopdf-binary'].full_gem_path}/bin/wkhtmltopdf"
# Layout file to be used for all PDFs
# (but can be overridden in `render :pdf` calls)
# layout: 'pdf.html',
}
이 설정의 기술 방법은 이쪽을 참고로 했습니다.
견적:
rails에서 wicked_pdf를 사용하는 방법
by 🌸 님
또한 gem의 README에도 적혀 있지만,
Rails 버전이 오래된 경우
mime_types.rb
다음 설명이 필요할 것 같습니다.mime_types.rb
Mime::Type.register "application/pdf", :pdf
이번에는 새로운 버전의 Rails 때문에,
특히 추가하지 않아도 되므로 스루.
3.wicked_pdf를 사용해보기
이제 wicked_pdf를 사용하여 구현해 보겠습니다.
posts_controller.rb
def show
# とりあえず愚直に
respond_to do |format|
format.html
format.pdf do
render pdf: "sample", # PDF名
template: "posts/show.html.erb" # viewを対象にする
end
end
end
4. 동작 확인
그럼 서버를 시작해 페이지를 보자.
액세스 URL로
/posts/show
또는 /posts/show.html
지금까지와 같이 일반 HTML 페이지가 표시되었습니다.그리고 본제의
posts/show.pdf
에 액세스하면 ...오류! ! ! ! ! ! ! ! !
RuntimeError (Failed to execute:
["/usr/local/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/wkhtmltopdf-binary-0.12.4/bin/wkhtmltopdf", "-q", "file:////tmp/wicked_pdf20190108-8274-1n8d1sj.html", "/tmp/wicked_pdf_generated_file20190108-8274-7au09y.pdf"]
Error: PDF could not be generated!
Command Error: /usr/local/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/wkhtmltopdf-binary-0.12.4/bin/wkhtmltopdf_linux_amd64: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory
):
명령 오류의 결과로 생성 실패했습니다.
libXrender.so.1이 없습니까?
오류 해결
어쩐지・・・.
라는 느낌으로 벽에 부딪쳤기 때문에,
Google 선생님에게 여러가지 들으면서 대응책을 조사한다.
조사한 결과, 지금의 가상 환경에 라이브러리가 부족하지 않은 모습.
우선 libXrender를 넣어 본다.
$ yum -y install libXrender
위를 설치 한 후 페이지를 다시 보았을 때,
이번에는 "libfontconfig.so.1"이 ~라는 오류!
계속 추가 추가 추가 ぁ!
(그 밖에도 마찬가지로 에러가 나왔기 때문에 단번에 정리해 기재합니다)
$ yum -y install libfontconfig.so.1
$ yum -y install fontconfig
$ yum -y install libXext
그리고 마침내 ...
표시된 했어요!
소감
도하마했습니다.
gem이고, 거기까지 고생하지 않고 만질 것이라고 생각했지만,
그런 일은 없었다. 그냥 환상이었습니다.
하지만 어쨌든,
본래 하고 싶었던 HTML을 PDF로 변환하는 기능은 할 수 있었으므로,
좋았고 좋았습니다.
어쩌면 여기에서 먼저,
일본어 넣거나, 출력시의 레이아웃 조정 등,
여러 가지 더 어려운 일이 있다고 생각하지만,
우선은 단락으로서 일단 여기에서 단락짓습니다.
2019/01/09 추가:
계속 썼습니다.
결론
뭔가 눈치채는 점이 있으면,
지적이나 어드바이스등 받을 수 있으면 매우 도움이 됩니다!
Reference
이 문제에 관하여([Rails5] wicked_pdf 란 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/betti/items/8b65146903cce1ff739c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
뭔가 눈치채는 점이 있으면,
지적이나 어드바이스등 받을 수 있으면 매우 도움이 됩니다!
Reference
이 문제에 관하여([Rails5] wicked_pdf 란 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/betti/items/8b65146903cce1ff739c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)