Javascript 自定义pdf.js,javascript,ajax,pdf,web,pdf.js,Javascript,Ajax,Pdf,Web,Pdf.js,我想在我的webApplication中使用pdf.js并自定义它的视图,这样我就可以将它嵌入到我的应用程序的其余部分(我正在考虑使用iframe) 首先,我想去掉大多数默认工具栏按钮,如“打印”或“下载文件”,但保留缩放和页面导航。 相反,我希望这些功能(打印/下载)显示在应用程序的工具栏中。 怎么做?如何隐藏pdf.js工具栏上的打印/下载按钮,并使用已在Web应用程序中呈现的自定义按钮调用这些功能 或者我应该使用pdf.js以外的其他库 任何信息都非常有用 好的,我找到了方法。 要隐藏按钮

我想在我的webApplication中使用pdf.js并自定义它的视图,这样我就可以将它嵌入到我的应用程序的其余部分(我正在考虑使用iframe) 首先,我想去掉大多数默认工具栏按钮,如“打印”或“下载文件”,但保留缩放和页面导航。 相反,我希望这些功能(打印/下载)显示在应用程序的工具栏中。 怎么做?如何隐藏pdf.js工具栏上的打印/下载按钮,并使用已在Web应用程序中呈现的自定义按钮调用这些功能 或者我应该使用pdf.js以外的其他库 任何信息都非常有用 好的,我找到了方法。 要隐藏按钮,只需向其添加CSS类“hidden”,如“toolbarButton download hiddenMediumView hidden”。 要下载该文件,只需调用“PDFViewerApplication.download();”。要打印它,请使用window.print() 所有处理程序都列在view.js文件中。只需搜索“//事件处理函数”。在我的版本中,它在1840行
我想这是最简单的方法。当然,按钮可以完全从DOM中删除,但这意味着也会更改view.js文件。您还可以构建自己的pdf查看器。您需要在文档中添加画布元素。请参阅下面的示例代码。您可以添加简单的按钮或屏幕滑动来导航到下一页,或使用不同比例的页面重新加载。最初将其设置为适合屏幕宽度。 另请参见中的示例。 示例代码:
    function initializePsfJS() {
    pdfDoc = null;
    pageNum = 1;
    pageRendering = false;
    pageNumPending = null;
    scale = 1;
    canvas = document.getElementById('the-canvas');
    ctx = canvas.getContext('2d');
    viewport = null;
    PDFJS.workerSrc = './js/pdf.worker.js';
 * Get page info from document, resize canvas accordingly, and render page.
 * @param num Page number.
function renderPage(num) {
    pageRendering = true;
    // Using promise to fetch the page
    pdfDoc.getPage(num).then(function (page) {
        if (scale === "fit") {
            var unscaledViewport = page.getViewport(1);
            var viewerCont = document.getElementById('viewerDiv');
            var bdrec = viewerCont.getBoundingClientRect();
            scale = Math.min((bdrec.height / unscaledViewport.height), (bdrec.width / unscaledViewport.width));
        viewport = page.getViewport(scale);
        canvas.height = viewport.height;
        canvas.width = viewport.width;
        // Render PDF page into canvas context
        var renderContext = {
            canvasContext : ctx,
            viewport : viewport
        var renderTask = page.render(renderContext);
        // Wait for rendering to finish
        renderTask.promise.then(function () {
            pageRendering = false;
            if (pageNumPending !== null) {
                // New page rendering is pending
                renderPage(pageNumPending);
                pageNumPending = null;
            calculateinitialXY();
 * If another page rendering in progress, waits until the rendering is
 * finised. Otherwise, executes rendering immediately.
function queueRenderPage(num) {
    if (pageRendering) {
        pageNumPending = num;
    } else {
        renderPage(num);
function getDocumentByXMLHttpRequest() {
    //reason for this
    //http://stackoverflow.com/questions/36199155/pdf-file-generated-by-post-request-not-opening
    var header = getHeader();
    var requesturl =  < url rest service url to fetch document >
        var xhr = new XMLHttpRequest();
    xhr.open('GET', requesturl);
    xhr.setRequestHeader(header.key, header.value);
    xhr.responseType = 'arraybuffer';
    xhr.onload = function () {
        if (this.status == 200) {
            onloadDocumentFromContent(this.response);
        } else {
            navigator.notification.alert('Error while requesting pdf with id ' + getDocumentId());
    xhr.send();
function onloadDocumentFromContent(pdfraw) {
    var docInitParams = {
        data : pdfraw
    PDFJS.getDocument(docInitParams).then(function (pdfDoc_) {
        pdfDoc = pdfDoc_;
        // Initial/first page rendering
        renderPage(pageNum);
function initializePsfJS(){
pdfDoc=null;
pageNum=1;
pageRendering=false;
pageNumPending=null;
比例=1;
canvas=document.getElementById('the-canvas');
ctx=canvas.getContext('2d');
viewport=null;
PDFJS.workerSrc='./js/pdf.worker.js';
*从文档中获取页面信息,相应地调整画布大小,并呈现页面。
*@param num页码。
函数呈现页面(num){
pageRendering=true;
//使用promise获取页面
pdfDoc.getPage(num).然后(函数(第页){
如果(比例=“适合”){
var unscaledViewport=page.getViewport(1);
var viewerCont=document.getElementById('viewerDiv');
var bdrec=viewerCont.getBoundingClientRect();
比例=数学最小值((bdrec.height/unscaledViewport.height),(bdrec.width/unscaledViewport.width));
viewport=page.getViewport(比例);
canvas.height=viewport.height;
canvas.width=viewport.width;
//将PDF页面呈现到画布上下文中
var renderContext={
画布背景:ctx,
视口:视口
var renderTask=page.render(renderContext);
//等待渲染完成
renderTask.promise.then(函数(){
pageRendering=false;
如果(pageNumPending!==null){
//新页面呈现挂起
渲染页面(pageNumPending);
pageNumPending=null;
计算初始XY();
*如果正在进行另一个页面渲染,请等待渲染完成
*完成了。否则,将立即执行渲染。
函数queueRenderPage(num){
如果(页面渲染){
pageNumPending=num;
渲染页面(num);
函数getDocumentByXMLHttpRequest(){
//原因何在
//http://stackoverflow.com/questions/36199155/pdf-file-generated-by-post-request-not-opening
var header=getHeader();
var requesturl=
var xhr=new XMLHttpRequest();
xhr.open('GET',requesturl);
setRequestHeader(header.key,header.value);
xhr.responseType='arraybuffer';
xhr.onload=函数(){
如果(this.status==200){
onloadDocumentFromContent(this.response);
navigator.notification.alert('请求id为'+getDocumentId()的pdf时出错);
xhr.send();
函数onloadDocumentFromContent(pdfraw){
var docInitParams={
资料来源:pdfraw
getDocument(docInitParams).then(函数(pdfDoc){
pdfDoc=pdfDoc;
//初始/第一页呈现
渲染页面(pageNum);

如果您使用的是pdfjs web版本,并且您想隐藏打印按钮,例如,您可以执行以下操作:
 <iframe
        src={`/pdfjs/web/viewer.html?file=${pdfFile}`}
        onLoad={(e) => {
               Array.from(e.target.contentDocument
                    .getElementsByClassName('print'))
                    .forEach((i) => { i.classList.add('hidden'); });
 </iframe>
Array.from(例如target.contentDocument
.GetElementsByCassName('print'))
.forEach((i)=>{i.classList.add('hidden');});
您需要将样式添加到iframe呈现的新HTML中,默认情况下,浏览器不会将主应用程序中的样式应用到iframe呈现的应用程序
另一个例子是添加简单的颜色更改:
 <iframe id='iframe_pdfjs'
    src={`/pdfjs/web/viewer.html?file=${pdfFile}`}
    onLoad={(e) => {
           const cssStyle = document.createElement('style');
           cssStyle.innerHTML = 'div {color: red;}';
    document.getElementsById('iframe_pdfjs').contentDocument.head.appendChild(cssStyle)
        ></iframe>
const cssStyle=document.createElement('style');
cssStyle.innerHTML='div{color:red;}';
document.getElementsById('iframe_pdfjs').contentDocument.head.appendChild(cssStyle)

在上面的示例中,我们只是简单地向iframe呈现的HTML添加样式标记,我认为这些可能已经被重构为
  • [ajax]相关文章推荐
  • PHP yii如何使用chtml类调用ajax render partial?
  • Ajax apex:actionFunction和Database.Update()意外页面刷新
  • Ajax 使用GAE通道api优雅地处理封闭通道
  • JSF PrimeFaces/Ajax对Datable的呈现无法将项添加到列表中
  • Ajax 如何在循环命名容器中寻址组件
  • Ajax HighCharts数据与JavaScript PHP JSON
  • 在AJAX函数中定义$(this),并附加在另一个AJAX成功函数中创建的父级
  • Ajax 在路由mvc中发送空间
  • Ajax Wicket http post,从servletrequest获取原始数据?
  • Ajax 传递地图&lt;字符串,字符串&gt;到springMVC控制器
  • Ajax Primefaces单页应用程序
  • 在coffeescript中,如何使控制器中的变量可用,并通过ajax返回结果以填充数据表?
  • Ajax 如何在JQGRID中使用keyup事件进行筛选?
  • 返回的ajax数据字段不是';不可接近
  • Grails:如何使用remoteFunction(ajax)将数组(而不是字符串!)从控制器传递到视图?
  • Ajax 知识背景处理问题
  • Ajax 存在未定义元素时的angular-invoke()
  • Io fortran流文件中的写入数据格式问题
  • t、 是典型煽动家的武器之一。如果你不是故意的,那么你应该更小心地避免它。这是一条建议:请参阅(“小心谁的建议…”)的最后第二段。lazy\u list\u character\u count/1是pio的一个补充,它违反了pio的一个原始属性:它可以以完
  • NUMA系统中的操作系统如何路由和处理MMIO、IO和PCI配置请求? TL;博士
  •