itext를 사용하여 pdf를 수정하는 동안 예외 발생

DevAvitesh

itext를 사용하여 pdf 문서를 수정하는 동안 예외가 발생합니다. 문제는 언젠가 작동하고 때로는 오류가 발생하는 것처럼 매우 산발적입니다.

at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.access$6100(PdfContentStreamProcessor.java:60)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor$Do.invoke(PdfContentStreamProcessor.java:991)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpContentOperator.invoke(PdfCleanUpContentOperator.java:140)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.invokeOperator(PdfContentStreamProcessor.java:286)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.processContent(PdfContentStreamProcessor.java:425)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpProcessor.cleanUpPage(PdfCleanUpProcessor.java:160)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpProcessor.cleanUp(PdfCleanUpProcessor.java:135)
at RedactionClass.tgestRedactJavishsInput(RedactionClass.java:56)
at RedactionClass.main(RedactionClass.java:23)

수정에 사용하는 코드는 다음과 같습니다.

public static void testRedact() throws IOException, DocumentException {

    InputStream resource = new FileInputStream("D:/itext/edited_120192824_5 (1).pdf");
    OutputStream result = new FileOutputStream(new File(OUTPUTDIR,
            "aviteshs.pdf"));

    PdfReader reader = new PdfReader(resource);
    PdfStamper stamper = new PdfStamper(reader, result);
    int pageCount = reader.getNumberOfPages();
    Rectangle linkLocation1 = new Rectangle(440f, 700f, 470f, 710f);
    Rectangle linkLocation2 = new Rectangle(308f, 205f, 338f, 215f);
    Rectangle linkLocation3 = new Rectangle(90f, 155f, 130f, 165f);
    List<PdfCleanUpLocation> cleanUpLocations = new ArrayList<PdfCleanUpLocation>();
    for (int currentPage = 1; currentPage <= pageCount; currentPage++) {
        if (currentPage == 1) {
            cleanUpLocations.add(new PdfCleanUpLocation(currentPage,
                    linkLocation1, BaseColor.BLACK));
            cleanUpLocations.add(new PdfCleanUpLocation(currentPage,
                    linkLocation2, BaseColor.BLACK));
            cleanUpLocations.add(new PdfCleanUpLocation(currentPage,
                    linkLocation3, BaseColor.BLACK));
        } else {
            cleanUpLocations.add(new PdfCleanUpLocation(currentPage,
                    linkLocation1, BaseColor.BLACK));
        }
    }
    PdfCleanUpProcessor cleaner = new PdfCleanUpProcessor(cleanUpLocations,
            stamper);
    try {
        cleaner.cleanUp();
    } catch (Exception e) {
        e.printStackTrace();
    }
    stamper.close();
    reader.close();

}

고객 문서로 인해 공유 할 수 없으며 동일한 테스트 데이터를 찾으려고합니다.

여기에서 문서를 찾으십시오.

https://drive.google.com/file/d/0B-zalNTEeIOwM1JJVWctcW8ydU0/view?usp=drivesdk

mkl

요컨대 :NullPointerException 여기 의 원인은 iText가 표시되는 페이지에서 양식 XObject 리소스 상속을 지원하지 않기 때문입니다. PDF 사양에 따르면 이 구조는 더 이상 사용되지 않지만 사양 대신 초기 PDF 참조를 따르는 PDF에서 발생할 수 있습니다.

원인

문제의 문서 1 페이지에는 I1 , M0 , P1Q0 이라는 4 개의 XObject 리소스가 포함되어 있습니다 .

RUPS 스크린 샷

스크린 샷에서 볼 수 있듯이 특히 Q0 에는 자체 리소스 사전 이 없습니다 . 그러나 마지막 지침은

q
413 0 0 125 75 3086 cm
/I1 Do
Q

Id는 리소스 I1을 참조합니다 .

이제 XObjects 형식의 경우 iText는 콘텐츠 참조 리소스 가 자체 리소스 사전에 포함되어 있다고 가정합니다 .

결과 : iText가 null사전에 액세스 하고 a NullPointerException가 발생합니다.

사양

PDF 사양 ISO 32000-1은 다음을 지정합니다.

리소스 사전은 다음 방법 중 하나로 콘텐츠 스트림과 연결됩니다.

  • 페이지의 Contents 항목 의 값 (또는 해당 항목의 값인 배열의 요소) 인 콘텐츠 스트림의 경우 리소스 사전은 페이지 사전의 Resources에 의해 지정 되거나 7.7에 설명 된대로 상속됩니다. 페이지 개체의 일부 조상 노드에서 3.4, "페이지 속성 상속".

  • 다른 콘텐츠 스트림의 경우, 준수 작성자는 해당 콘텐츠 스트림에서 사용하는 모든 리소스를 포함하는 리소스 사전을 지정 하는 리소스 항목을 스트림의 사전에 포함해야합니다. 이것은 XObjects, 패턴, Type 3 글꼴 및 주석 형식을 정의하는 콘텐츠 스트림에 적용됩니다.

  • 이전 버전의 PDF에 따라 작성된 PDF 파일 은 페이지에 사용 된 모든 형식의 XObjects 및 Type 3 글꼴 Resources 항목을 생략했을 수 있습니다 . 이러한 양식과 글꼴에서 참조되는 모든 리소스는 사용되는 페이지의 리소스 사전에서 상속됩니다. 이 구조는 더 이상 사용되지 않으며 준수 작성자가 사용해서는 안됩니다.

