Author: tilman Date: Sat Jul 31 09:52:20 2021 New Revision: 1891914 URL: http://svn.apache.org/viewvc?rev=1891914&view=rev Log: PDFBOX-4892: optimize, as suggested by valerybokov
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAbstractAppearanceHandler.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAbstractAppearanceHandler.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAbstractAppearanceHandler.java?rev=1891914&r1=1891913&r2=1891914&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAbstractAppearanceHandler.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAbstractAppearanceHandler.java Sat Jul 31 09:52:20 2021 @@ -309,14 +309,15 @@ public abstract class PDAbstractAppearan break; case PDAnnotationLine.LE_R_OPEN_ARROW: case PDAnnotationLine.LE_R_CLOSED_ARROW: - drawArrow(cs, x + (0 - sign) * width, y, (0 - sign) * width * 9); + drawArrow(cs, x + (-sign) * width, y, (-sign) * width * 9); break; case PDAnnotationLine.LE_SLASH: + float width9 = width * 9; // the line is 18 x linewidth at an angle of 60° - cs.moveTo(x + (float) (Math.cos(Math.toRadians(60)) * width * 9), - y + (float) (Math.sin(Math.toRadians(60)) * width * 9)); - cs.lineTo(x + (float) (Math.cos(Math.toRadians(240)) * width * 9), - y + (float) (Math.sin(Math.toRadians(240)) * width * 9)); + cs.moveTo(x + (float) (Math.cos(Math.toRadians(60)) * width9), + y + (float) (Math.sin(Math.toRadians(60)) * width9)); + cs.lineTo(x + (float) (Math.cos(Math.toRadians(240)) * width9), + y + (float) (Math.sin(Math.toRadians(240)) * width9)); break; default: return; @@ -348,9 +349,11 @@ public abstract class PDAbstractAppearan // cos(angle) = x position // sin(angle) = y position // this comes very close to what Adobe is doing - cs.moveTo(x + (float) (Math.cos(ARROW_ANGLE) * len), y + (float) (Math.sin(ARROW_ANGLE) * len)); + float armX = x + (float) (Math.cos(ARROW_ANGLE) * len); + float armYdelta = (float) (Math.sin(ARROW_ANGLE) * len); + cs.moveTo(armX, y + armYdelta); cs.lineTo(x, y); - cs.lineTo(x + (float) (Math.cos(ARROW_ANGLE) * len), y - (float) (Math.sin(ARROW_ANGLE) * len)); + cs.lineTo(armX, y - armYdelta); } /** Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java?rev=1891914&r1=1891913&r2=1891914&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java Sat Jul 31 09:52:20 2021 @@ -63,7 +63,8 @@ public class PDLinkAppearanceHandler ext public void generateNormalAppearance() { PDAnnotationLink annotation = (PDAnnotationLink) getAnnotation(); - if (annotation.getRectangle() == null) + PDRectangle rect = annotation.getRectangle(); + if (rect == null) { // 660402-p1-AnnotationEmptyRect.pdf has /Rect entry with 0 elements return; @@ -93,7 +94,6 @@ public class PDLinkAppearanceHandler ext { // QuadPoints shall be ignored if any coordinate in the array lies outside // the region specified by Rect. - PDRectangle rect = annotation.getRectangle(); for (int i = 0; i < pathsArray.length / 2; ++i) { if (!rect.contains(pathsArray[i * 2], pathsArray[i * 2 + 1])) @@ -122,19 +122,22 @@ public class PDLinkAppearanceHandler ext pathsArray[7] = borderEdge.getUpperRightY(); } - int of = 0; - while (of + 7 < pathsArray.length) + boolean underlined = false; + if (pathsArray.length >= 8) { - if (annotation.getBorderStyle() != null && - annotation.getBorderStyle().getStyle().equals(PDBorderStyleDictionary.STYLE_UNDERLINE)) + PDBorderStyleDictionary borderStyleDic = annotation.getBorderStyle(); + if (borderStyleDic != null) { - contentStream.moveTo(pathsArray[of], pathsArray[of + 1]); - contentStream.lineTo(pathsArray[of + 2], pathsArray[of + 3]); + underlined = PDBorderStyleDictionary.STYLE_UNDERLINE.equals(borderStyleDic.getStyle()); } - else + } + int of = 0; + while (of + 7 < pathsArray.length) + { + contentStream.moveTo(pathsArray[of], pathsArray[of + 1]); + contentStream.lineTo(pathsArray[of + 2], pathsArray[of + 3]); + if (!underlined) { - contentStream.moveTo(pathsArray[of], pathsArray[of + 1]); - contentStream.lineTo(pathsArray[of + 2], pathsArray[of + 3]); contentStream.lineTo(pathsArray[of + 4], pathsArray[of + 5]); contentStream.lineTo(pathsArray[of + 6], pathsArray[of + 7]); contentStream.closePath();