Angluar 实现pdf页面预览以及编辑

news/2024/7/8 4:02:17 标签: pdf

之前用过一个pdf预览的lib,并且还支持在线编辑,和直接下载编辑之后的pdf和直接打印,还不错,记录下

PdfShowcase

首先安装依赖

npm install ngx-extended-pdf-viewer

然后引入 

import { NgxExtendedPdfViewerModule } from "ngx-extended-pdf-viewer";
imports: [
  
    NgxExtendedPdfViewerModule,
  
  ],

然后就可以在html中使用了,我是因为项目需求关闭了某些功能,具体哪些功能怎么用就不一一介绍了,看官方文档就行了。 

<ngx-extended-pdf-viewer
                [height]="'auto'"
                [textLayer]="true"
                [zoom]="zoom"
                [showSidebarButton]="true"
                [showFindButton]="true"
                [showPagingButtons]="false"
                [showDrawEditor]="true"
                [showStampEditor]="false"
                [showTextEditor]="true"
                [showZoomButtons]="false"
                [showPresentationModeButton]="false"
                [showOpenFileButton]="false"
                [showPrintButton]="false"
                [showDownloadButton]="true"
                [showSecondaryToolbarButton]="false"
                [showRotateCwButton]="false"
                [showRotateCcwButton]="false"
                [showHandToolButton]="false"
                [showScrollingButton]="false"
                [showSpreadButton]="false"
                [showPropertiesButton]="false"
                [src]="file"
              ></ngx-extended-pdf-viewer>

这边是我的service,直接去后端获取源文件,然后赋值给[src]就行了 

  getFile(request:any): Observable<any> {
    return this.http.post(this.getTranslateCVFileUrl,request,{ responseType: 'blob' });
  }

但是似乎我是用的版本有个bug,就是他第一次展示的时候会显示不出来,缩小一下就行了,所以我这边手动修改了下zoom

      this.xxxxService.getFile(id).subscribe((res) => {
        this.zoom = "90%";
        this.orgin_file = res;
        this.file = this.orgin_file;
        timer(500).subscribe(() => {
          this.zoom = "100%";
        });
      });

 我的后端是python,你们看具体后端是什么修改一下自己的代码。我这边suppor了如果是docx就转换成pdf再返回,如果是pdf就直接把path传到send_file里面,as_attachment如果是需要浏览器弹出下载就True,否则就False

from flask import Response, current_app, send_file  
def get_cv_file(self,filename,ext,as_attch)->Response:
        app=current_app._get_current_object()
        root_path=app.config['ROOT_PATH']
        full_path=os.path.join(root_path, os.path.join(self.upload_path, filename+ext))
        if not os.path.isfile(full_path):
            raise FileNotFoundError(ErrorMassage.FILE_NOT_FOUND+full_path)
        if ext.lower() == FILE_EXT.DOCX:
            if not as_attch:
                pdf_path=self._cover_doc_docx_2_pdf(filename,ext,root_path)
                response=send_file(pdf_path, as_attachment=as_attch)
            else:
                response=send_file(full_path, as_attachment=as_attch)
        elif ext.lower() == FILE_EXT.PDF:
            response=send_file(full_path, as_attachment=as_attch)
        return response

 

如果部署nginx遇到了这个问题,可以看我这篇blog:

使用ngx-extended-pdf-viewer 20.0.0报错pdf-4.1.889.min.mjs:1 Failed to load module script_pdf.mjs:报错-CSDN博客

还有个需要注意的问题就是,他一个页面只能绘制一个ngx-extended-pdf-viewer 组件,我还没探究怎么绘制多个这个组件,动态显示就直接替换src就可以了。


http://www.niftyadmin.cn/n/5536623.html

相关文章

1)并发事务的问题

1) 并发事务的问题&#xff1f; &#xff08;1&#xff09;读“脏”数据 事务T1修改数据后T2读取了该数据&#xff0c;但是T1撤消了修改&#xff0c; 事务T1进行了回滚&#xff0c;导致事务T2读取的数据与数据库中的数据不一致。&#xff08;2&#xff09;丢失修改 两个事务…

Ruby 环境变量

Ruby 环境变量 概述 环境变量在编程中扮演着重要的角色,尤其是在Ruby这样的动态编程语言中。它们是操作系统用来存储有关其操作环境的信息的变量,可以在程序运行时影响其行为。Ruby程序可以通过环境变量来获取配置信息、系统细节或用户特定的设置。本文将深入探讨Ruby中环境…

数据资产赋能企业决策:通过精准的数据分析和洞察,构建高效的数据资产解决方案,为企业提供决策支持,助力企业实现精准营销、风险管理、产品创新等目标,提升企业竞争力

一、引言 在信息化和数字化飞速发展的今天&#xff0c;数据已成为企业最宝贵的资产之一。数据资产不仅包含了企业的基本信息&#xff0c;还蕴含了丰富的市场趋势、消费者行为和潜在商机。如何通过精准的数据分析和洞察&#xff0c;构建高效的数据资产解决方案&#xff0c;为企…

数据结构第08小节:双端队列

双端队列&#xff08;deque&#xff0c;double-ended queue&#xff09;是一种具有队列和栈特性的数据结构&#xff0c;允许在其两端进行插入和删除操作。在Java中&#xff0c;java.util.Deque接口就是双端队列的实现&#xff0c;而ArrayDeque和LinkedList是其中的具体实现类。…

电容的作用和应用

电容是一种常见的电子元件&#xff0c;在电路中起着多种重要作用&#xff0c;并广泛应用于各种电子设备和系统中。 一、电容的主要作用 储能&#xff1a;电容的基本作用是储存电荷。当电容两端加上电压时&#xff0c;电容会储存电荷&#xff0c;储存的电荷量与电压成正比。这…

直播视频怎么录制?让你秒变录制达人

随着直播行业的蓬勃发展&#xff0c;越来越多的人开始参与到直播中&#xff0c;分享自己的生活、技能与见解。然而&#xff0c;在直播过程中&#xff0c;有时我们希望能够记录下精彩的瞬间&#xff0c;或是将整个直播内容保存下来以供日后回顾或分享。可是直播视频怎么录制呢&a…

纯前端低代码开发脚手架 - daelui/molecule

daelui/molecule低代码开发脚手架&#xff1a;分子组件开发、预览、打包 页面代码示例、大屏代码示例预览 可开发页面组件 可开发大屏组件 项目git地址&#xff1a;https://gitee.com/daelui/molecule 在线预览&#xff1a;http://www.daelui.com/daelui/molecule/app/index.…

Docker-自定义镜像发布到DockerHub仓库、阿里云仓库

文章目录 推送镜像DockerHub仓库推送镜像阿里云仓库 更多相关内容可查看 推送镜像DockerHub仓库 在服务器中 使用 docker 登录命令 docker login -u 账户 #enter 后输入密码推送镜像到DockerHub docker push 镜像名:tag但个人不建议推送到DockHub上&#xff0c;毕竟不是咱自…