PDF 렌더러가 내 PDF를 망쳐놓고 있나요?
문제
Java 응용 프로그램(특히 J2EE Webapp) 내에서 PDF 파일을 자동 인쇄하려고 합니다.
이 애플리케이션 내에서 iText를 사용하여 PDF 파일을 생성하고 있습니다.생성된 파일은 각각 정확히 한 페이지로 구성된 양식 편지입니다.
이 PDF 파일을 렌더링하고 인쇄하기 위해 pdf-renderer 라이브러리를 사용해 보았습니다.(여기를 보아라: https://pdf-renderer.dev.java.net/ )
유용한 예제 코드를 찾았습니다. http://juixe.com/techknow/index.php/2008/01/17/print-a-pdf-document-in-java/ 그리고 실제로 작업 중인 기계에서 첫 번째 문서를 인쇄할 수 있을 때까지는 그리 오랜 시간이 걸리지 않았습니다.
하지만 이제 재미있는 부분이 나옵니다.
각 PDF 파일을 인쇄한 후 어떻게든 망가졌습니다.여전히 읽을 수 있고 모든 것이 있었지만 전체 형식이 약간 이상해졌습니다.라인 브레이크가 있어서는 안 되며, 이미지에 포함된 오류 아티팩트, 텍스트 줄 바꿈이 갑자기 길어지거나 짧아집니다...
게다가 인쇄된 것도 이 '해킹된' 버전이었습니다...따라서 오류는 렌더링 프로세스 어딘가에 있는 것 같습니다.
이것은 전체 렌더링 및 인쇄 프로세스를 담당하는 소스 코드입니다.
File f = this.file; //This accesses the created PDF file
FileInputStream fis = new FileInputStream(f);
FileChannel fc = fis.getChannel();
ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
PDFFile pdfFile = new PDFFile(bb); // Create PDF Print Page
PDFPrintPage pages = new PDFPrintPage(pdfFile);
// Create Print Job
PageFormat pf = PrinterJob.getPrinterJob().defaultPage();
pjob.setJobName(f.getName());
Book book = new Book();
book.append(pages, pf, pdfFile.getNumPages());
pjob.setPageable(book);
또 다른 재미있는 사실:PDF를 망가뜨리는 일은 생성된 iText PDF 문서에서만 발생합니다.임의의 다른 PDF를 인쇄하려고 하면 손상되지 않습니다.
문제가 무엇인지에 대한 아이디어가 있습니까?그리고 렌더링이 내 PDF에 어떤 영향을 미칠 수 있나요?이 scource 코드를 이해하면 READ_ONLY 모드는 정확히 그것을 방지해야 합니다...
편집하다:iText로 생성된 PDF를 인쇄하면 포함된 글꼴도 제거된다는 것을 방금 확인했습니다.다시 말하지만, pdf-renderer를 통해 렌더링/인쇄하기 전에는 완벽하게 작동했습니다.(글꼴은 PDF 속성 등에 표시되었습니다....)
해결책
어쩌면 iText가 렌더러와 호환되지 않는 PDF 파일을 생성하고 있는 것일까요?어떤 PDF 버전이 생성되는지 확인하셨나요?어쩌면 이전 버전을 지정하는 것이 가능할까요?