需要用pdf.js解决:
a)使用pdf.js可以使用getAnnotations()获取注释,但不能获得有关该注释中文本的任何信息。如何提取它?
b)如何从对象(ref:gen num)获取流,如:
/N: 8 0 R
/Filter:FlateDecode
我用以下方法得到了疑问:
我将解释问题和解决方案。
问题
使用PDF.js显示图层从PDF中的注释中提取文本。
解
PDF.js有不同的层次:
要从注释中提取文本,必须在Core和Display层中工作。
I.核心层:
使用注释中的所有文本创建公共属性(annotationText)
a)修改src / core / annotation.js
a.1)类Annotation构造函数:添加一行和构造函数的结尾
// 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)
});