Пожалуйста, обратите внимание на следующем снимке экрана:
Я добавил 5 аннотаций к простой Hello World файл.
Первые два являются аннотациями ссылки. Их положение определяется прямоугольники linkLocation1
и linkLocation2
:
Rectangle linkLocation1 = new Rectangle(30, 770, 120, 800);
PdfAnnotation link1 = PdfAnnotation.createLink(stamper.getWriter(),
linkLocation1, PdfAnnotation.HIGHLIGHT_INVERT, action);
link1.setColor(BaseColor.RED);
stamper.addAnnotation(link1, 1);
Rectangle linkLocation2 = new Rectangle(30, 670, 60, 760);
PdfAnnotation link2 = PdfAnnotation.createLink(stamper.getWriter(),
linkLocation2, PdfAnnotation.HIGHLIGHT_INVERT, action);
link2.setColor(BaseColor.GREEN);
stamper.addAnnotation(link2, 1);
Зеленый прямоугольник выглядит повернутой версии красного прямоугольника, но это не совсем верно: мы просто определил «кликабельны» площадь таким образом. Я не понимаю, почему вы хотите получить этот эффект, введя поворот. Зачем? Потому что вращение всегда нуждается в вращающейся точке. Предположим, что вы вводите поворот, какова будет ваша точка поворота? Координата (0, 0)
? Это приведет к странным результатам, не так ли?
Внесение вращения для имеет смысл для некоторых типов аннотаций. В моем примере я представил три штемпеля аннотаций:
Rectangle linkLocation3 = new Rectangle(150, 770, 240, 800);
PdfAnnotation stamp1 = PdfAnnotation.createStamp(stamper.getWriter(), linkLocation3, "Landscape", "Confidential");
stamper.addAnnotation(stamp1, 1);
Rectangle linkLocation4 = new Rectangle(150, 670, 240, 760);
PdfAnnotation stamp2 = PdfAnnotation.createStamp(stamper.getWriter(), linkLocation4, "Portrait", "Confidential");
stamp2.setRotate(90);
stamper.addAnnotation(stamp2, 1);
Rectangle linkLocation5 = new Rectangle(250, 670, 340, 760);
PdfAnnotation stamp3 = PdfAnnotation.createStamp(stamper.getWriter(), linkLocation5, "Portrait", "Confidential");
stamp3.setRotate(45);
stamper.addAnnotation(stamp3, 1);
В этом случае, я ввести угол поворота с помощью метода setRotate()
. Это вращает маркер CONFIDENTIAL внутри прямоугольника, который мы определили. Как вы можете видеть, это имеет смысл, потому что аннотация имеет фактическое содержание: вращение влияет на то, как вы читаете слово CONFIDENTIAL. В случае кликабельной области аннотации ссылки нет такого содержимого для поворота.
Если это не ответит на ваш вопрос, пожалуйста, перефразируйте свой вопрос, потому что я не думаю, что кто-то может ответить на него в текущем состоянии.
Обновление См. ISO-32000-1, а также спецификацию PDF. Вы обнаружите, что прямоугольник определяется с помощью 4 значений: координаты x и y нижнего левого угла прямоугольника и координаты x и y верхнего правого угла прямоугольника. Это две стартовые точки горизонтальные и вертикальные сторон. Вы хотите прямоугольник, который имеет стороны, которые не являются горизонтальными/вертикальными. Очевидно, что это невозможно, так как вам нужны координаты 4-х угловых точек для достижения этого (8 значений, а не 4). Вы можете добиться этого, используя многоугольник, определенный QuadPoints. См. ITextShape Clickable Polygon or path
В чем вопрос? – leigero
Я боюсь, что linkGreen.applyCTM просто применяет преобразование в левом нижнем углу, а в верхнем правом углу и из двух полученных точек создает новый прямоугольник с краями, параллельными границам страницы. – mkl
OK @mkl, но я до сих пор не понимаю вопроса. Это аннотация * link *, почему вы хотите повернуть ее?Почему бы вам просто не изменить «linkLocation», чтобы прямоугольник находился в «портрете», а не в «landcape»? В некоторых случаях вращение аннотаций имеет смысл, но не в этом случае, не так ли? Я чувствую, что в вопросе чего-то не хватает. –