Текст с отступом справа в PDF-файлах, созданных с помощью Prawn
Я использую Prawn для рендеринга PDF-файлов в моем приложении Rails.
По некоторым причинам, однако, мои номера телефонов всегда имеют отступ справа от 2 (?) Пробелов.
Кто-нибудь может сказать мне, что мне здесь не хватает? Все три значения сохраняются в виде строк в моей базе данных SQLite, и я не знаю ни одного пробельного символа.
Значения e-mail и url всегда аккуратно выровнены вправо.
def show_sender_details
text "#{p.telephone}\n#{p.email}\n#{p.url}", :align => :right
end
Кто-нибудь может помочь?
4 ответа
Номера телефонов всегда имеют отступ справа, потому что в text
метод используется :align => :right
, так что все строки текста выровнены вправо.
Вы можете попробовать использовать text_box
метод с выравниванием по левому краю и поместите этот блок вручную на странице, определив отступ его левого верхнего угла от верхнего и правого краев страницы (значения bounds.right и bounds.top). Примерно так (полный рабочий пример):
требовать "креветки" требовать 'ostruct' p = OpenStruct.new(: phone => "+1-201-555-2233",:email => "test@example.com",:url => "http://example.com") Prawn::Document.generate('simple_text.pdf',:skip_page_creation => true) сделать start_new_page text_box("#{p.telephone}\ п #{p.email}\ п #{p.url}",:at => [bounds.right - 100, bounds.top - 100],: выровнять =>: слева,: высота => 50,:width => margin_box.width) конец
Это действительно кажется наиболее вероятным, что в p.telephone
поле. Я делаю что-то похожее на вас с Prawn / Rails, поэтому я просто попытался как можно больше способов заставить его не выравниваться по правому краю, и вставка пробелов в поле была единственным способом, которым я мог воспроизвести вашу проблему,
Даже если в данном случае это не ваша конкретная проблема, вероятно, будет хорошей идеей удалить пробелы из ваших телефонных номеров (и, фактически, других полей), прежде чем вы их все равно будете рендерить - предполагая, что это где-то поле формы, Вы можете ожидать, что какой-то пользователь случайно поместит в конце пробелы. Вы можете сделать это в своем PDF-коде, например так:
text "#{p.telephone.strip}\n#{p.email.strip}\n#{p.url.strip}", :align => :right
или вы можете сделать это в вашей модели, если хотите:
def telephone=(t)
write_attribute(:telephone, t.strip)
end
Мне лично нравится первый вариант (сделать это в коде просмотра PDF), потому что я предпочел бы хранить именно то, что вводит пользователь, и манипулировать его данными только при необходимости (при просмотре), но он имеет тенденцию загромождать посмотреть код немного.
Хорошо, если ваша проблема также связана с дефисами, решение состоит в том, чтобы использовать Prawn Release >= 0.13.1 (а не какой-либо из старых 1.0.0.rc).
Смотрите GitHub: выпуск креветок 578
Хорошо, 4 года спустя я наконец могу ответить на свой вопрос (ууу!): Оказывается, у меня было какое-то невидимое \r
символы в моей базе данных. Не уверен, как они туда попали... (Между прочим: я тем временем переместил свое приложение с SQLite на MySQL.)
Все, что мне нужно было сделать, это удалить этих персонажей:
telephone.tr("\r", "")