如何使用pdfjs在整个pdf中旋转单页?

时间:2017-08-22 09:24:23

标签: javascript rotation pdf.js

我从mozilla下载了pdf.js库。它非常适合打开我的pdf文件并查看它们。问题是,当我点击旋转页面时,它会旋转所有页面,而不仅仅是所选页面。我试着用谷歌搜索并阅读了pdf.js的手册,但是在pdf.js中找不到旋转SINGLE pdf页面的相关资源请帮助

2 个答案:

答案 0 :(得分:0)

取决于您可能希望花多少工作以及您希望实现的目的:

手动旋转单页:

transform: rotate(90deg)transform: rotate(-90deg)应用于指定页面的容器元素 - 这可以通过使用内置开发人员工具在当前主流浏览器中完成。

我使用了Mozilla Firefox附带的内置查看器 - 页面放在div个容器中,这些容器由属性data-page-number标识。

以编程方式旋转单页:

function rotateSinglePage(pageNum, degree)
{
  var viewerMain = document.getElementById("viewer");
  var pageContainer = viewerMain.querySelector("div[data-page-number='" + pageNum + "']");
  pageContainer.style.transform = "rotate(" + degree + "deg)";
}

您可以通过浏览器的开发者工具调用此功能,也可以构建自己的界面(按钮/热键)。

如果您希望能够多次旋转,可以使用以下方式访问当前轮播:

function getCurrentRotation(pageNum)
{
  var viewerMain = document.getElementById("viewer");
  var pageContainer = viewerMain.querySelector("div[data-page-number='" + pageNum + "']");
  var rotationStyle = pageContainer.style.transform;

  //try to strip everything but the number
  //we assume number to be integer (without fraction)
  var rotation = rotationStyle.replace(/rotate\(([-]?[0-9]{0,3})deg\)/,"$1");
  var rotationDegree = Number.parseInt(rotation);

  //if parseInt fails, it returns NaN - this happens on empty string as well
  //by default an unrotated page (0 degree) has no transform style, so
  //we return 0 degree in this case
  if (Number.isNaN(rotationDegree)) { rotationDegree = 0; }
  return rotationDegree;
}

由于当前页面存储在document.getElementById("pageNumber").value中,您可以构建界面以旋转当前页面。

答案 1 :(得分:0)

您可以尝试使用此脚本,该脚本允许您逐步旋转所有页面并在必要时重置所有页面。

代码在每个页面DOM元素上添加一个数据属性rotation

    const rotatePages = (deg: number, force: boolean = false) => {
        const pageContainer = document.getElementById('viewer')
        if (pageContainer) {
          const pagesDOM: ReadonlyArray<HTMLDivElement> = Array.from(
            pageContainer.querySelectorAll(`div[data-page-number]`),
          )
          pagesDOM.forEach(pageDOM => {
            const datasetRotation = pageDOM.dataset.rotation
            let targetRotation = deg
            if (datasetRotation) {
              targetRotation = force ? deg : deg + Number(datasetRotation)
            }
            pageDOM.dataset.rotation = String(targetRotation)
            pageDOM.style.transform = `rotate(${targetRotation}deg)`
          })
        }

用作:

// incremental rotation    
rotatePages(90) // rotate all pages of 90 deg
rotatePages(90) // rotate all pages of +90 deg (now they are all rotated of 180 deg)

// reset rotation for all pages to 0 degree
rotatePages(0, true) 

如果您有兴趣获取页面的当前旋转度,而不是使用 .replace(/rotate\(([-]?[0-9]{0,3})deg\)/,"$1");

您可以简单地在dom中查询特定的数据属性rotation