В Javascript я использую pdfmake для создания PDF-документа. Я прочитал его из github, что он поддерживает водяной знак, и следующее мое использование, но оно дает мне некоторые случайные и странные персонажи. Эти персонажи одинаковы независимо от того, какие тексты предоставляются водяным знаком. У кого-то появилась идея?Водяной знак с использованием pdfmake
ответ
Я не могу сказать, как у меня есть решение этой проблемы, но я сделал это работает для меня. Кажется, что функция renderWatermark()
на линии 465 или около нее, или у pdfmake.js есть проблемы с кодировкой шрифта.
var encoded = watermark.font.encode(watermark.text);
возвращает пустую строку и не имеет расширенных свойств, которые функция ищет позже.
Изменяя
pdfKitDoc.addContent('/' + encoded.fontId + ' ' + watermark.size.fontSize + ' Tf');
в
pdfKitDoc.addContent('/ ' + watermark.size.fontSize + ' Tf');
и
pdfKitDoc.addContent('<' + encoded.encodedText + '> Tj');
в
pdfKitDoc.addContent('(' + watermark.text + ') Tj');
Мне удалось получить водяной знак, чтобы он отображался в правильном положении, хотя и с общим шрифтом, а не с тем, что я выбрал.
Я сделал несколько изменений, чтобы сделать водяной знак работой, как я хотел. Ниже приведены изменения, которые я сделал в printer.js
pdfKitDoc.fill ('darkgray'); // Изменить цвет pdfKitDoc.opacity (0.3); // Изменение непрозрачности, как водяной знак был слишком темным, на мой вкус
комментарии ниже, чтобы сохранить текст водяного знака горизонтального
// угол вар = Math.atan2 (pdfKitDoc.page.height, pdfKitDoc.page.width) * 180/Math.PI; //pdfKitDoc.rotate(0, {origin: [pdfKitDoc.page.width/2, pdfKitDoc.page.height/2]});
// Измененное ширина и высота для правильного рендеринга текста водяного знака горизонтально
pdfKitDoc.addContent ('+' (pdfKitDoc.page.width/2 - watermark.size.size.width/4) + '' + (pdfKitDoc.page.height/2 - watermark.size.size.height/4) + 'Td');
В идеале цвет, непрозрачность & должна быть настраиваемой.
вы рок !! тайна теперь решена !!! –