Método iTextSharp CreateInk: curvas e cantos

Estou usando o iTextSharp para desenhar gráficos de marcação em documentos PDF, usando PdfAnnotation.CreateInk. Estou tentando desenhar retângulos, passando por uma série de cinco coordenadas. Eu sei que o iTextSharp tem uma função dedicada para desenhar retângulos, mas estou tentando usar apenas um método para desenhar os vários tipos de linhas de marcação de que preciso, e parece que o CeateInk deve fazer isso.

O problema é que o CreateInk está desenhando o retângulo com curvas em vez de cantos. Não consegui descobrir como mudar isso.Esta resposta sugere que a solução pode ser criar uma aparência de PDF; Ainda não descobri se isso vai funcionar. Aqui está o meu código (o primeiro bit converte uma lista de lista de pontos em uma matriz de matrizes, exigida pelo InkList):

    public void MarkupInk(List<List<float>> InkList){   
    float[][] Coords = new float[InkList.Count][];                      
    for (int i = 0; i < InkList.Count; i++) {                   
        float[] thisarr = InkList [i].ToArray ();
        Coords[i] = new float[InkList[i].Count];
        System.Array.Copy (thisarr, Coords [i], InkList [i].Count);  
    }
    using(MemoryStream ms = new MemoryStream ()){   
        PdfReader reader = new PdfReader (textmaster.pdfDocArr);
        PdfStamper stamper = new PdfStamper (reader, ms);
        pagerect = reader.GetPageSize (textmaster.currentfirstpage + 1);
        PdfAnnotation an2 = PdfAnnotation.CreateInk (stamper.Writer, pagerect, "", Coords);
        an2.Color = strokeColor;
        an2.BorderStyle = new PdfBorderDictionary (strokeWeight, PdfBorderDictionary.STYLE_SOLID);
        stamper.AddAnnotation (an2, textmaster.currentfirstpage+1);
        stamper.Close ();
        textmaster.pdfDocArr = ms.ToArray ();
        reader.Close ();
    }
}

Todas as sugestões são muito apreciadas. Obrigado!

EDIT: seguindo o código do @ mkl agora tenho um código que cria PDFAnnotations com aparências. E a maioria dessas anotações aparece corretamente nos aplicativos de exibição que eu uso. Mas há um comportamento estranho que não fui capaz de corrigir.

O que está acontecendo é que a anotação criada mais recentemente não aparece nos aplicativos de exibição até que eu crie outra anotação. Portanto, se eu criar a anotação A, ficará invisível até criar a anotação B; nesse momento, a anotação A aparecerá e B não. Criar a anotação C faz com que a anotação B apareça e assim por diante.

Esse comportamento persiste mesmo se eu fechar o arquivo pdf e o aplicativo de visualização e recarregar a partir do disco. Portanto, os dados que descrevem a última anotação criada existem como parte do arquivo pdf, mas não são renderizados até que eu crie uma nova anotação.

Suspeito que ainda exista algo que ainda esteja faltando no código que estou usando para criar as anotações e as aparências em pdf. Aqui está o código que cria uma anotação de linha única:

public void WriteLineAnnotation(List<float> polyCoords){    

    using (MemoryStream ms = new MemoryStream ()) {
        PdfReader reader = new PdfReader (textmaster.pdfDocArr);
        PdfStamper stamper = new PdfStamper (reader, ms) { AnnotationFlattening = true };
        pagerect = reader.GetPageSize (textmaster.currentfirstpage + 1);

        //Create the pdfAnnotation polyline
        PdfAnnotation polyann = PdfAnnotation.CreatePolygonPolyline (stamper.Writer, pagerect, "", false, new PdfArray (polyCoords.ToArray ()));
        polyann.Color = strokeColor;
        polyann.BorderStyle = new PdfBorderDictionary (strokeWeight, PdfBorderDictionary.STYLE_SOLID);
        polyann.Flags = iTextSharp.text.pdf.PdfAnnotation.FLAGS_PRINT;

        //create the PdfAppearance and set attributes
        PdfAppearance app = PdfAppearance.CreateAppearance (stamper.Writer, pagerect.Width, pagerect.Height);
        app.SetColorStroke (strokeColor);
        app.MoveTo (polyCoords [0], polyCoords [1]);
        app.LineTo (polyCoords [2], polyCoords [3]);
        app.Stroke ();

        //set the annotation's appearance, add annotation, clean up
        polyann.SetAppearance (PdfName.N, app);
        stamper.AddAnnotation (polyann, textmaster.currentfirstpage + 1);
        stamper.Close ();
        reader.Close ();

        //create bytearray from memorystream and send to pdf renderer
        textmaster.pdfDocArr = ms.ToArray ();
    }
}

[/código]

Existe algo óbvio que estou perdendo? Agradecemos antecipadamente por qualquer ajuda.

questionAnswers(1)

yourAnswerToTheQuestion