с внешностью.

ользую iTextSharp для рисования графики разметки в документах PDF, используя PdfAnnotation.CreateInk. Я пытаюсь нарисовать прямоугольники, передавая массив из пяти координат. Я знаю, что в iTextSharp есть специальная функция для рисования прямоугольников, но я пытаюсь использовать только один метод для рисования различных линий разметки, которые мне нужны, и кажется, что CeateInk должен это делать.

Проблема в том, что CreateInk рисует прямоугольник с кривыми, а не углами. Я не смог понять, как это изменить.Этот ответ предполагает, что решением может быть создание PdfAppearance; Я еще не выяснил, будет ли это работать. Вот мой код (первый бит преобразует список точек в массив массивов, который требуется для 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 ();
    }
}

Любые предложения очень ценятся. Спасибо!

РЕДАКТИРОВАТЬ: после кода @ mkl у меня теперь есть код, который создает PDF аннотации с внешними видами. И большинство этих аннотаций правильно отображаются в используемых мной программах просмотра. Но есть одно странное поведение, которое я не смог исправить.

Происходит то, что последняя созданная аннотация не отображается в приложениях для просмотра, пока я не создал другую аннотацию. Поэтому, если я создаю аннотацию A, она становится невидимой, пока я не создаю аннотацию B, в которой точка A появляется, а B - нет. Создание аннотации C приводит к появлению аннотации B и так далее.

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

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

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 ();
    }
}

[/код]

Есть ли что-то очевидное, чего мне не хватает? Заранее благодарю за любую помощь.

Ответы на вопрос(1)

Ваш ответ на вопрос