2015-03-27 4 views
0

Мне нужно повернуть прямоугольник ссылки с помощью Java iText.Java iText Поворот ссылки Rectangle

Оригинальная ссылка прямоугольника появляется в красном цвете. Прямоугольник с вращающейся связью отображается зеленым цветом.

Мой код:

PdfReader reader = new PdfReader("input/blank.pdf"); 
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream( "output/blank_stamped.pdf")); 
Rectangle linkLocation = new Rectangle(100, 700, 100 + 200, 700 + 25); 
PdfName highlight = PdfAnnotation.HIGHLIGHT_INVERT; 
PdfAnnotation linkRed = PdfAnnotation.createLink(stamper.getWriter(), linkLocation, highlight, "red"); 
PdfAnnotation linkGreen = PdfAnnotation.createLink(stamper.getWriter(), linkLocation, highlight, "green"); 
BaseColor baseColorRed = new BaseColor(255,0,0); 
BaseColor baseColorGreen = new BaseColor(0,255,0); 
linkRed.setColor(baseColorRed); 
linkGreen.setColor(baseColorGreen); 
double angleDegrees = 10; 
double angleRadians = Math.PI*angleDegrees/180; 
stamper.addAnnotation(linkRed, 1); 
linkGreen.applyCTM(AffineTransform.getRotateInstance(angleRadians)); 
stamper.addAnnotation(linkGreen, 1); 
stamper.close(); 

Но этот код не вращает recangle.

+0

В чем вопрос? – leigero

+1

Я боюсь, что linkGreen.applyCTM просто применяет преобразование в левом нижнем углу, а в верхнем правом углу и из двух полученных точек создает новый прямоугольник с краями, параллельными границам страницы. – mkl

+0

OK @mkl, но я до сих пор не понимаю вопроса. Это аннотация * link *, почему вы хотите повернуть ее?Почему бы вам просто не изменить «linkLocation», чтобы прямоугольник находился в «портрете», а не в «landcape»? В некоторых случаях вращение аннотаций имеет смысл, но не в этом случае, не так ли? Я чувствую, что в вопросе чего-то не хватает. –

ответ

0

Пожалуйста, обратите внимание на следующем снимке экрана:

enter image description here

Я добавил 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

+0

Спасибо за ваш ответ. Я вижу, что вы повернули штамп, но мне нужно повернуть ссылку. –

+0

Вы поняли обновление? –

+0

Да, я понял обновление. –

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