Ich habe eine ReportPdf
geerbt von Prawn::Document
.
Wenn ich es von Rails-Konsole testen, wird das eingebettete PNG-Bild in PDF korrekt gerendert.Bild nicht gerendert in Garnelen pdf mit AngularJs
ReportPdf.new(param1,param2).render_file('/Users/ZZ/Desktop/test.pdf')
Wenn es jedoch von der Steuerung angefordert wird:
def generate_pdf
pdf = ReportPdf.new(param1, param2)
send_data pdf.render, filename: 'report.pdf', type: 'application/pdf'
end
das Bild wurde nicht gemacht, andere ohne Probleme gemacht Inhalte.
Ich habe versucht, lokale Bild und Bild von Amazon S3 zu verwenden. Beide funktionieren gut in der Konsole, aber nicht vom Controller.
Die generate_pdf
Methode in Controller gibt auch eine richtige PDF. Das PDF wurde korrekt gerendert, wenn ich es direkt anfordere. Ich habe es mit Postman getestet.
Das Bild in PDF wurde jedoch nicht nur gerendert, wenn es über eine Exportschaltfläche in Angular angefordert wird. Die folgenden Ausführungen:
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.
});
};
Ich denke, das Problem ist, Codierung, Bild binäre Daten beschädigt wurde während der Codierung. Wo ist der Fehler?
Wo liegt Ihrer Ansicht nach Vorlage? d. h. 'report.pdf.erb' –
Ich verwende eine ähnliche Methode, die hier vorgestellt wurde (http://www.idyllic-software.com/blog/creating-pdf-using-prawn-in-ruby-on-rails/). Ich konvertiere HTML nicht in PDF, es gibt keine Ansichtsvorlage. –
1. Sie übergeben entweder die Rohdaten des Bildes oder den Pfad, je nachdem ob es sich um einen lokalen oder einen Remote-Pfad handelt. auch ... 2. versuche, die Daten oder Klasse des 'img'-Objekts auszudrucken, um den zurückgegebenen Wert von' open (img_url) 'zu überprüfen ... Ich frage mich, ob diese Zeile nicht dort ist, wo etwas seitwärts geht ... – Myst