我在我的应用程序中使用的 Gems 是 Prawn、Cloudinary、Carrierwave 和 ckEditor。
我使用 Cloudinary 来存储图像。在 Carrierwave 的帮助下,我使用 ckEditor(所见即所得)将图像上传到 Cloudinary。
下面是一个完整的 ckEditor 上传器。ckeditor_picture_uploader.rb
class CkeditorPictureUploader < CarrierWave::Uploader::Base
include Ckeditor::Backend::CarrierWave
include Cloudinary::CarrierWave
include CarrierWave::MiniMagick
[:extract_content_type, :set_size, :read_dimensions].each do |method|
define_method :"#{method}_with_cloudinary" do
send(:"#{method}_without_cloudinary") if self.file.is_a?(CarrierWave::SanitizedFile)
{}
end
alias_method_chain method, :cloudinary
end
process :read_dimensions
# Create different versions of your uploaded files:
version :thumb do
process :resize_to_fill => [118, 100]
end
version :content do
process :resize_to_limit => [800, 800]
end
# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
def extension_white_list
Ckeditor.image_file_types
end
end
在 Publication(我使用 ckEditor 的地方)控制器显示操作中,我指定了 Prawn 使用的参数:
respond_to do |format|
format.html
format.pdf do
pdf = PublicationPdf.new(@publication)
send_data pdf.render, filename: "#{@publication.title}.pdf",
type: "application/pdf",
disposition: "inline"
我在指定尺寸时使用单独的文件来生成 PrawnPDF。出版物_pdf.rb:
class PublicationPdf < Prawn::Document
require "open-uri"
def initialize(publication)
super(top_margin: 50)
@publication = publication
ckeditor_pic
end
def ckeditor_pic
image open("http://res.cloudinary.com/long_path/f29d54371fa9d7_development.jpg")
end
end
在 ckeditor_pic 方法中,我只是给出 Cloudinary 的直接路径,以查看 Prawn 是否会生成带有图像的 PDF,并且确实如此。现在我想为 Prawn 提供通用路径,以使用从 Cloudinary 获取的图片生成 PDF。
对我来说,问题是给出这个通用路径。如何向 Prawn 表明他必须从 Cloudinary 获取图像以获取特定的发布记录?