2013-07-16 5 views
3

H 전체에 층을 제거, 내가 PDF에 텍스트 레이어를 추가 iText를 사용하고iText를 편집 또는 PDF

. 이제 PDF의 기존 레이어를 편집하고 레이어도 IText로만 만듭니다. IText에는 그런 지원 방법이 없다.

나는 기존 레이어를 제거하고 그 자리에 새 레이어를 배치하는 다른 방법이 있다고 생각했습니다. IText에서도 지원하지 않는 제거와 같습니다. 이것들을 어떻게 할까?

감사합니다.

+0

PDF에는 레이어 개념이 없습니다. 백그라운드에서 PDF에 무언가를 추가하는 경우 기존 내용 앞에 추가하기 만하면됩니다. 포 그라운드의 경우 이후에 추가합니다. iText를 사용하여 이러한 종류의 변경 작업을 실제로 사용한 경우 이러한 변경 집합을 인식하고 제거 할 수 있습니다. iText 저수준 API 만 사용하면됩니다. – mkl

+0

아니면 iText가 실제로 PDF 용어에서 선택적 콘텐츠 그룹 인 'PdfLayer'를 호출하는지 확인해보십시오. – mkl

+0

예 내가 PdfLayer에 대해 이야기하고 -이 내가 텍스트를 작성하고 PDF에 배치됩니다 사용하여, 우리는 레이어 – JAVAC

답변

4

코멘트에서 밝혀 졌 듯이 실제로 레이어는 iText가 레이어라고 부르는 것이지만 실제로 PDF 전문 용어에서는 이라는 선택적 콘텐츠 그룹이 있습니다. 같은 패키지의 클래스 OCGParser를 사용합니다 com.itextpdf.text.pdf.ocg.OCGRemover :

참으로 유틸리티 상기 iText를 엑스트라 패키지에 같은 층을 제거하기위한 클래스 (안 extrajars,하지만하여 itext-xtra.jar)가있다.

/** 
* Class that knows how to remove OCG layers. 
*/ 
public class OCGRemover 
{ 
    /** 
    * Removes layers from a PDF document 
    * @param reader a PdfReader containing a PDF document 
    * @param layers a sequence of names of OCG layers 
    * @throws IOException 
    */ 
    public void removeLayers(PdfReader reader, String... layers) throws IOException 
    [...] 
} 

PdfReader에이 방법을 적용하면 당신은 분명, 예를 변경 내용을 저장해야 에 의해 PdfStamper.

+0

예 내가 시도 그것으로 PDF 뷰어 도구에서 볼 수있는이 있지만에서 예외 에게 java.lang.NullPointerException이 \t를 던지고 com.itextpdf.text.pdf.PdfReader.getStreamBytes (PdfReader.java:2281) com.itextpdf.text에서 com.itextpdf.text.pdf.ocg.OCGParser.parse (OCGParser.java:132)에서 \t \t. pdf.ocg.OCGRemover.parse (OCGRemover.java:222) \t com.itextpdf.text.pdf.ocg.OCGRemover.removeLayers (OCGRemover.java:81 – JAVAC

+0

) 문제 재현을위한 샘플 PDF를 제공 할 수 있습니까? – mkl

+0

Ah , 방금 NPE에 대한 가능한 이유 중 하나를 발견했습니다 :'OCGRemover.parse'는'page.g etAsStream (PdfName.CONTENTS)'를 사용하여 페이지 내용을 검색하십시오. 그러나 내용은 단일 스트림 일 필요는 없으며, 스트림의 배열 일 수도 있습니다.이 경우'getAsStream'은'null'을 반환합니다. 그러면'OCGParser.parse'로 전달되어 구문 분석되어 얼굴에서 폭발합니다 'PdfReader.getStreamBytes.'에서'OCGParser.parse' 또한 내용 배열을 처리하도록 확장되어야합니다. 오, 음, xtras는 다소 실험적인 문자를 가지고 있습니다 ... – mkl

관련 문제