Javascript pdf.js mozilla lib问题以正确的顺序获取或提取纯文本
我需要获得纯文本从pdf使用pdf.js与正确的文本顺序。 我需要Mozilla的pdf.js2.x的帮助(我使用2.0.550)。 我花了几天时间去寻找解决方案,但没有成功 目标:使用Mozilla的pdf.js从pdf文件中提取正确的纯文本,而不渲染pdf图像(画布或svg),如果可能,最好不使用文本层 我知道这里有一个类似的问题,但没有答案-原因和如何解决它。链接是 此外,我还回顾了列表中的其他问题以及可能的答案 从每一页都可以得到。我使用getTextContent()函数,它返回一个包含“items”数组的对象。有一个包含元素的对象。需要包含页面中文本的“.str”。 但秩序是错误的。是否有可能像在原始页面中一样获得正确的文本顺序 结果你们可以看到顺序是错误的。 但我很惊讶,因为使用相同或相似的代码,渲染层显示正确的图像。当我检查带有文本层的pdfjs应用程序时,我可以看到许多带有文本不同部分的标签。有时,数字在一行上。我看每个标签都包含字体\样式文本组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()函数,它返回一个包
- 可能吗
- 代码中有错误吗?我怎么能修好它
- 是否有一些属性显示我可以用来恢复原始文本的顺序
- 也许还有其他功能来提取文本
- 其他想法
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();