Я использую окно PDF, чтобы попытаться создать несколько прямоугольников с изогнутыми краями. Наконец, выяснив, как использовать кривые Безье, я смог получить форму, которая мне понравилась. Моя проблема сейчас в том, что я не могу понять, как ее заполнить. Я попытался закрыть путь в случайных точках, нарисовав фигуру, используя только кривые Безье, поглаживая путь в случайных точках, закрыв путь в случайных точках, но это все равно не заполнит все. Это только кажется, чтобы заполнить закругленные края кривой. Может кто-нибудь, пожалуйста, дайте мне знать, что я делаю не так? Спасибо. генератор - это объект, который я использую для получения горизонтальных и вертикальных положений, которые в настоящее время установлены на странице. Значения горизонтального и вертикального положения в этом примере не меняются (горизонтальное положение равно 200, а вертикальное - 240). Вот код, который я использую (извините за волшебные цифры c)
Вот изображение на странице PDF, которое по какой-то причине не будет заполнено:
//Creating PDF document object
PDDocument document = new PDDocument();
//Creating the PDDocumentInformation object
PDDocumentInformation pdd = document.getDocumentInformation();
generator.drawRectangleWithCurvedBorders(200, 400, cs, generator);
public void drawRectangleWithCurvedBorders(int width, int height, PDPageContentStream contentStream, XClass generator) throws IOException
{
contentStream.setStrokingColor( Color.BLACK );
contentStream.setNonStrokingColor( Color.BLACK );
// bottom of rectangle
contentStream.moveTo(generator.getHorizontalPosition() - 0.5f, generator.getVerticalPosition() );
contentStream.lineTo(generator.getHorizontalPosition() + width + 0.5f, generator.getVerticalPosition() );
contentStream.moveTo(generator.getHorizontalPosition() + width, generator.getVerticalPosition() );
contentStream.curveTo(generator.getHorizontalPosition() + width + 5.9f, generator.getVerticalPosition() + 0.14f,
generator.getHorizontalPosition() + width + 11.06f, generator.getVerticalPosition() + 5.16f,
generator.getHorizontalPosition() + width + 10.96f, generator.getVerticalPosition() + 10);
// left of rectangle
contentStream.moveTo(generator.getHorizontalPosition(), generator.getVerticalPosition() );
contentStream.curveTo(generator.getHorizontalPosition() - 5.9f, generator.getVerticalPosition() + 0.14f,
generator.getHorizontalPosition() - 11.06f, generator.getVerticalPosition() + 5.16f,
generator.getHorizontalPosition() - 10.96f, generator.getVerticalPosition() + 10);
contentStream.moveTo(generator.getHorizontalPosition() - 10.96f, generator.getVerticalPosition() + 10 - 0.5f);
contentStream.lineTo(generator.getHorizontalPosition() - 10.96f, generator.getVerticalPosition() + height + 0.5f );
// right of rectangle
contentStream.moveTo(generator.getHorizontalPosition() + width + 10.96f, generator.getVerticalPosition() + 10 - 0.5f);
contentStream.lineTo(generator.getHorizontalPosition() + width + 10.96f, generator.getVerticalPosition() + height + 0.5f);
contentStream.moveTo(generator.getHorizontalPosition() + width, generator.getVerticalPosition() + height + 10);
contentStream.curveTo(generator.getHorizontalPosition() + width + 5.9f, generator.getVerticalPosition() + height + 0.14f + 10,
generator.getHorizontalPosition() + width + 11.06f, generator.getVerticalPosition() + height - 5.16f + 10,
generator.getHorizontalPosition() + width + 10.96f, generator.getVerticalPosition() + height);
// top of rectangle
contentStream.moveTo(generator.getHorizontalPosition() + width + 0.5f, generator.getVerticalPosition() + height + 10);
contentStream.lineTo(generator.getHorizontalPosition() - 0.5f, generator.getVerticalPosition() + height + 10);
contentStream.moveTo(generator.getHorizontalPosition(), generator.getVerticalPosition() + height + 10);
contentStream.curveTo(generator.getHorizontalPosition() - 5.9f, generator.getVerticalPosition() + height + 0.14f + 10,
generator.getHorizontalPosition() - 11.06f, generator.getVerticalPosition() + height - 5.16f + 10,
generator.getHorizontalPosition() - 10.96f, generator.getVerticalPosition() + height);
contentStream.closePath();
contentStream.fill();
}