X-Git-Url: https://git.kianting.info/?a=blobdiff_plain;f=src%2Flibclo%2Findex.ts;h=e5c2108442e2deae04678c9a11e261f70f6f5ed7;hb=2b1a59e963a3610c8f664af3dd6b03afb8d89646;hp=b64a819c9c719a63d2f7af34d0ec4c73d749fc7a;hpb=f12842e5a4ef531e38024e16f91b21c99ce1de92;p=clo diff --git a/src/libclo/index.ts b/src/libclo/index.ts index b64a819..e5c2108 100644 --- a/src/libclo/index.ts +++ b/src/libclo/index.ts @@ -1,10 +1,10 @@ -import { isBoxedPrimitive, isKeyObject, isStringObject } from "util/types"; import {tkTree} from "../parser"; import {FontStyle, TextStyle, TextWeight, fontStyleTofont} from "../canva"; -import { JSDOM } from "jsdom"; import * as fontkit from "fontkit"; -import * as util from "node:util"; import * as breakLines from "./breakLines"; +const PDFDocument = require('pdfkit'); +import * as fs from "fs"; + /** * TYPES @@ -58,11 +58,11 @@ export interface CharBox extends Box{ /** * a basic Box - * - x : - * - y : + * - x : pt + * - y : pt * - textStyle : * - direction : - * - width : x_advance + * - width : x_advance pt * - content : */ export interface Box{ @@ -94,10 +94,10 @@ export const defaultFrameStyle : FrameBox = { direction : Direction.TTB, baseLineskip : ptToPx(15), textStyle : defaultTextStyle, - x : A4_IN_PX.width * 0.10, - y : A4_IN_PX.height * 0.10, - width : A4_IN_PX.width * 0.80, - height : A4_IN_PX.height * 0.80, + x : A4_IN_PX.width * 0.10 , + y : A4_IN_PX.height * 0.10 , + width : A4_IN_PX.width * 0.80 , + height : A4_IN_PX.height * 0.80 , content : null, }; @@ -328,8 +328,8 @@ export async function calculateTextWidthHeightAux(element : tkTree, style : Text y : null, textStyle : style, direction : Direction.LTR, - width : (runGlyphsItem.advanceWidth)*(style.size)/1000, - height : (runGlyphsItem.bbox.maxY - runGlyphsItem.bbox.minY)*(style.size)/1000, + width : (runGlyphsItem.advanceWidth)*(style.size)/1000 * 0.75, // in pt + height : (runGlyphsItem.bbox.maxY - runGlyphsItem.bbox.minY)*(style.size)/1000 * 0.75, // in pt content : element[j], minX : runGlyphsItem.bbox.minX, maxX : runGlyphsItem.bbox.maxX, @@ -435,27 +435,176 @@ export class Clo{ } // generate the width and height of the stream - let defaultFontStyle : TextStyle = this.attrs["defaultFrameStyle"].textStyle; + let defaultFontStyle : TextStyle = this.attrs.defaultFrameStyle.textStyle; let a = await calculateTextWidthHeight(preprocessed, defaultFontStyle); let breakLineAlgorithms = new breakLines.BreakLineAlgorithm(); // TODO //console.log(breakLineAlgorithms.totalCost(a,70)); - let segmentedNodes = breakLineAlgorithms.segmentedNodes(a, 70); + let segmentedNodes = breakLineAlgorithms.segmentedNodes(a, this.attrs.defaultFrameStyle.width); + + let segmentedNodesToBox = + this.segmentedNodesToFrameBox(segmentedNodes, this.attrs.defaultFrameStyle); + + + + let boxesFixed = this.fixenBoxesPosition(segmentedNodesToBox); + + + + + // generate pdf7 + const doc = new PDFDocument({size: 'A4'}); + doc.pipe(fs.createWriteStream('output.pdf')); + this.grid(doc); + + await this.putText(doc, boxesFixed); + // putChar + doc.end(); - console.log(this.segmentedNodesToFrameBox(segmentedNodes, this.attrs["defaultFrameStyle"])); } + async putText(doc : PDFKit.PDFDocument, box : Box): Promise{ + + if (box.textStyle !== null){ + let fontInfo = fontStyleTofont(box.textStyle); + + if (fontInfo.path.match(/\.ttc$/g)){ + doc + .font(fontInfo.path, fontInfo.psName) + .fontSize(box.textStyle.size * 0.75);} + else{ + doc + .font(fontInfo.path) + .fontSize(box.textStyle.size * 0.75); // 0.75 must added! + } + + if (box.textStyle.color !== undefined){ + doc.fill(box.textStyle.color); + } + + if (Array.isArray(box.content)){ + for (var k=0; kthis.removeBreakPoints (x).flat()); let segmentedNodeUnglue = segmentedNodesFixed.map((x)=>this.removeGlue(x, frame).flat()); - - for (var i=0; icurrentLineSkip ){ @@ -511,7 +660,7 @@ export class Clo{ let glueRemovedWidth = glueRemoved.map((x)=>{if("width" in x){ return x.width} else{return 0;}}) .reduce((acc, cur)=>acc+cur , 0); - let offset = frame.width - glueRemovedWidth; + let offset = frame.width * 0.75 - glueRemovedWidth; var res = []; for (var i=0; i