2017-09-12 1 views
0

iText에서 기존 PDF를 조작하여 각 단락 끝에 대시를 추가해야합니다. 이런 식으로 뭔가가 :iText - 기존 PDF 조작 - 각 단락 끝에 대시 추가

Tab leaders

나는 탭 지도자들과 말씀이를 만들 것입니다.

기존 문서에서 iText로 할 수 있습니까?

도움을 주시면 감사하겠습니다.

감사합니다! 해명

이 iText 버전

편집 5.5.x,하지만 난 작업이 최신 버전으로 쉬울 경우 우리가 그것을 업그레이드 할 수 있습니다 같아요.

대시가 필요없는 일부 단락이있을 수 있지만 원본 PDF를 제어 할 수 있습니다. 그것은 다른 시스템에서 조립되어 있으며 리더가 필요한 단락에 마커를 추가 할 수 있습니다 (즉, 단락 끝에 "~ tab ~"과 같은 텍스트를 추가 할 수 있음).

이 종류의 편집이 필요한 문서에는 머리글과 바닥 글이 있으며, 텍스트와 한 줄만 정렬 할 수 있습니다. 특정 문서에 대한 더욱 명확한

대시가 끝이 어디도 (구성에 따라)을 설정할 수 있습니다 (예 :. 10px에서)에 대한

편집. 이 방식으로 조작해야하는 모든 문서 유형 (및 구조)을 알고 있습니다.

+0

이미지에서 모든 단락의 너비가 같고 왼쪽과 오른쪽으로 정렬됩니다. 또한 단 하나의 텍스트 열이 있으며 단락, 머리글, 바닥 글, 여백없는 자료, 이미지가 없습니다. 그것은 당신의 임무에 대해 당연한 것으로 받아 들여질 수 있습니까? 당신이 사용하는 iText의 맛을 언급하지 않는다. 그것은 5.5.x 버전인가 7.0.x 버전인가? – mkl

+0

당신은 "* 특정 페이지에 대해 대시가 끝나야 만하는 곳 (즉, 10px)을 설정할 수 있습니다."* - 페이지 테두리에서 10px를 의미합니까? 또는 각 대시가 10px 이후에 끝나야한다는 뜻입니까? (그런데 픽셀은 PDF의 자연스러운 단위가 아닙니다.) – mkl

+0

예, 페이지 테두리를 기준으로 대시가 끝나는 위치를 지정할 수 있습니다. –

답변

2

이것은 매우 어렵습니다. PDF 문서는 WYSIWYG 형식이 아닌 지침의 컨테이너로 생각해야합니다. 그래서 라인이 어디에 있는지 찾아내는 것은 매우 어렵습니다.

높은 수준의 계획 : PDF 파일에서 이벤트를 처리 할 수 ​​

  1. 사용 IEventListener는 이벤트가 논리적 인 사건의 목록을 보장하기 위해 TextRenderInfo
  2. 그들에게
  3. 종류의 저장, TextRenderInfo 이벤트 피려 구문 분석 독서 명령. 당신이 라인을
  4. 병합을해야 그들이 같은 줄에 표시하고 지금
  5. (TextRenderInfo에 의해 지정된 글꼴 3 개 공간의 거리가 예를 들어) 떨어져 일정한 거리보다 작은 경우는
  6. 귀하의 목록에있는 항목을 병합 줄이 서로 수직으로 근접하여 나타나고 가로로 겹치는 경우 그들이 얼마나 가깝고 얼마나 겹치는 지 알아 내야 할 것이고, 페이지마다 다를 수도 있고, 문서별로 다를 수도 있습니다.
  7. 이제 단락을 가져야합니다.
  8. 각 단락의 경계 상자를 확인하십시오. 또는보다 정확하게 볼록한 선체. gift-wrapping 알고리즘이라고하는 좋은 알고리즘이 있습니다.
  9. 이제 볼록 선체를 검사하여 선을 삽입 할 수 있습니다. 이것은 쉬운 단계입니다.

마커를 삽입 할 수있는 경우 iText7을 사용하면 쉽게 마커를 삽입 할 수 있습니다. iText7에는 PDF 문서 내에서 정규 표현식을 찾을 수있게 해주는 IEventListener 구현이 있습니다. 정규식이 발견 된 위치를 반환합니다. 마커가 항상 일종의 정규 표현식을 충족시킬 수 있다면 쉽게 찾을 수 있고 좌표를 가져올 수 있으며 계산 된 위치에 선을 삽입 할 수 있습니다.

물론 마커 텍스트를 제거해야합니다. pdfSweep을 사용할 수 있습니다.

+0

아이디어에 감사드립니다. 나는 제안대로하려고 노력할 것이다. 내가 줄을 필요로하는 단락 끝에 "~ ~ ~"같은 텍스트 마커를 추가하면 더 간단할까요? (제발, 질문 편집 참조)? –

+0

변경된 정보를 포함하도록 답변을 업데이트했습니다. –