2015-08-24 14 views
9

Ho uno ReportPdf ereditato da Prawn::Document.
Quando lo provo dalla console di Rails, l'immagine png incorporata in pdf è stata renderizzata correttamente.Immagine non riprodotta in gamberi pdf utilizzando AngularJs

ReportPdf.new(param1,param2).render_file('/Users/ZZ/Desktop/test.pdf') 

Tuttavia, quando viene richiesto dal regolatore:

def generate_pdf 
    pdf = ReportPdf.new(param1, param2) 
    send_data pdf.render, filename: 'report.pdf', type: 'application/pdf' 
end 

l'immagine non è stata reso, altri contenuti resi senza problemi.

Ho provato a utilizzare l'immagine locale e l'immagine da Amazon S3. Entrambi funzionano bene in console ma non dal controller.

Il metodo generate_pdf nel controller fornisce anche un pdf corretto. Il PDF è stato correttamente visualizzato se richiesto direttamente. L'ho provato con Postman.

Tuttavia, l'immagine in PDF non è stata visualizzata solo quando è richiesta da un pulsante di esportazione in Angolare. I seguenti sono implementazioni:

backend:

class ReportPdf < Prawn::Document 
    def initialize(param1, param2) 
    super() 
    @param1 = param1 
    @date = Time.zone.parse(param2) || Time.zone.now 
    header 
    end 

    def header 
    img = open('https://s3-ap-southeast2.amazonaws.com/bucket/folder/logo.png') 
    # use local image 
    # img = "#{Rails.root}/app/assets/images/logo.png" 
    data = [[{ image: img, image_width: 150, vposition: :center }, 
      "#{@param1.name} - #{@param2.suburb}"]] 
    table(data, cell_style: { borders: {}, 
          valign: :center, align: :right, size: 25, width: 
          270 }) 
    end 
end 

Frontend:

$scope.exportToPdf = function() { 
    var tmpDate = moment(new Date($scope.date)).format('DD-MM-YYYY'); 
    $http({ 
     method: 'GET', 
     url: '/resourceA/' + $stateParams.resourceAId + '/resourceB/daily_pdf?day=' + tmpDate 
    }). 
    success(function(data, status, headers, config) { 
     var anchor = angular.element('<a/>'); 
     anchor.attr({ 
     href: 'data:application/pdf;charset=utf-8,' + encodeURI(data), 
     target: '_blank', 
     download: 'daily_report.pdf' 
     })[0].click(); 
    }). 
    error(function(data, status, headers, config) { 
     // something here. 
    }); 
    }; 

Credo che il problema è la codifica, immagine dati binari è stato danneggiato durante la codifica. Dov'è l'errore?

+0

Dove è il tuo modello di vista? i.e 'report.pdf.erb' –

+0

Sto usando un metodo simile presentato qui (http://www.idyllic-software.com/blog/creating-pdf-using-prawn-in-ruby-on-rails/). Non sto convertendo html in pdf, non esiste un modello di visualizzazione. –

+0

1. si passa o ai dati grezzi dell'immagine o al percorso, a seconda che sia locale o remoto - ciò sembra non essere disponibile; anche ... 2. prova a stampare i dati o la classe dell'oggetto 'img' per rivedere il valore restituito da' open (img_url) '... Mi chiedo se quella linea non è dove qualcosa va lateralmente ... – Myst

risposta

0

Difficile dire dove sia l'errore quando non è possibile vedere il codice che sta cercando di aggiungere l'immagine al PDF. In che modo ReportPdf accede all'immagine?

Forse c'è un suggerimento qui per la vostra situazione. Nel mio codice, quando si genera un pdf per una galleria, la galleria crea il PDF, e ha ciascuna delle sue foto si aggiungono al PDF con una chiamata del tipo:

photo = Photo.find(photo_id) 
photo.add_to_pdf(pdf, h_pos, v_pos, h_size, v_size) 

il metodo della classe foto usi (CALC di layout rimossi):

def add_to_pdf(pdf, h_pos, v_pos, h_size, v_size) 
    pdf.image self.image.path(:full), 
      :position => pos_sym, 
      :vposition => vpos_sym, 
      :fit => [size,vsize] 
end 

Prawn per la generazione di pdf, graffetta per gli allegati di immagini (foto has_attached_file: immagine)

+0

Ho aggiunto il codice di accesso all'immagine –

Problemi correlati