123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /*
- * Copyright 2014 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.
- */
- "use strict";
- const fs = require("fs");
- const path = require("path");
- const spawn = require("child_process").spawn;
- const ttxResourcesHome = path.join(__dirname, "..", "ttx");
- let nextTTXTaskId = Date.now();
- function runTtx(ttxResourcesHomePath, fontPath, registerOnCancel, callback) {
- fs.realpath(ttxResourcesHomePath, function (error, realTtxResourcesHomePath) {
- const fontToolsHome = path.join(realTtxResourcesHomePath, "fonttools-code");
- fs.realpath(fontPath, function (errorFontPath, realFontPath) {
- const ttxPath = path.join("Lib", "fontTools", "ttx.py");
- if (!fs.existsSync(path.join(fontToolsHome, ttxPath))) {
- callback("TTX was not found, please checkout PDF.js submodules");
- return;
- }
- const ttxEnv = {
- PYTHONPATH: path.join(fontToolsHome, "Lib"),
- PYTHONDONTWRITEBYTECODE: true,
- };
- const ttxStdioMode = "ignore";
- const python = process.platform !== "win32" ? "python2" : "python";
- const ttx = spawn(python, [ttxPath, realFontPath], {
- cwd: fontToolsHome,
- stdio: ttxStdioMode,
- env: ttxEnv,
- });
- let ttxRunError;
- registerOnCancel(function (reason) {
- ttxRunError = reason;
- callback(reason);
- ttx.kill();
- });
- ttx.on("error", function (errorTtx) {
- ttxRunError = errorTtx;
- callback("Unable to execute ttx");
- });
- ttx.on("close", function (code) {
- if (ttxRunError) {
- return;
- }
- callback();
- });
- });
- });
- }
- exports.translateFont = function translateFont(
- content,
- registerOnCancel,
- callback
- ) {
- const buffer = Buffer.from(content, "base64");
- const taskId = (nextTTXTaskId++).toString();
- const fontPath = path.join(ttxResourcesHome, taskId + ".otf");
- const resultPath = path.join(ttxResourcesHome, taskId + ".ttx");
- fs.writeFileSync(fontPath, buffer);
- runTtx(ttxResourcesHome, fontPath, registerOnCancel, function (err) {
- fs.unlinkSync(fontPath);
- if (err) {
- console.error(err);
- callback(err);
- } else if (!fs.existsSync(resultPath)) {
- callback("Output was not generated");
- } else {
- callback(null, fs.readFileSync(resultPath));
- fs.unlinkSync(resultPath);
- }
- });
- };
|