2014-12-09 2 views
1

У меня есть код, который использует iTextSharp добавить различные цветные прямоугольники на существующего PDF документа с помощью PdfStamper объекта с кодом, как следующее:Добавить Gradient заливка с использованием Stamper

Dim reader As New PdfReader(byte_contets_of_PDF_file) 
Dim stamper As New PdfStamper(reader, someOutputBuffer) 
Dim under As PdfContentByte = stamper.GetUnderContent(pageNumber) 
under.SetColorFill(BaseColors.RED) 
under.Rectangle(x, y, rectWidth, rectHeight) 
under.Fill() 

Это работает без помех для рисования монохроматические прямоугольники в существующем PDF-документе, но я надеялся, что смогу разместить прямоугольники, которые используют цветовой градиент.

Мое исследование показало примеры с использованием объектов PdfShading и PdfShadingPattern, но для них требуется PdfWriter. Насколько я понимаю, PdfWriter используется для создания новых PDF-файлов, а не для обновления существующих PDF-файлов.

Можно ли добавить прямоугольники в существующий документ PDF с градиентом?

Благодаря

+0

Вы пробовали просто с помощью 'свойство stamper.Writer', который даст вы являетесь базовым экземпляром PdfWriter? –

+0

@ChrisHaas, это было именно то, что мне нужно было знать, а именно, как получить базовый PdfWriter из шаблона. Спасибо, это работает как шарм. –

ответ

0

Я предполагаю, что вы прочитали ответ на этот вопрос: How to add a shading pattern to a custom shape

Я предполагаю, что ваша проблема в том, что вы не знаете, какой параметр использовать вместо writer.

Если это так, то используйте «stamper.GetOverContent (р)» вместо writer.DirectContent и использовать stamper.Writer вместо writer:

int p = 1; // or whatever page number applies 
PdfContentByte canvas = stamper.GetOverContent(p); 
float x = 36; 
float y = 740; 
float side = 70; 
PdfShading axial = PdfShading.SimpleAxial(writer, x, y, 
    x + side, y, BaseColor.PINK, BaseColor.BLUE); 
PdfShadingPattern shading = new PdfShadingPattern(axial); 
canvas.SetShadingFill(shading); 
canvas.MoveTo(x,y);   
canvas.LineTo(x + side, y); 
canvas.LineTo(x + (side/2), (float)(y + (side * Math.sin(Math.PI/3)))); 
canvas.ClosePathFillStroke(); 
Смежные вопросы