zoukankan      html  css  js  c++  java
  • python 富文本编辑器内容导出为pdf

    将富文本内容导出为pdf

    1.使用 xhtml2pdf 缺点 遇到样式问题时会报错,rgba之类的css问题解决不了

    from xhtml2pdf import pisa
    
    class CourseMaterialExportPdfAPIView(generics.GenericAPIView):
    
        permission_classes = (IsAuthenticatedOrHasOpenid,)
    
        def get(self, request, *args, **kwargs):
    
            pk = kwargs.get('pk')
    
            try:
    
                material = CourseMaterial.objects.get(id=pk)
    
                content = material.content
                
                import re
    			
                # 处理视频内容,因为不能展示视频,所以将视频的html代码转换为视频内容和连接
                pattern = re.compile(r'<video.*?>')
    
                video_list = pattern.findall(content)
    
                sub_dic = dict()
    
                for video_tem_code in video_list:
    
                    res = re.search('src=(.*?) ', video_tem_code)
    
                    url = res.group(1)
    
                    repl = '<p>视频内容地址:%s</p>' % url
    
                    sub_dic[video_tem_code] = repl
    
                for string, repl in sub_dic.items():
    
                    content = content.replace(string, repl)
    			
                # 需要安装xhtml2pdf模块  pip install
                from xhtml2pdf import pisa
    			# 处理汉字乱码问题
                from xhtml2pdf.default import DEFAULT_FONT
                
                DEFAULT_FONT['helvetica'] = 'yh'
    			
                #导出,直接下载pdf
                response = HttpResponse(content_type='application/pdf')
                response['Content-Disposition'] = 'attachment; filename=%s.pdf' % material.name
    			
                #content为富文本的内容, response为保存生成的pdf的地方
                pisa.CreatePDF(StringIO(content), response)
    
                return response
    
            except CourseMaterial.DoesNotExist:
    
                return Response({'status': 0, 'error': '活动不存在'})
    
    1. 使用wkhtmltopdf
            import pdfkit
            html_url = request.GET.get('html_url')
    
            # pdfkit配置
            config = pdfkit.configuration(wkhtmltopdf='/usr/local/bin/wkhtmltopdf') #wkhtmltopdf的安装路径
            options = {
                'page-size': 'Letter',
                'margin-top': '0.75in',
                'margin-right': '0.75in',
                'margin-bottom': '0.75in',
                'margin-left': '0.75in',
                'encoding': "UTF-8",
                'no-outline': None,
                'quiet': '',
            }
            # 生成的pdf存放路径
            pdf_path = '{}.pdf'.format(uuid.uuid4())
    
            # 主题 周计划,日计划导出,复用接口
            if html_url:
                pdfkit.from_url(html_url, pdf_path, configuration=config, options=options)
                file_name = request.GET.get('file_name')
            with open(pdf_path)as f:
                DEFAULT_FONT['helvetica'] = 'yh'
                response = StreamingHttpResponse(f.read(), mimetype="application/pdf")
                response['Content-Disposition'] = 'attachment; filename={}.pdf'.format(file_name)
    
            os.remove(pdf_path)
          ```
  • 相关阅读:
    .Net网站的web.config配置说明
    listview垂直滚动条效果
    .net 委托事件
    利用API实现窗体淡入淡出特效
    易经中的64个大智慧
    FlashWindowEx实现窗口在任务栏闪烁/变化颜色
    实现XML与DataTable互转 .NET
    C# .NET弹出窗口
    SVN使用教程
    在IE中使用VS.net WinForm控件
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/12621140.html
Copyright © 2011-2022 走看看