2013-03-08 1 views
1

자바 스크립트 앱이 있습니다. 버튼을 클릭하면 POST 요청을 사용하여 Django-Pisa 원격 서버에 JSON 객체가 전송되어 JSON 객체에서 PDF 파일을 만듭니다. JSON 길이는 GET 허용 길이를 초과하므로 POST를 사용해야합니다.Python에서 PDF 콘텐츠가 반환 된 새 브라우저 창 열기 Pisa

이 내 장고 기능 자바 스크립트 측면에서

@csrf_exempt 
def render_to_pdf(request): 
    request_data = ast.literal_eval(request.POST.keys()[0]) 
    template_src = templates_map.TEMPLATES_MAP[request_data['intervention']] 
    context_json = request_data['data'] 
    template = get_template(template_src) 
    context = Context(context_json) 
    html = template.render(context) 
    result = StringIO.StringIO() 

    pdf = pisa.pisaDocument(StringIO.StringIO(html), result,link_callback=fetch_resources) 

    if not pdf.err: 
    return HttpResponse(result.getvalue(), content_type='application/pdf') 
    return HttpResponse('We had some errors<pre>%s</pre>' % escape(html)) 

렌더링,이 클릭 이벤트입니다

try { 
    jQuery.post('http://pdfgen-server/pdfgen', JSON.stringify(requestData), 
    function(data) { 
     var w = window.open(); 
     w.document.write(data); 
    }); 
} 
catch (err) { 
    ; //error handling 
} 

내가 뭘 내가 돌아올하는 대신, 새 창 및 내용입니다 클릭하면 렌더링 된 PDF 파일은 문자 그대로 PDF 콘텐츠입니다 (PDF 파일을보기 위해 메모장을 열어 놓은 것). 새 브라우저 창에서 처음 몇 줄 :

% PDF-1.4 %의 ReportLab 생성 된 PDF 문서 http://www.reportlab.com% 'BasicFonts': 클래스 PDFDictionary 1 0 OBJ % 표준 글꼴 < </F1 2 0 R/F2를 사전을 3 0 R/F3 4 0 R/F4 5 0 R >> endobj % 'F1': 클래스 PDFType1 글꼴 2 0 obj % 글꼴 Helvetica < </BaseFont/Helvetica/인코딩/WinAnsiEncoding/Name/F1/Subtype/Type1/Type/글꼴 >> endobj %의 'F2': 클래스 PDFType1Font 3 0 OBJ % 글꼴 타임즈 로마 < </BASEFONT/Times-

이 문제를 어떻게 해결할 수 있는지 알려주십시오.

감사

답변

1

나는이 작동 실제로 모르겠지만,이 시도 제공 - (이 this question에 다음, 신용을 작업을 수행하는 경우)

try { 
    jQuery.post('http://pdfgen-server/pdfgen', JSON.stringify(requestData), 
    function(data) { 
     window.open("data:application/pdf," + escape(data)); 
    }); 
} 
catch (err) { 
    ; //error handling 
} 

을 도와

+0

감사합니다 . 그것은 전혀 작동하지 않습니다. –

+0

실제로는 window.open ("data : application/pdf"+ escape (data));이어야합니다. –

+0

트릭이 IE6/7에서 작동하지 않습니다. Chrome에서 잘 작동합니다. IE 6/7은 dataURI를 지원하지 않습니다. 불행히도 IE가 붙어 있습니다. –