我正在接收base64格式的PDF文件。我想在新标签中显示它。 我尝试过-
这是我的控制器代码,用于将数据发送回浏览器
send_data Base64.decode64(params[:base64_file]), :type => 'application/pdf', :filename => "#{params[:name]}.pdf", :disposition => "inline"
查看文件:
<a href='<%= show_pdf_url({:pdf_body => pdf_body, :name => "download.pdf" %>' target='_blank'>
但是会引发“请求实体太大”错误。
试图将其更改为--
<a href='#' class='pdf-download'/>
并致电-
$('.pdf-download').on('click', function(event){
var get_all_admin = jQuery(this);
var w = window.open('about:blank');
w.document.body.appendChild(w.document.createElement('iframe')).src = 'data:application/octet-stream;base64,${get_all_admin.data("base64_file")}';
但是它什么也没做,最终在新标签页中加载了同一页面。
帮帮我,我被困在这里。
答案 0 :(得分:0)
所以,我最终使用了这个-
我没有尝试将其附加到新的iFrame,而是将输出写入了iFrame。我真的希望我能够使用send_data
-
$(document).on('click', '.pdf-download', function(event){
var get_all_admin = jQuery(this);
event.preventDefault();
let pdfWindow = window.open("")
pdfWindow.document.write("<iframe style='position: fixed; top: 0; left: 0;' width='100%' height='100%' src='data:application/pdf;base64, " + encodeURI(get_all_admin.data("base64_file"))+"'></iframe>")
});
get_all_admin在哪里获取我在URL中设置的数据,就像这样-
<a href='#' data-base64_file='<%=mydoc.body%>' data-name='<%= get_pdf_name(mydoc.id, mydoc.invoice_date) %>' target='_blank' class='pdf-download' >
这里的mydoc是我以Base64格式获取pdf文件的输出。