使用PDF.js获取PDF的修剪区域

Get the Trim Area of a PDF with PDF.js?

本文关键字:PDF 修剪 区域 获取 js 使用      更新时间:2023-09-26

我在玩PDF.js,似乎找不到解决问题的方法。

我有一个带有修剪区域和出血的PDF,我需要得到修剪区域,这样我就可以在HTML画布中裁剪PDF图像数据。

我看到Acrobat有javascript可以返回基于getPageBox的Trim("Trim")。PDF.js中有类似的东西吗?在控制台中检查Javascript PDF对象时,我似乎找不到参考。

我能够在编辑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);
 },

现在,在WorkerMessageHandlerhandler.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在你的应用程序中获得装饰框。

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

想明白了。对于其他可能对第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];

我相信有一个更整洁的方法,但它是有效的。