문제

PDF 문서를 취하고 모든 북마크에서 이름이 지정된 목적지를 작성하는 일부 (Java) 코드를 작성하고 싶습니다. ITEXT API가 가장 쉬운 방법이라고 생각하지만 이전에는 API를 사용한 적이 없습니다.

ITEXT API로 이런 종류의 코드를 작성하는 방법은 무엇입니까? ITEXT는 기존 PDF를 자체적으로 조작하는 데 필요한 구문 분석을 할 수 있습니까? 내가 생각하는 조작의 종류는 다음과 같습니다.

  • 열려 있는,
  • 북마크 찾기,
  • 목적지 생성,
  • 구하다,
  • 닫다.

아니면 더 나은 다른 API가 있습니까?

도움이 되었습니까?

해결책

나는 당신이 이것에 실망했을 것이라고 경고 할 것입니다. ITEXT는 실제로 구문 분석기로 사용되는 것이 아닙니다. 창조에 더 많은 것입니다 완전히 새로운 PDF 문서이지만 그 문서를 취할 수 있습니다.

시작, ITEXT를 사용하려면 기존 PDF 문서를 수정할 수 없습니다. 당신이 ~할 수 있다 그러나 원하는 추가 기능으로 사본을 만드는 것입니다. (다른 사람이 더 잘 알고 있다면 제발 알려주세요, 이것은 나를 미치게합니다.)

원하는 것은 소스 파일의 입력 스트림에서 pdfreader 객체를 만드는 것입니다. 그런 다음 대상에 대한 pdfcopy 객체 (기존 소스에서 데이터를 가져 오는 확장 된 pdfwriter)를 만듭니다.

내가 알 수있는 한, 책갈피는 itext에서 전혀 얻을 수 없습니다. 다른 도서관이 필요할 수 있습니다. 제 생각에는 Jpedal 그것들을 추출 할 수 있습니다 (XML 문서로 가져올 수 있습니다. 그러면 원하는 것을 얻기 위해 구문 분석해야 할 수도 있습니다.) 그러나 당신은 그것들을 얻을 수 있습니다. 그런 다음 java.util.list에 추가 할 수 있습니다. 해당 목록을 PDFCopy의 개요로 설정하십시오. 북마크 자체는 특정 키 세트가있는 해시 맵입니다. 모든 값이 무엇인지 잘 모르겠지만 "제목", "액션"이 포함 ) 및 "uri"(이것은 외부 링크 인 경우 사용됩니다. 링크중인 명명 된 대상의 이름을 지정할 것으로 생각됩니다). 다시 말하지만, 세부 사항은 찾기가 어렵습니다.

그런 다음 독자의 페이지를 반복하여 각 페이지를 PDFCopy로 가져옵니다. 이 페이지 당신을 도울 수 있습니다.

더 도움이되지 않아서 죄송합니다. 행운을 빕니다.

추신 : 다른 사람이 (L) GPL 또는 BSD 라이센스가있는 더 나은 도구를 알고 있다면, 나는 그것에 대해 듣고 싶습니다.

다른 팁

후속 조치 : 몇 달 전에 ITEXT에 패치를 제출했습니다. PDFBox (아래 언급)에는 이전 XREF 테이블 형식 대신 XREF 스트림을 사용하는 최신 PDF를 읽는 데 문제가 있습니다.


또 다른 도서관 ~이다 기존 PDF 파일을 파싱하는 데 매우 능숙합니다 pdfbox 또한 기존 PDF를 수정하는 데 사용될 수도 있습니다. 참고 - 이것은 루센이 사용하는 텍스트 파서입니다.

나는 또한 itext를 언급 할 것입니다 하다 PDF 파일을 구문 분석 할 수있는 기능이 있으면 각 페이지의 텍스트 내용을 구문 분석하는 데 큰 도움이되지 않습니다. 북마크 등을 저장하는 데 사용되는 PDF 더 높은 수준의 구조물 (사전 등)에 액세스하려는 경우 PDF 사양을 읽는 데 손을 조금 더러워지는 것을 신경 쓰지 않으면 가능합니다. 당신이 요구하는 일을 절대적으로하십시오 (우리는 우리 자신이 꽤 우리 자신을합니다).

그만큼 PDF 사양 크고, 대부분 읽을 수 있으며, 당신이하려는 모든 것이 책갈피를 추출하는 경우 대부분의 대량 (실제 페이지 컨텐츠 및 렌더링에 맞춰)에 대해 걱정할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top