需要使用pdf.js解决:
a)使用pdf.js可以使用getAnnotations()获得注释,但是没有有关该注释中文本的任何信息。如何提取?
b)如何从对象(如gen num)中获取流:
/N: 8 0 R
/Filter:FlateDecode
答案 0 :(得分:0)
我有以下疑问可以得到答案:
我将解释问题和解决方案。
问题
使用PDF.js显示层从PDF的注释中提取文本。
解决方案
PDF.js具有不同的层:
要从注释中提取文本,必须在 Core 和 Display 层中进行。
I。核心层:
使用注释中的所有文本创建一个公共属性(annotationText)
a)修改src / core / annotation.js
a.1)类注释构造函数:在构造函数的末尾添加一行
// Expose public properties using a data object.
this.data = {
...
annotationText: this._extractText(params) // -> Add this line *****
};
}
a.2)类注释-添加用于提取文本的方法:
_extractText(params) {
// AP - Appearance Dictionary
let appearanceDictionary = params.dict.get('AP');
// No AP
if (typeof appearanceDictionary === 'undefined') {
return '';
}
// N - Stream
let normalAppearance = appearanceDictionary.xref.fetch(appearanceDictionary._map.N);
normalAppearance.getBytes()
// No text
if (typeof normalAppearance.buffer === 'undefined') {
return '';
}
let numParentheses = 0;
let streamText = '';
for (let i = 0; i < normalAppearance.buffer.length; i++) {
if (String.fromCharCode(normalAppearance.buffer[i]) === ")") {
numParentheses--;
}
if (numParentheses > 0) {
streamText += String.fromCharCode(normalAppearance.buffer[i]);
}
if (String.fromCharCode(normalAppearance.buffer[i]) === "(") {
numParentheses++;
}
}
return streamText;
}
b)将所有 src / 文件捆绑到两个生产脚本( pdf.js 和 pdf.worker.js )
$ gulp generic
II。显示层:
在 annotationText
中显示文本
page.getAnnotations().then(
function (annotations) {
let textInAnnotations = ""
for (annotation in annotations) {
textInAnnotations = textInAnnotations + " - " + annotations[annotation].annotationText
}
console.log("Text in annotations: "+textInAnnotations)
});