【问题标题】:Get the Trim Area of a PDF with PDF.js?使用 PDF.js 获取 PDF 的修剪区域?
【发布时间】:2015-05-05 12:38:18
【问题描述】:

我正在使用 PDF.js,但似乎找不到解决问题的方法。

我有一个带有裁切区域和出血的 PDF,我需要获取裁切区域以便在 HTML 画布中裁切 PDF 图像数据。

我看到 Acrobat 具有可以基于 getPageBox("Trim") 返回 Trim 的 javascript。 PDF.js 中是否有任何等价物? 在控制台中检查 Javascript PDF 对象时,我似乎找不到参考。

【问题讨论】:

    标签: javascript html pdf trim pdf.js


    【解决方案1】:

    我在编辑pdf.worker.js 后能够得到它。用 1.7.225 测试。首先,在get cropBox() 之后添加get trimBox(),如下所示:

     get trimBox() {
      var trimBox = this.getInheritedPageProp('TrimBox', true);
      if (!isArray(trimBox) || trimBox.length !== 4) {
       return shadow(this, 'trimBox', this.mediaBox);
      }
      return shadow(this, 'trimBox', trimBox);
     },
    

    现在,在WorkerMessageHandler 的handler.on('GetPage', function ... 中,添加如下几行:

     handler.on('GetPage', function wphSetupGetPage(data) {
      return pdfManager.getPage(data.pageIndex).then(function (page) {
       var rotatePromise = pdfManager.ensure(page, 'rotate');
       var refPromise = pdfManager.ensure(page, 'ref');
       var userUnitPromise = pdfManager.ensure(page, 'userUnit');
       var viewPromise = pdfManager.ensure(page, 'view');
       var trimBoxPromise = pdfManager.ensure(page, 'trimBox');  //added
       return Promise.all([
        rotatePromise,
        refPromise,
        userUnitPromise,
        viewPromise,
        trimBoxPromise  //added
       ]).then(function (results) {
        return {
         rotate: results[0],
         ref: results[1],
         userUnit: results[2],
         view: results[3],
         trimBox: results[4]  //added
    

    就是这样。现在您可以通过page.pageInfo.trimBox 在您的应用中获取修剪框。

    【讨论】:

      【解决方案2】:

      除了@Sangbok Lee 的出色回答, 如果您使用最新的 PDF.js 版本,则 this.getInheritedPageProp 函数已更改为 this._getInheritableProperty('TrimBox', true)

      【讨论】:

        【解决方案3】:

        想通了。 对于其他可能对第 2654 行上的 pdf.worker.js 感兴趣的人,我添加了以下内容,暴露了 trimBox。

        tboxX = this.pageDict.map.TrimBox[0];
        tboxY = this.pageDict.map.TrimBox[1];
        tboxW = this.pageDict.map.TrimBox[2];
        tboxH = this.pageDict.map.TrimBox[3];
        

        我确信有一种更简洁的方法,但它确实有效。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-05
          • 2012-08-18
          • 2013-01-02
          • 1970-01-01
          • 2014-05-09
          • 2021-01-19
          相关资源
          最近更新 更多