2016-08-18 7 views
0

Все примеры показывают, как добавить текстовый водяной знак с помощью PDFsharp. но что делать, если мне нужно добавить водяной знак?Как добавить водяной знак изображения в PDFsharp?

Я сделал это:

if (!String.IsNullOrEmpty(_logo) && System.IO.File.Exists(_logo)) 
{ 
    XImage logo = XImage.FromFile(_logo); 
    XRect rectLogo = new XRect(0, 0, page.Width, page.Height); 
    rectLogo.Scale(0.5, 0.5); 
    gfx.DrawImage(logo, rectLogo); 
} 

Изображение появляется, но не в качестве водяного знака.

EDIT:

я наконец поставил водяной знак вручную, однако, есть еще одна вещь, чтобы решить. Как изменить непрозрачность XImage? Я могу сделать это, используя процессор изображений, но это не идея. Это программное обеспечение, которое будет использовать обычного пользователя, и я не могу сказать ему, чтобы он изменил изображение, прежде чем назначать его как водяной знак. Любое решение?

Это код на данный момент:

  if (!String.IsNullOrEmpty(_logo) && System.IO.File.Exists(_logo)) 
      { 
       XImage logo = XImage.FromFile(_logo); 
       double width = logo.PointWidth; 
       double height = logo.PointHeight; 
       double ratio = width/height; 
       if (width > page.Width.Point * 0.5) 
       { 
        width = page.Width.Point * 0.5; 
        height = width/ratio; 
       } 
       else if (height > page.Height.Point * 0.5) 
       { 
        height = page.Height.Point * 0.5; 
        width = height * ratio; 
       } 

       double offsetX = (page.Width.Point - width)/2; 
       double offsetY = (page.Height.Point - height)/2; 

       XRect rectLogo = new XRect(offsetX, offsetY, width, height); 
       gfx.DrawImage(logo, rectLogo); 
      } 
+0

Вы не говорите нам, что вы ожидаете, вы не говорите нам, что вам нужно. Рисование изображения, как и вы, похоже на правильный подход, но для получения оптимального результата может потребоваться некоторая настройка. –

+0

Что вы комментируете, не обязательно указывать, знаете ли вы, что такое водяной знак. Мой appoach просто помещает изображение перед текстом. Конечно, мне нужно, чтобы он был помещен за текст и с меньшей непрозрачностью. Если вы знаете Microsoft Word, вы можете точно знать, что мне нужно, если вы видите его вариант водяного знака. – jstuardo

ответ

0

Как обычно компьютер делает то, что вы ему говорите, а не то, что вы хотите от него делать.

Если вы хотите иметь изображение ниже другого содержимого, то сначала нарисуйте его.

Если вы хотите получить полупрозрачное изображение, используйте прозрачное изображение или нарисуйте его с прозрачностью. В этом случае вы можете поместить изображение выше всего остального содержимого страницы.

+0

Спасибо ... ты дал мне ключ. Я нарисовал изображение перед текстом, и я почти там. Я изменил вопрос, который сейчас объясняет проблему. Мне нужно изменить непрозрачность изображения. Возможно ли это с PdfSharp? или, возможно, я могу сделать это с помощью объекта System.Drawing.Image, а затем загрузить его в XImage с помощью XImage.FromGdiPlusImage – jstuardo

+0

Я боюсь, что нет документального способа рисования изображений с прозрачностью (была ошибка, которая позволила это сделать, но ошибка исправлена ​​с помощью текущих внутренних сборников). Hack: Нарисуйте изображение и нарисуйте белый прямоугольник с прозрачностью над изображением. Я думаю, что использовать System.Drawing.Image проще, чтобы сделать трюк. Вызовите FromGdiPlusImage только один раз и используйте его для всех страниц, чтобы избежать наличия нескольких копий изображения в вашем PDF-файле. Нет проблем с FromFile, но FromGdiPlusImage может привести к нескольким копиям. –

+0

Наконец-то я сделал это. Я изменил непрозрачность с помощью System.Drawing.Image, и теперь он отлично работает. – jstuardo

0

Проблема с образцами Watermark PDFsharp является тот факт, что они не используют реальную функциональность водяных знаков, введенные в PDF 1.6 версии (reference). Образцы используют объект XGraphics для рисования под существующим контентом, но это всего лишь фальшивый водяной знак. Вот прямая цитата из документации:

Примечание: Технически водяные знаки в этом примере представляют собой простой графический выход. Они не имеют ничего общего с аннотациями Watermark, представленными в PDF 1.5.

Пожалуйста, обратите внимание, что официальная ссылка на Adobe говорит, что водяные знаки аннотации были введены в PDF 1.6, так что, кажется, ошибка в документации PDFsharp в.

К сожалению, у меня нет надежного источника, поддерживает ли PDFsharp реальные водяные знаки, но я не видел никаких доказательств того, что они делают. Дело в том, что версия PDF 1.4 полностью поддерживается, и все выше нее поддерживается только частично.