commit
4e79d85fd4
5 changed files with 3344 additions and 0 deletions
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,21 @@ |
|||||||
|
{ |
||||||
|
"name": "text-to-svg", |
||||||
|
"version": "1.0.0", |
||||||
|
"description": "", |
||||||
|
"main": "index.js", |
||||||
|
"scripts": { |
||||||
|
"test": "echo \"Error: no test specified\" && exit 1", |
||||||
|
"dev": "nodemon server" |
||||||
|
}, |
||||||
|
"keywords": [], |
||||||
|
"author": "", |
||||||
|
"license": "ISC", |
||||||
|
"dependencies": { |
||||||
|
"express": "^4.17.1", |
||||||
|
"text-to-svg": "^3.1.5", |
||||||
|
"xmlbuilder": "^15.1.1" |
||||||
|
}, |
||||||
|
"devDependencies": { |
||||||
|
"nodemon": "^2.0.7" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,144 @@ |
|||||||
|
// const express = require('express')
|
||||||
|
// const TextToSVG = require('text-to-svg')
|
||||||
|
// const fs = require('fs')
|
||||||
|
// const textToSVG = TextToSVG.loadSync('./static/Dubai-Bold.otf')
|
||||||
|
// const app = express()
|
||||||
|
|
||||||
|
// const lineLengthviewer = (oneLineText) => { //to view the length of each line by pixel
|
||||||
|
// let {width} = textToSVG.getMetrics(oneLineText, options = {fontSize: 14})
|
||||||
|
// console.log('This line width is: ', width)
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// let svgFormat = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="" > ' //header of a svg xml
|
||||||
|
// let text = 'لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.'
|
||||||
|
|
||||||
|
// const panelSize = 100
|
||||||
|
// let totalTextHeightOnScreen = 0
|
||||||
|
// let totalSeparatedLength = 0
|
||||||
|
// let x = 800 //starting position of each line on screen:
|
||||||
|
// let y = 50
|
||||||
|
|
||||||
|
// text += text
|
||||||
|
// const totalTextLength = text.length
|
||||||
|
|
||||||
|
// while (true) {
|
||||||
|
// let separatedLine = ''
|
||||||
|
// let wordIncrementer = 0
|
||||||
|
|
||||||
|
// while (true){
|
||||||
|
// try {
|
||||||
|
|
||||||
|
// let word = text.split(' ')[wordIncrementer] + ' '
|
||||||
|
// let {width} = textToSVG.getMetrics(separatedLine+word, options={fontSize: 14})
|
||||||
|
// if(width >= panelSize) break
|
||||||
|
// if(word === 'undefined ') break
|
||||||
|
// separatedLine += word
|
||||||
|
// wordIncrementer++
|
||||||
|
// } catch (err) {
|
||||||
|
// console.error('Error: ', err.message)
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// let svgPath = textToSVG.getPath(separatedLine, options = {x: x, y: y, fontSize: 14, anchor: 'right'})
|
||||||
|
// svgFormat += svgPath
|
||||||
|
|
||||||
|
// lineLengthviewer(separatedLine)
|
||||||
|
|
||||||
|
// let {height} = textToSVG.getMetrics(text, options = {fontSize: 14})
|
||||||
|
|
||||||
|
// y+= height
|
||||||
|
// totalTextHeightOnScreen += height; //to calculate the total text height on screen
|
||||||
|
// totalSeparatedLength += separatedLine.length
|
||||||
|
// if(totalTextLength <= totalSeparatedLength) break
|
||||||
|
|
||||||
|
// text = text.substring(separatedLine.length)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// svgFormat += '</svg>'
|
||||||
|
// svgFormat = svgFormat.replaceAll('"/><path d="', ' ')
|
||||||
|
// svgFormat = svgFormat.replace ('height=""', `height="${parseInt(totalTextHeightOnScreen + 50)}"`)
|
||||||
|
|
||||||
|
// fs.writeFileSync('./static/mySVG.svg', svgFormat, {'flag': 'w+'})
|
||||||
|
|
||||||
|
const express = require('express') |
||||||
|
const TextToSVG = require('text-to-svg') |
||||||
|
const fs = require('fs') |
||||||
|
const textToSVG = TextToSVG.loadSync('./static/Dubai-Bold.otf') |
||||||
|
const app = express() |
||||||
|
|
||||||
|
const lineLengthviewer = (oneLineText, fontSize) => { //to view the length of each line by pixel
|
||||||
|
let {width} = textToSVG.getMetrics(oneLineText, options = {fontSize: fontSize})
|
||||||
|
console.log('This line width is: ', width) |
||||||
|
} |
||||||
|
|
||||||
|
app.use(express.json()) |
||||||
|
|
||||||
|
app.post('/textToSVG', (req, res) => { |
||||||
|
console.log(req); |
||||||
|
console.log(req.body); |
||||||
|
const text = req.body.text |
||||||
|
const screenSize = req.body.screenSize |
||||||
|
const userFontSize = req.body.fontSize |
||||||
|
|
||||||
|
let svgFormat = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="" > ' //header of a svg xml
|
||||||
|
|
||||||
|
let totalTextHeightOnScreen = 0 |
||||||
|
let totalSeparatedLength = 0 |
||||||
|
let x = 800 //starting position of each line on screen:
|
||||||
|
let y = 50 |
||||||
|
|
||||||
|
const totalTextLength = text.length |
||||||
|
|
||||||
|
|
||||||
|
while (true) { |
||||||
|
let separatedLine = '' |
||||||
|
let wordIncrementer = 0 |
||||||
|
|
||||||
|
while (true){ |
||||||
|
try { |
||||||
|
|
||||||
|
let word = text.split(' ')[wordIncrementer] + ' '
|
||||||
|
let {width} = textToSVG.getMetrics(separatedLine+word, options={fontSize: userFontSize}) |
||||||
|
if(width >= screenSize) break |
||||||
|
if(word === 'undefined ') break |
||||||
|
separatedLine += word
|
||||||
|
wordIncrementer++ |
||||||
|
} catch (err) { |
||||||
|
console.error('Error: ', err.message) |
||||||
|
break
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
let svgPath = textToSVG.getPath(separatedLine, options = {x: x, y: y, fontSize: userFontSize, anchor: 'right'})
|
||||||
|
svgFormat += svgPath |
||||||
|
|
||||||
|
lineLengthviewer(separatedLine, userFontSize) |
||||||
|
|
||||||
|
let {height} = textToSVG.getMetrics(text, options = {fontSize: userFontSize}) |
||||||
|
|
||||||
|
y+= height |
||||||
|
totalTextHeightOnScreen += height; //to calculate the total text height on screen
|
||||||
|
totalSeparatedLength += separatedLine.length |
||||||
|
if(totalTextLength <= totalSeparatedLength) break
|
||||||
|
|
||||||
|
text = text.substring(separatedLine.length)
|
||||||
|
} |
||||||
|
|
||||||
|
svgFormat += '</svg>'
|
||||||
|
svgFormat = svgFormat.replaceAll('"/><path d="', ' ') |
||||||
|
svgFormat = svgFormat.replace ('height=""', `height="${parseInt(totalTextHeightOnScreen + 50)}"`) |
||||||
|
|
||||||
|
fs.writeFileSync('./static/mySVG.svg', svgFormat, {'flag': 'w+'}) |
||||||
|
|
||||||
|
res.status(201).sendFile('./static/mySVG.svg') |
||||||
|
}) |
||||||
|
|
||||||
|
|
||||||
|
const port = process.env.PORT || 3000 |
||||||
|
app.listen(port, () => {
|
||||||
|
console.log('App is listening on port ', port);
|
||||||
|
}); |
Binary file not shown.
After Width: | Height: | Size: 7.2 KiB |
Loading…
Reference in new issue