gpt4 book ai didi

javascript - 使用 jsPDF 对齐文本

转载 作者:数据小太阳 更新时间:2023-10-29 05:44:14 26 4
gpt4 key购买 nike

我正在使用 jsPDF在客户端创建 PDF,我看到有属性可以更改文本的颜色、大小和字体,但我需要将文本右对齐。所以它都与正确的坐标对齐。有点像 text-align: right;在 CSS 中。我该怎么做呢?

谢谢

最佳答案

前一段时间我写了一个 jsPDF 扩展,它允许文本对齐(默认情况下对齐左上角,而不是 jsPDF 的 .text 函数所做的随机内容)。

代码是用 TypeScript 编写的(添加一些类型注释),这应该让您清楚地知道有哪些参数。

更新:由于 Kaddath(请参阅他们的评论/这篇文章的编辑历史以了解详细信息),这些片段已更正为适用于 2019 年 7 月 17 日的最新版本。

var splitRegex = /\r\n|\r|\n/g;
jsPDF.API.textEx = function (text: any, x: number, y: number, hAlign?: string, vAlign?: string) {
var fontSize = this.internal.getFontSize()
/ this.internal.scaleFactor;

// As defined in jsPDF source code
var lineHeightProportion = 1.15;

var splittedText: string[];
var lineCount: number = 1;
if (vAlign === 'middle' || vAlign === 'bottom'
|| hAlign === 'center' || hAlign === 'right') {

splittedText = typeof text === 'string'
? text.split(splitRegex)
: text;

lineCount = splittedText.length || 1;
}

// Align the top
y += fontSize * (2 - lineHeightProportion);

if (vAlign === 'middle') y -= (lineCount / 2) * fontSize;
else if (vAlign === 'bottom') y -= lineCount * fontSize;


if (hAlign === 'center'
|| hAlign === 'right') {

var alignSize = fontSize;
if (hAlign === 'center') alignSize *= 0.5;

if (lineCount > 1) {
for (var iLine = 0; iLine < splittedText.length; iLine++) {
this.text(splittedText[iLine],
x - this.getStringUnitWidth(splittedText[iLine]) * alignSize,
y);
y += fontSize * lineHeightProportion;
}
return this;
}
x -= this.getStringUnitWidth(text) * alignSize;
}

this.text(text, x, y);
return this;
};

纯 JavaScript:

var splitRegex = /\r\n|\r|\n/g;
jsPDF.API.textEx = function (text, x, y, hAlign, vAlign) {
var fontSize = this.internal.getFontSize() / this.internal.scaleFactor;

// As defined in jsPDF source code
var lineHeightProportion = 1.15;

var splittedText = null;
var lineCount = 1;
if (vAlign === 'middle' || vAlign === 'bottom' || hAlign === 'center' || hAlign === 'right') {
splittedText = typeof text === 'string' ? text.split(splitRegex) : text;

lineCount = splittedText.length || 1;
}

// Align the top
y += fontSize * (2 - lineHeightProportion);

if (vAlign === 'middle')
y -= (lineCount / 2) * fontSize;
else if (vAlign === 'bottom')
y -= lineCount * fontSize;

if (hAlign === 'center' || hAlign === 'right') {
var alignSize = fontSize;
if (hAlign === 'center')
alignSize *= 0.5;

if (lineCount > 1) {
for (var iLine = 0; iLine < splittedText.length; iLine++) {
this.text(splittedText[iLine], x - this.getStringUnitWidth(splittedText[iLine]) * alignSize, y);
y += fontSize * lineHeightProportion;
}
return this;
}
x -= this.getStringUnitWidth(text) * alignSize;
}

this.text(text, x, y);
return this;
};

使用起来很简单:

pdf.textEx('Example text', xPosition, yPosition, 'right', 'middle');

打印文本,其中右中位于 (xPosition, yPosition)。

关于javascript - 使用 jsPDF 对齐文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28327510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com