2015-07-05 3 views
1

Возможно ли иметь roundRectangle без рамки? Следующий код создает roundRectangles и прямоугольники с размерами границ 0f и 1f. Для roundRectangle по-прежнему существует видимая граница, когда для параметра lineWidth установлено значение 0f, но это неверно для прямоугольника с границей 0f.iText - roundRectangle без рамки

Вот код, я использую:

magazine = new Document(PageSize.LETTER,0,0,0,0); 
    pdfw = PdfWriter.getInstance(magazine, new FileOutputStream("out.pdf")); 
    magazine.open(); 

    canvas = pdfw.getDirectContent(); 

    canvas.rectangle(0,0,600,750); 
    canvas.setColorFill(BaseColor.ORANGE); 
    canvas.fillStroke(); 

    canvas.setColorStroke(BaseColor.BLACK); 
    canvas.setColorFill(BaseColor.GRAY); 
    canvas.setLineWidth(1f); 

    llx = 100; 
    lly = 100; 
    wid = 100; 
    hei = 100; 
    canvas.roundRectangle(llx,lly, wid, hei, 10); 
    canvas.fillStroke(); 

    llx = 100; 
    lly = 210; 
    wid = 100; 
    hei = 100; 
    canvas.rectangle(llx,lly, wid, hei); 
    canvas.fillStroke(); 

    canvas.setColorStroke(BaseColor.BLACK); 
    canvas.setColorFill(BaseColor.WHITE); 
    canvas.setLineWidth(0f); 

    llx = 210; 
    lly = 100; 
    wid = 100; 
    hei = 100; 
    canvas.roundRectangle(llx,lly, wid, hei, 10); 
    canvas.fillStroke(); 

    llx = 210; 
    lly = 210; 
    wid = 100; 
    hei = 100; 
    canvas.rectangle(llx,lly, wid, hei); 
    canvas.fillStroke(); 
+0

* это неверно для прямоугольника с границей 0f * - это будет ошибка, так как ** Ширина линии 0 должна обозначать самую тонкую строку, которая может быть отображена при разрешении устройства: 1 пиксель устройства, ** ср. спецификация. – mkl

ответ

0

При рисовании линий и форм в формате PDF, можно использовать строительство пути операторов. Следующий метод вводит оператор re (прямоугольник) для построения прямоугольника.

canvas.rectangle(0,0,600,750); 

iText также предоставляет удобные методы. Например: следующий метод вводит последовательность m (перейти), l (линию), c (кривая в), ... операторы:

canvas.roundRectangle(llx,lly, wid, hei, 10); 

Как только вы построили путь, вы может использовать оператор окраски , чтобы на самом деле нарисовать что-то. iText имеет разные варианты fill(), stroke() и fillStroke().

Вы используете этот метод:

canvas.fillStroke(); 

Это означает, что вы заполняете путь с цветом заливки и погладить путь с цветом обводки. В своем вопросе вы указываете, что хотите только заполнить путь (вы хотите покрасить то, что находится внутри закругленного прямоугольника); вы не хотите его гладить (вы не хотите рисовать границу закругленного прямоугольника).

Этого легко достичь. Просто замените fillStroke() на fill():

canvas.fill(); 

Теперь вы будете только заполнить прямоугольник с закругленными углами и не инсульта в его границы.

Комментарий MKL:

Ширин линии 0 будет обозначать самую тонкую линию, которая может быть предоставлена ​​при разрешении устройства: 1 пиксель устройства широкого.

Это правильно. Распространенным заблуждением является то, что изменение ширины линии до 0 означает, что линия не нарисована при вызове stroke(). Если вы не хотите видеть линию, решение прост: не ход это.

Смежные вопросы