(ISO 32000-1, 섹션 7.8.3-리소스 사전)

따라서, 손의 경우에 우리가 사용되지 않는 옵션 세 가지의 상황에, Q0의 참조합니다 XObject에 I1 페이지의 리소스 사전에 정의 된 Q0가 사용됩니다.

문제의 문서에는 PDF 1.5 적합성을 주장하는 버전 헤더가 있습니다 (PDF 사양의 PDF 1.7과 대조). 이제 PDF Reference 1.5를 살펴 보겠습니다. 옵션 3에 해당하는 단락은 다음과 같습니다.

  • 양식 XObject 또는 Type 3 글꼴의 글리프 설명은 Resources 항목을 생략 할 수 있습니다 .이 경우 양식 또는 글꼴이 사용되는 페이지 Resources 항목 에서 리소스 가 조회 됩니다. 이 방법은 권장되지 않습니다.

따라서 요약하면 문제의 PDF는 PDF 사양 (2008 년에 게시되어 9 년 동안 사용 중입니다!)이 구식이라고 부르는 구조를 사용하며 파일이 권장하는 적합성을 주장하는 PDF 참조도 사용합니다. 반면에 iText는이 구식 구조를 지원하지 않습니다.

이 문제를 해결하는 방법에 대한 아이디어

기본적으로 PDF 정리 코드는 다음으로 확장되어야합니다.

  • 현재 페이지의 리소스를 PdfCleanUpProcessor
  • 자신의 리소스없이 XObject를 참조 하는 Do 연산자의 경우 PdfCleanUpContentOperator메서드 invoke에서 이러한 현재 페이지 리소스를 사용 합니다.

안타깝게도에서 사용 된 일부 회원 invoke은 비공개입니다. 따라서 PdfCleanUp 코드를 복사하거나 리플렉션을 다시 사용해야합니다.

(iText 5.5.12-SNAPSHOT)

iText 7

iText를 7 PDF 정리 도구는 또한 PDF에 대한 문제로 실행, 여기에 예외는 있습니다 IllegalStateException주장을"Graphics state is always deleted after event dispatching. If you want to preserve it in renderer info, use preserveGraphicsState method after receiving renderer info."

이 예외는 이벤트 디스패치 중에 발생하므로이 오류 메시지는 의미가 없습니다. 불행히도 PDF 정리 도구는 iText 7에서 닫힌 소스가 되었기 때문에 문제를 정확히 파악하기가 쉽지 않습니다.

(iText 7.0.3-SNAPSHOT, PDF 정리 1.0.2-SNAPSHOT)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

mockito를 사용하는 동안 null 포인터 예외 발생

분류에서Dev

itextsharp를 사용하여 웹 API에서 html에서 pdf로 변환하는 동안 예외 발생

분류에서Dev

상태 프로세서 API를 사용하여 flink 저장 점을 검사하는 동안 예외 발생

분류에서Dev

Hibernate를 사용하여 다중 테 넌스 코드를 실행하는 동안 예외 발생

분류에서Dev

Spring @Query를 사용하여 JPQL 쿼리를 실행하는 동안 예외가 발생했습니다.

분류에서Dev

pip를 설치하는 동안 예외 발생

분류에서Dev

스마트 포인터를 사용하는 동안 예외 발생

분류에서Dev

Wily 에이전트를 사용하는 동안 Apache HttpClient에서 예외 발생

분류에서Dev

선택 쿼리에 Java의 PreparedStatement를 사용하는 동안 SQL 예외 발생

분류에서Dev

일반 어레이를 사용하는 동안 예외가 발생합니까?

분류에서Dev

Ansible 실행 분석 도구 : pip3을 사용하여 mysqlclient를 설치하는 동안 예외 발생

분류에서Dev

Configuration.addAutoImport ()를 사용하여 매크로를 가져 오는 동안 예외가 발생했습니다.

분류에서Dev

fasterxml을 사용하여 JSON에서 Java 개체를 만드는 동안 예외가 발생했습니다.

분류에서Dev

SPARK를 사용하여 ftp에서 파일을 읽는 동안 예외가 발생했습니다.

분류에서Dev

iText를 사용하여 PDF 파일에서 JSON을 읽는 동안 오류가 발생했습니다.

분류에서Dev

어떻게 자바에서의 PrintStream를 사용하는 동안 발생한 예외를 찾을 수

분류에서Dev

Flask (Python)에서 사용자 지정 예외를 처리하는 동안 오류가 발생했습니다.

