2017-10-20 1 views
0

나는 분명히 볼 수 없다고 생각하기 시작했습니다.Apache POI를 사용하여 PowerPoint 슬라이드의 두 점 사이에 선 그리기

다음 코드가 주어지면 [x1, y1] 좌표에서 [x2, y2] 좌표까지 선을 그립니다. I는 [X1, Y1]의 앵커 시작 그런데 I 대상 점의 좌표 대신 폭과 높이를 입력해야 광고를 볼 수있는 것과

int x1 = 20; 
int y1 = 10; 
int x2 = 30; 
int y2 = 5; 

XSLFSlide pptSlide = ... 

XSLFAutoShape shape = pptSlide.createAutoShape(); 
shape.setShapeType(ShapeType.LINE); 
shape.setAnchor(x1, y1, <width>, <height>); 

. 그러나 대상 좌표의 y 구성 요소가 시작 좌표보다 작기 때문에 PowerPoint에서 생성 된 PPTX 문서를 열려고 할 때 오류가 발생하는 음수 값을 높이려고했습니다 ("PowerPoint에서 콘텐츠에 문제가 있음을 발견했습니다. out.pptx 파일에서 ");

나는 이것에 대한 명백한 해결책을 간과하고 있다는 것을 확신한다. 아무도 내가 알아내는 것을 도울 수 없다. 문서 내의 한 지점을 다른 지점으로 그리는 방법은 무엇인가?

답변

2

SetAnchor()은 너비 또는 높이가 음수인지 실제로 걱정하지 않습니다. 그러나 POI는 그런 식으로 해석하지 않으며 불행히도 예외를 알리지 않습니다. 내가 시나리오를 알고있는 것처럼

, 당신은 단지 낮은 시작이 x1x2, y1y2 사이에 좌표를 너무 긍정적 폭과 높이가 원하는 엔드 포인트에 동의 것을 선택해야합니다. 이 같은

뭔가 : y를 20,5하고 오른쪽 아래 X에서 끝 :

// using Apache POI ooxml 3.17 
static void drawBetweenTwoPoints(XSLFAutoShape shape, double x1, double x2, double y1, double y2) { 
    shape.setAnchor(new Rectangle2D.Double(
      x1 <= x2 ? x1 : x2, // choose the lowest x value 
      y1 <= y2 ? y1 : y2, // choose the lowest y value 
      Math.abs(x2 - x1), // get the actual width 
      Math.abs(y2 - y1) // get the actual height 
    )); 

    shape.setFlipVertical(y2 < y1); // lines are drawn from rectangle top-left to 
            // bottom right by default. 
            // When y2 is less than y1, flip the shape. 
} 
+1

코드를 사용하여 사각형은 Y, 왼쪽 상단 X에서 시작 30,10. 선은 기본값 당 왼쪽 위에서 아래로 오른쪽입니다. 그래서 선은 x, y : 20,5에서 x, y : 30,10까지입니다. 코드 뒤에'shape.setFlipVertical (true);'를 넣으십시오. 뒤집힌 선은 왼쪽 아래에서 오른쪽 상단까지입니다. 그래서 선은 x, y : 20,10에서 x, y : 30,5까지 필요에 따라 있습니다. –

+0

좋은 지적. 지금 구현했습니다. 감사! –

관련 문제