Водяной знак с креветками (с использованием шаблонов) - PullRequest
2 голосов
/ 25 мая 2011

Мне нужно иметь возможность пометить водяными знаками документ, созданный по шаблону.У меня есть следующий код прямо сейчас:

# Note: the raw PDF text (body variable below) is sent from a remote server.
Prawn::Document.new(:template => StringIO.new(body), :page_size =>
'A4') do |document|
  # ... including other pages and sections to the template here ...

  # watermark
  d.page_count.times do |i|
    d.go_to_page i
    d.stroke_line [d.bounds.left, d.bounds.bottom], [d.bounds.right, d.bounds.top]
    d.draw_text "Watermark", :rotate => 45, :at => [100,100], :size => 100
  end
end

Это игнорирование шаблонных страниц по какой-то причине, которую я не могу понять.Теперь вот где график утолщается: если сервер добавляет водяной знак, то этот код будет работать должным образом (например, прямой код Ruby = нет наложенного текста на страницах, не созданных креветками, но водяные знаки работают на шаблоне с предварительно нанесенным водяным знаком).Мое единственное предположение, что есть какой-то способ создать z-index / layer, который делает сервер, но сама Prawn не может.

Вот часть кода с сервера, который выполняет генерацию PDF, этоделает водяные знаки, используя iText:

PdfStamper stamper = new PdfStamper(...);
PdfContentByte over = stamper.GetOverContent(i + 1);
over.BeginText();
over.SetTextMatrix(20, 40);
over.SetFontAndSize(bf, 20);
over.SetColorFill(new Color(97, 150, 58));
over.ShowTextAligned(Element.ALIGN_CENTER,
                     watermarkText,
                     document.PageSize.Width / 2,
                     document.PageSize.Height / 2,
                     55);
over.EndText();
over.Stroke();

Если это произойдет до того, как я использую необработанные данные в Prawn, я могу сделать водяной знак, иди на цифру.

Итак, мои вопросы:

  1. Кто-нибудь знает, как я могу добиться того же эффекта, используя креветку вместо гибрида?Я бы предпочел обрабатывать водяные знаки на месте.

  2. Есть ли базовый эквивалент GetOverContent() в Prawn?

  3. Есть ли лучший способ получить строку необработанных данных PDF вКреветки без использования :template и StringIO?(Я видел метод #add_content, но он не работал)


TL; DR: мне нужно поместить текст над шаблоном креветок в виде водяного знака документа.

Будут оценены любые идеи или пути, которые я смогу исследовать.Если это не имеет смысла, я могу уточнить.

1 Ответ

2 голосов
/ 17 ноября 2013

Вы можете попробовать поставить печать на документе.

create_stamp("watermark") do
 rotate(30, :origin => [-5, -5]) do
   stroke_color "FF3333"
   stroke_ellipse [0, 0], 29, 15
   stroke_color "000000"
   fill_color "993333"
   font("Times-Roman") do
     draw_text "Watermark", :at => [-23, -3]
   end
   fill_color "000000"
 end
end

stamp_at "watermark", [210, 210] 
...