2015-02-04 2 views
3

Я использую jsPDF для создания PDF-файла на стороне клиента, и я вижу, что есть свойства для изменения цвета, размера и шрифта текста, но мне нужно выровнять текст вправо , Таким образом, все выровнено по правой координате. Вид как text-align: right; в CSS. Как мне это сделать?Выравнивать текст прямо с помощью jsPDF

Благодаря

ответ

12

я написал расширение для jsPDF некоторое время назад, что позволяет текст юстировке (и по умолчанию выравнивает верхний левый, вместо случайной вещи jsPDF».text функция делает).

Код написан на языке TypeScript (для добавления аннотаций определенного типа), что должно дать вам довольно четкое представление о том, какие параметры есть.

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; 
      } 
      return this; 
     } 
     x -= this.getStringUnitWidth(text) * alignSize; 
    } 

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

Plain 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; 
      } 
      return this; 
     } 
     x -= this.getStringUnitWidth(text) * alignSize; 
    } 

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

Используя это так же просто, как:

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

распечатывается текст которого средний право находится (xPosition, yPosition).

+0

Хороший ответ Я применяю его и его рабочий тон хорошо ... Хорошо Mr. Aidiakapi –

+2

Отличная работа! Теперь это используется в плагине [jspdf-autotable] (https://github.com/someatoms/jsPDF-AutoTable). –

+1

Прохладный, это выглядит как хороший плагин, я действительно использовал этот код для создания таблицы. – Aidiakapi

Смежные вопросы