0

我在我的应用程序中使用的 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 获取图像以获取特定的发布记录?

4

0 回答 0