美文网首页前端开发那些事儿
3、前端页面如何优雅的显示PDF(中):渲染文本

3、前端页面如何优雅的显示PDF(中):渲染文本

作者: 编程琐事 | 来源:发表于2020-04-10 09:00 被阅读0次

    推荐阅读

    通过上节,我们能把pdf 文件渲染到页面实现预览功能,此时PDF只是一个图像文件,如果满足文本复制功能,我们需要把 pdf 文件的文本内容也要解析出来,渲染到相应的位置。我们就能像复制网页文字那样复制pdf里面的文字

    使用依赖包

    pdf.js 是能够在canvas 页面上渲染出文本。需要用到的文件。
    渲染的原理:在canvas同样的位置添加一个div, 把文本信息渲染到div中

    • text_layer_builder.js
    • text_layer_builder.css

    引入文件

    import { TextLayerBuilder } from 'pdfjs-dist/web/pdf_viewer';
    import 'pdfjs-dist/web/pdf_viewer.css';
    

    开始编码

    编写一个 renderText 函数

    const renderText = (textContent, canvas, page, viewport) => {
        const textLayerDiv = document.createElement('div');
    
        textLayerDiv.setAttribute('class', 'textLayer');
    
        textLayerDiv.style.width = `${canvas.width}px`
        textLayerDiv.style.height = `${canvas.height}px`
        
        // 将文本图层div添加至每页pdf的div中
        const pageDom = canvas.parentNode
        pageDom.appendChild(textLayerDiv);
    
        // 创建新的TextLayerBuilder实例
        const textLayer = new TextLayerBuilder({
            textLayerDiv,
            pageIndex: page.pageIndex,
            viewport,
        });
    
        textLayer.setTextContent(textContent);
    
        textLayer.render();
        }
    

    参数说明:

    textContent:文本信息
    canvas: 渲染PDF的Canvas
    page: 渲染的页面
    viewport: 渲染PDF时的PDF
    

    除此之外我们需要修改上节渲染PDF的一段代码

    await renderTask.promise.then(() => {
        return page.getTextContent()
    }).then(textContent => {
        renderText(textContent, canvas, page, viewport)
    })
    

    函数说明

    getTextContent():该函数的成功回调会返回PDF页面上的文本片段。
    
    TextLayerBuilder():该类的实例有两个重要的方法。
    
    setTextContent():用于设置page.getTextContent()函数返回的文本片段;
    
    render():用于渲染文本图层。
    

    到此位置PDF的渲染已经全部完成了,但是他的功能只限于浏览,如果想要翻页还需要修改源代码,下节我们编写工具栏实现翻页和缩放

    源码地址:https://github.com/LiuSandy/react-pdf-render

    相关文章

      网友评论

        本文标题:3、前端页面如何优雅的显示PDF(中):渲染文本

        本文链接:https://www.haomeiwen.com/subject/ajjkmhtx.html