mirror of
https://github.com/zen-browser/pdf.js.git
synced 2025-07-07 17:05:38 +02:00
This is very old code, and predates e.g. the introduction of JavaScript classes, which creates unnecessarily unwieldy code in the viewer. By introducing a new `TextLayer` class in the API, similar to how e.g. the `AnnotationLayer` looks, we're able to keep most parameters on the class-instance itself. This removes the need to manually track them in the viewer, and simplifies the call-sites. This also removes the `numTextDivs` parameter from the "textlayerrendered" event, since that's only added to support default-viewer functionality that no longer exists. Finally we try, as far as possible, to polyfill the old `renderTextLayer` and `updateTextLayer` functions since they are exposed in the library API. For *simple* invocations of `renderTextLayer` the behaviour should thus be the same, with only a warning printed in the console.
93 lines
2.8 KiB
JavaScript
93 lines
2.8 KiB
JavaScript
/* Copyright 2022 Mozilla Foundation
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import { buildGetDocumentParams } from "./test_utils.js";
|
|
import { getDocument } from "../../src/display/api.js";
|
|
import { isNodeJS } from "../../src/shared/util.js";
|
|
import { TextLayer } from "../../src/display/text_layer.js";
|
|
|
|
describe("textLayer", function () {
|
|
it("creates textLayer from ReadableStream", async function () {
|
|
if (isNodeJS) {
|
|
pending("document.createElement is not supported in Node.js.");
|
|
}
|
|
const loadingTask = getDocument(buildGetDocumentParams("basicapi.pdf"));
|
|
const pdfDocument = await loadingTask.promise;
|
|
const page = await pdfDocument.getPage(1);
|
|
|
|
const textLayer = new TextLayer({
|
|
textContentSource: page.streamTextContent(),
|
|
container: document.createElement("div"),
|
|
viewport: page.getViewport({ scale: 1 }),
|
|
});
|
|
await textLayer.render();
|
|
|
|
expect(textLayer.textContentItemsStr).toEqual([
|
|
"Table Of Content",
|
|
"",
|
|
"Chapter 1",
|
|
" ",
|
|
"..........................................................",
|
|
" ",
|
|
"2",
|
|
"",
|
|
"Paragraph 1.1",
|
|
" ",
|
|
"......................................................",
|
|
" ",
|
|
"3",
|
|
"",
|
|
"page 1 / 3",
|
|
]);
|
|
|
|
await loadingTask.destroy();
|
|
});
|
|
|
|
it("creates textLayer from TextContent", async function () {
|
|
if (isNodeJS) {
|
|
pending("document.createElement is not supported in Node.js.");
|
|
}
|
|
const loadingTask = getDocument(buildGetDocumentParams("basicapi.pdf"));
|
|
const pdfDocument = await loadingTask.promise;
|
|
const page = await pdfDocument.getPage(1);
|
|
|
|
const textLayer = new TextLayer({
|
|
textContentSource: await page.getTextContent(),
|
|
container: document.createElement("div"),
|
|
viewport: page.getViewport({ scale: 1 }),
|
|
});
|
|
await textLayer.render();
|
|
|
|
expect(textLayer.textContentItemsStr).toEqual([
|
|
"Table Of Content",
|
|
"",
|
|
"Chapter 1",
|
|
" ",
|
|
"..........................................................",
|
|
" ",
|
|
"2",
|
|
"",
|
|
"Paragraph 1.1",
|
|
" ",
|
|
"......................................................",
|
|
" ",
|
|
"3",
|
|
"",
|
|
"page 1 / 3",
|
|
]);
|
|
|
|
await loadingTask.destroy();
|
|
});
|
|
});
|