분류에서Dev

'위의 예외를 처리하는 동안 다른 예외가 발생했습니다.'오류를 수정하는 방법은 무엇입니까?

분류에서Dev

ElasticSearch의 TrasnsportClient를 사용하는 동안 '사용 가능한 노드 없음 예외'발생

분류에서Dev

스케치를 업로드하는 동안 "processing.app.debug.RunnerException"예외 발생

분류에서Dev

org.fusesource.leveldbjni를 설치하는 동안 Karaf 예외가 발생합니다.

분류에서Dev

Azure DevOps Pipeline에서 명령 줄 작업을 사용하여 EXE를 실행하여 Excel 파일을 열려고 시도하는 동안 예외 발생

분류에서Dev

Abp.io 예외 : Castle.Proxies.ProcessesServiceProxy를 활성화하는 동안 예외가 발생했습니다.

분류에서Dev

위의 예외를 처리하는 동안 다른 예외가 발생했습니다. 'Date'

분류에서Dev

Flask-restful-위의 예외를 처리하는 동안 다른 예외가 발생했습니다.

분류에서Dev

KeyError : '1'위의 예외를 처리하는 동안 다른 예외가 발생했습니다.

분류에서Dev

pdf를 동적으로 생성하고 itext pdf를 사용하여 서명

분류에서Dev

react-native-svg를 사용할 때 UI 블록을 실행하는 동안 예외 발생

분류에서Dev

socketIO에 Android 클라이언트를 사용하는 동안 SocketIO 예외가 발생했습니다.

Related 관련 기사

  1. 1

    mockito를 사용하는 동안 null 포인터 예외 발생

  2. 2

    itextsharp를 사용하여 웹 API에서 html에서 pdf로 변환하는 동안 예외 발생

  3. 3

    상태 프로세서 API를 사용하여 flink 저장 점을 검사하는 동안 예외 발생

  4. 4

    Hibernate를 사용하여 다중 테 넌스 코드를 실행하는 동안 예외 발생

  5. 5

    Spring @Query를 사용하여 JPQL 쿼리를 실행하는 동안 예외가 발생했습니다.

  6. 6

    pip를 설치하는 동안 예외 발생

  7. 7

    스마트 포인터를 사용하는 동안 예외 발생

  8. 8

    Wily 에이전트를 사용하는 동안 Apache HttpClient에서 예외 발생

  9. 9

    선택 쿼리에 Java의 PreparedStatement를 사용하는 동안 SQL 예외 발생

  10. 10

    일반 어레이를 사용하는 동안 예외가 발생합니까?

  11. 11

    Ansible 실행 분석 도구 : pip3을 사용하여 mysqlclient를 설치하는 동안 예외 발생

  12. 12

    Configuration.addAutoImport ()를 사용하여 매크로를 가져 오는 동안 예외가 발생했습니다.

  13. 13

    fasterxml을 사용하여 JSON에서 Java 개체를 만드는 동안 예외가 발생했습니다.

  14. 14

    SPARK를 사용하여 ftp에서 파일을 읽는 동안 예외가 발생했습니다.

  15. 15

    iText를 사용하여 PDF 파일에서 JSON을 읽는 동안 오류가 발생했습니다.

  16. 16

    어떻게 자바에서의 PrintStream를 사용하는 동안 발생한 예외를 찾을 수

  17. 17

    Flask (Python)에서 사용자 지정 예외를 처리하는 동안 오류가 발생했습니다.

  18. 18

    '위의 예외를 처리하는 동안 다른 예외가 발생했습니다.'오류를 수정하는 방법은 무엇입니까?

  19. 19

    ElasticSearch의 TrasnsportClient를 사용하는 동안 '사용 가능한 노드 없음 예외'발생

  20. 20

    스케치를 업로드하는 동안 "processing.app.debug.RunnerException"예외 발생

  21. 21

    org.fusesource.leveldbjni를 설치하는 동안 Karaf 예외가 발생합니다.

  22. 22

    Azure DevOps Pipeline에서 명령 줄 작업을 사용하여 EXE를 실행하여 Excel 파일을 열려고 시도하는 동안 예외 발생

  23. 23

    Abp.io 예외 : Castle.Proxies.ProcessesServiceProxy를 활성화하는 동안 예외가 발생했습니다.

  24. 24

    위의 예외를 처리하는 동안 다른 예외가 발생했습니다. 'Date'

  25. 25

    Flask-restful-위의 예외를 처리하는 동안 다른 예외가 발생했습니다.

  26. 26

    KeyError : '1'위의 예외를 처리하는 동안 다른 예외가 발생했습니다.

  27. 27

    pdf를 동적으로 생성하고 itext pdf를 사용하여 서명

  28. 28

    react-native-svg를 사용할 때 UI 블록을 실행하는 동안 예외 발생

  29. 29

    socketIO에 Android 클라이언트를 사용하는 동안 SocketIO 예외가 발생했습니다.

뜨겁다태그

보관