UNPKG

pdf-lib

Version:

Library for creating and modifying PDF files in JavaScript

138 lines (137 loc) 7.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; } Object.defineProperty(exports, "__esModule", { value: true }); var round_1 = __importDefault(require("lodash/round")); var GOps_1 = require("../../core/pdf-operators/graphics/color/GOps"); var KOps_1 = require("../../core/pdf-operators/graphics/color/KOps"); var RGOps_1 = require("../../core/pdf-operators/graphics/color/RGOps"); var cm_1 = __importDefault(require("../../core/pdf-operators/graphics/graphics-state/cm")); var d_1 = __importDefault(require("../../core/pdf-operators/graphics/graphics-state/d")); var JOps_1 = require("../../core/pdf-operators/graphics/graphics-state/JOps"); var w_1 = __importDefault(require("../../core/pdf-operators/graphics/graphics-state/w")); var c_1 = __importDefault(require("../../core/pdf-operators/graphics/path-construction/c")); var h_1 = __importDefault(require("../../core/pdf-operators/graphics/path-construction/h")); var l_1 = __importDefault(require("../../core/pdf-operators/graphics/path-construction/l")); var m_1 = __importDefault(require("../../core/pdf-operators/graphics/path-construction/m")); var re_1 = __importDefault(require("../../core/pdf-operators/graphics/path-construction/re")); var TDOps_1 = require("../../core/pdf-operators/text/text-positioning/TDOps"); var Tm_1 = __importDefault(require("../../core/pdf-operators/text/text-positioning/Tm")); var TJOps_1 = require("../../core/pdf-operators/text/text-showing/TJOps"); var Tc_1 = __importDefault(require("../../core/pdf-operators/text/text-state/Tc")); var Tf_1 = __importDefault(require("../../core/pdf-operators/text/text-state/Tf")); var TL_1 = __importDefault(require("../../core/pdf-operators/text/text-state/TL")); var Tr_1 = __importDefault(require("../../core/pdf-operators/text/text-state/Tr")); var Ts_1 = __importDefault(require("../../core/pdf-operators/text/text-state/Ts")); var Tw_1 = __importDefault(require("../../core/pdf-operators/text/text-state/Tw")); var Tz_1 = __importDefault(require("../../core/pdf-operators/text/text-state/Tz")); var Do_1 = __importDefault(require("../../core/pdf-operators/Do")); var pdf_operators_1 = __importDefault(require("../../core/pdf-operators")); /* ======== Clipping path operators ======== */ var W = pdf_operators_1.default.W; exports.clip = function () { return W.operator; }; exports.clipEvenOdd = function () { return W.asterisk.operator; }; /* ======== Graphics state operators ======== */ var Q = pdf_operators_1.default.Q, q = pdf_operators_1.default.q; var cos = Math.cos, sin = Math.sin, tan = Math.tan; exports.degreesToRadians = function (degrees) { return (degrees * Math.PI) / 180; }; exports.translate = function (xPos, yPos) { return cm_1.default.of(1, 0, 0, 1, xPos, yPos); }; exports.scale = function (xPos, yPos) { return cm_1.default.of(xPos, 0, 0, yPos, 0, 0); }; // Round to the 6th decimal place to avoid JavaScript exponential notation // being used, which starts at the 7th decimal place, e.g. // 0.0000001 => 1e-7 // 0.000001 => 0.000001 exports.rotateRadians = function (angle) { return cm_1.default.of(round_1.default(cos(angle), 6), round_1.default(sin(angle), 6), round_1.default(-sin(angle), 6), round_1.default(cos(angle), 6), 0, 0); }; exports.rotateDegrees = function (angle) { return exports.rotateRadians(exports.degreesToRadians(angle)); }; // Round to the 6th decimal place to avoid JavaScript exponential notation // being used, which starts at the 7th decimal place, e.g. // 0.0000001 => 1e-7 // 0.000001 => 0.000001 exports.skewRadians = function (xSkewAngle, ySkewAngle) { return cm_1.default.of(1, round_1.default(tan(xSkewAngle), 6), round_1.default(tan(ySkewAngle), 6), 1, 0, 0); }; exports.skewDegrees = function (xSkewAngle, ySkewAngle) { return exports.skewRadians(exports.degreesToRadians(xSkewAngle), exports.degreesToRadians(ySkewAngle)); }; exports.dashPattern = d_1.default.of; exports.restoreDashPattern = function () { return d_1.default.of([], 0); }; exports.lineCap = function (style) { return JOps_1.J.of({ butt: 0, round: 1, projecting: 2 }[style]); }; exports.lineJoin = function (style) { return JOps_1.j.of({ miter: 0, round: 1, bevel: 2 }[style]); }; exports.popGraphicsState = function () { return Q.operator; }; exports.pushGraphicsState = function () { return q.operator; }; exports.lineWidth = w_1.default.of; /* ======== Path construction operators ======== */ exports.appendBezierCurve = c_1.default.of; exports.closePath = function () { return h_1.default.operator; }; exports.moveTo = m_1.default.of; exports.lineTo = l_1.default.of; exports.rectangle = re_1.default.of; exports.square = function (xPos, yPos, size) { return exports.rectangle(xPos, yPos, size, size); }; /* ======== Path painting operators ======== */ var S = pdf_operators_1.default.S, f = pdf_operators_1.default.f, B = pdf_operators_1.default.B, n = pdf_operators_1.default.n; exports.stroke = function () { return S.operator; }; exports.fill = function () { return f.operator; }; exports.fillAndStroke = function () { return B.operator; }; exports.endPath = function () { return n.operator; }; /* ======== Test positioning operators ======== */ var T = pdf_operators_1.default.T; // TODO: Allow an optional number to move more/less than the default line height. exports.nextLine = function () { return T.asterisk.operator; }; exports.textPosition = TDOps_1.Td.of; /* ======== Text showing operators ======== */ exports.text = TJOps_1.Tj.of; /* ======== Text state operators ======== */ exports.fontAndSize = Tf_1.default.of; exports.charSpacing = Tc_1.default.of; exports.wordSpacing = Tw_1.default.of; // Compresses glyphs horizontally - not vertically. exports.charSqueeze = Tz_1.default.of; exports.lineHeight = TL_1.default.of; exports.textRise = Ts_1.default.of; exports.textRenderingMode = function (style) { return Tr_1.default.of({ fill: 0, outline: 1, fillAndOutline: 2, invisible: 3, fillAndClip: 4, outlineAndClip: 5, fillAndOutlineAndClip: 6, clip: 7, }[style]); }; exports.textMatrix = Tm_1.default.of; // Round to the 6th decimal place to avoid JavaScript exponential notation // being used, which starts at the 7th decimal place, e.g. // 0.0000001 => 1e-7 // 0.000001 => 0.000001 exports.rotateAndSkewTextRadiansAndTranslate = function (rotationAngle, xSkewAngle, ySkewAngle, x, y) { return Tm_1.default.of(round_1.default(cos(rotationAngle), 6), round_1.default(sin(rotationAngle) + tan(xSkewAngle), 6), round_1.default(-sin(rotationAngle) + tan(ySkewAngle), 6), round_1.default(cos(rotationAngle), 6), x, y); }; exports.rotateAndSkewTextDegreesAndTranslate = function (rotationAngle, xSkewAngle, ySkewAngle, x, y) { return exports.rotateAndSkewTextRadiansAndTranslate(exports.degreesToRadians(rotationAngle), exports.degreesToRadians(xSkewAngle), exports.degreesToRadians(ySkewAngle), x, y); }; /* ======== XObject operator ======== */ exports.image = Do_1.default.of; /* ======== Color operators ======== */ exports.fillingGrayscaleColor = GOps_1.g.of; exports.strokingGrayscaleColor = GOps_1.G.of; exports.fillingRgbColor = RGOps_1.rg.of; exports.strokingRgbColor = RGOps_1.RG.of; exports.fillingCmykColor = KOps_1.k.of; exports.strokingCmykColor = KOps_1.K.of;