Javascript pdf.js mozilla lib问题以正确的顺序获取或提取纯文本

Javascript pdf.js mozilla lib问题以正确的顺序获取或提取纯文本,javascript,pdf,extract,pdfjs,Javascript,Pdf,Extract,Pdfjs,我需要获得纯文本从pdf使用pdf.js与正确的文本顺序。 我需要Mozilla的pdf.js2.x的帮助(我使用2.0.550)。 我花了几天时间去寻找解决方案,但没有成功 目标:使用Mozilla的pdf.js从pdf文件中提取正确的纯文本,而不渲染pdf图像(画布或svg),如果可能,最好不使用文本层 我知道这里有一个类似的问题,但没有答案-原因和如何解决它。链接是 此外,我还回顾了列表中的其他问题以及可能的答案 从每一页都可以得到。我使用getTextContent()函数,它返回一个包

我需要获得纯文本从pdf使用pdf.js与正确的文本顺序。 我需要Mozilla的pdf.js2.x的帮助(我使用2.0.550)。 我花了几天时间去寻找解决方案,但没有成功

目标:使用Mozilla的pdf.js从pdf文件中提取正确的纯文本,而不渲染pdf图像(画布或svg),如果可能,最好不使用文本层

我知道这里有一个类似的问题,但没有答案-原因和如何解决它。链接是 此外,我还回顾了列表中的其他问题以及可能的答案

从每一页都可以得到。我使用getTextContent()函数,它返回一个包含“items”数组的对象。有一个包含元素的对象。需要包含页面中文本的“.str”。 但秩序是错误的。是否有可能像在原始页面中一样获得正确的文本顺序

结果你们可以看到顺序是错误的。 但我很惊讶,因为使用相同或相似的代码,渲染层显示正确的图像。当我检查带有文本层的pdfjs应用程序时,我可以看到许多带有文本不同部分的标签。有时,数字在一行上。我看每个标签都包含字体\样式文本组

  • 可能吗
  • 代码中有错误吗?我怎么能修好它
  • 是否有一些属性显示我可以用来恢复原始文本的顺序
  • 也许还有其他功能来提取文本
  • 其他想法
附加内容: 我看到obj{}.items[].transform[]数组的元素[4]类似于X,元素[5]类似于Y坐标。这是真的吗? 手动对每个“str”元素从上到下、从左到右排序并获得正确的文本顺序是否有用? 也许在Pdf.js中有一些函数可以做得更好

提前谢谢

技术规格: 链接到要测试的PDF文件: 其他pdf也有同样的问题

代码:

控制台中的结果:

 1. How to align these objects
 2. You can open a PDF or create a blank PDF by PDFill.
 3. Here are the seven types of PDF Commenting created by PDFill
 4. Goto Page 4: Text Box Tool
 5. Goto Page 6: Sticky Note Tool
 6. Goto Page 7: Popup Tool
 7. Goto Page 8: File Attachment Tool
 8. Goto Page 9: Play Video Tool
 9. Goto Page 11: Line or Arrow Tool
 10. Goto Page 12: Rectangle or Oval Tool
 11. Next Page
 12. Next Page
 13. First Page
 14. Previous Page
 15. Next Page
 16. Last Page
 17. Please save into a new PDF to see the effect!
 18. Online Help
 19. PDFill: PDF Commenting or Annotation
 20. Goto Page 13: Polyline, Cloud and Pencil Tool
 21. Goto Page 2: Select Original Texts
 22. Goto Page 5: Highlight Tool
 23. Goto Page 10: Link Tool
 24. Goto Page 3: Stamp Tool
配置: -网络浏览器及其版本:chrome版本66.0.3359.181(官方版本)(64位) -操作系统及其版本:Linux 4.15.0-22-generic 24 Ubuntu SMP星期三5月16日12:15:17 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux -NG模块-pdfjs区 -PDF.js版本:2.0.550(另附2.0.489) -角度6/节点8x/npm 5x/TS

我知道了。 简短-将所有文本放入一个数组和/或集合,然后从变换数组中按相反的Y坐标和X坐标排序,以获得正确的顺序。

说明: 很高兴了解PDF文件中的Y轴方向相反。我得到了它,并找到了一些额外的信息后,调试时间

因此,这里是一个简单的工作,以获得共同的正确的文本顺序。 1.按原样获取所有元素。 2.然后在Items数组中查找Transform数组。 3.获取该元素的数组变换值X(第4)和Y(第5)个位置。 4.我使用Lodash.js将最终得到的X和Y数组分为两类。注意,您需要先按Y从大到小排序,因为Y在PDF中是反向的。然后按X排序

_.orderBy(pagetext, ['y','x'], ['desc', 'asc'] )
在下面的代码中,我假设您得到了PDF页面对象。 代码:

下面是一个关于页面上1个文本元素的数组示例。正如我在上面的问题中所展示的那样,您将以自定义顺序获得许多具有getTextContent的元素

//From console:
Object
items : Array(24)
str : "How to align these objects"
transform : (6) [18, 0, 0, 18, 349.76, 335.25]
width : 190.78199999999998
__proto__
祝你好运:)

我拿到了。 简短-将所有文本放入一个数组和/或集合,然后从变换数组中按相反的Y坐标和X坐标排序,以获得正确的顺序。

说明: 很高兴了解PDF文件中的Y轴方向相反。我得到了它,并找到了一些额外的信息后,调试时间

因此,这里是一个简单的工作,以获得共同的正确的文本顺序。 1.按原样获取所有元素。 2.然后在Items数组中查找Transform数组。 3.获取该元素的数组变换值X(第4)和Y(第5)个位置。 4.我使用Lodash.js将最终得到的X和Y数组分为两类。注意,您需要先按Y从大到小排序,因为Y在PDF中是反向的。然后按X排序

_.orderBy(pagetext, ['y','x'], ['desc', 'asc'] )
在下面的代码中,我假设您得到了PDF页面对象。 代码:

下面是一个关于页面上1个文本元素的数组示例。正如我在上面的问题中所展示的那样,您将以自定义顺序获得许多具有getTextContent的元素

//From console:
Object
items : Array(24)
str : "How to align these objects"
transform : (6) [18, 0, 0, 18, 349.76, 335.25]
width : 190.78199999999998
__proto__
祝你好运:)

我就是这样做的

  //first sort the fragments by Y desc , X asc to order the text
  const sorted = data.items.sort(
    (a, b) => b.transform[5] - a.transform[5] || a.transform[4] - b.transform[4]
  );

  // generate the string chain
  const text = sorted.map((e) => e.str).join();
我就是这样做的

  //first sort the fragments by Y desc , X asc to order the text
  const sorted = data.items.sort(
    (a, b) => b.transform[5] - a.transform[5] || a.transform[4] - b.transform[4]
  );

  // generate the string chain
  const text = sorted.map((e) => e.str).join();