최근에 PDF 그리기에 대한 많은 질문이있었습니다.
그렇습니다. PDF를 아주 쉽게 렌더링 할 수는 UIWebView
있지만 훌륭한 PDF 뷰어에서 기대할 수있는 성능과 기능을 제공 할 수는 없습니다.
PDF 페이지 를 CALayer 또는 UIImage에 그릴 수 있습니다 . Apple 은 Zoomable UIScrollview에서 큰 PDF 를 그리는 방법을 보여주는 샘플 코드도 있습니다.
그러나 같은 문제가 계속 자랍니다.
UIImage 메소드 :
- PDF
UIImage
는 레이어 방식뿐만 아니라 광학적으로 확장되지 않습니다. - CPU 및 메모리
는 새로운 줌 레벨의 실시간 렌더링을 생성하기 위해이를 사용하여 한계 / 예방
UIImages
으로부터 생성에 도달했습니다PDFcontext
.
CATiledLayer 방법 :
- 전체 PDF 페이지를 다음으로 그리기위한 상당한 오버 헤드 (시간)
CALayer
가 있습니다 : 개별 타일이 렌더링되는 것을 볼 수 있습니다 (타일 크기 조정을 사용하더라도) CALayers
미리 준비 할 수 없습니다 (스크린 외부에서 렌더링).
일반적으로 PDF 뷰어는 메모리가 상당히 무겁습니다. 애플의 줌이 가능한 PDF 예제의 메모리 사용량도 모니터링하십시오.
현재 프로젝트에서 PDF 뷰어를 개발 중이며 UIImage
페이지를 별도의 스레드로 렌더링하고 (여기에서도 문제가 있습니다!) 크기가 x1 인 동안 표시합니다. CATiledLayer
스케일이 1보다 크면 렌더링이 시작됩니다. iBooks는 페이지를 스크롤 할 때와 비슷한 이중 테이크 접근 방식을 사용하여 선명한 버전이 나타나기 전에 1 초 이내에 페이지의 저해상도 버전을 볼 수 있습니다.
Im은 PDF 이미지가 도면을 시작하기 전에 레이어를 마스킹 할 준비가되도록 페이지의 각면에 2 페이지 씩 초점을 맞 춥니 다.
그림 PDF의 성능 / 메모리 처리를 개선하기 위해 작거나 명백한 사람에 대한 통찰력이 있습니까? 또는 여기에 논의 된 다른 문제가 있습니까?
편집 : 몇 가지 팁 (Credit-Luke Mcneice, VdesmedT, Matt Gallagher, Johann) :
가능하면 미디어를 디스크에 저장하십시오.
TiledLayers에서 렌더링하는 경우 더 큰 tileSizes를 사용하십시오.
초기화 자주 자리 객체와 배열을 사용 alternitively 다른 설계 방식은 이것
이미지는 a보다 빠르게 렌더링됩니다.
CGPDFPageRef
NSOperations
또는 GCD 및 블록 을 사용 하여 미리 페이지를 준비하십시오.그리기 중 메모리 사용량을 줄이기 위해 전화
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);
하기CGContextDrawPDFPage
docRef로 당신
NSOperations
을 초기화하는 것은 나쁜 생각 (메모리)입니다 .docRef를 싱글 톤으로 감싸십시오.불필요하게 취소
NSOperations
할 수 있습니다. 특히 메모리를 사용하는 경우 컨텍스트를 열어 두지 마십시오!페이지 개체를 재활용하고 사용하지 않는보기를 삭제하십시오.
필요없는 즉시 열린 컨텍스트를 모두 닫으십시오.
메모리 경고를 받고 DocRef 및 모든 페이지 캐시를 다시로드
다른 PDF 기능 :
PDF 내에서 링크 얻기 (및 여기 및 여기 )
링크 대상 가져 오기 (
/Dest
배열 에서 페이지 번호 가져 오기 )
원시 텍스트 가져 오기 (및 여기 및 여기 및 여기 (포지셔닝 초점))
검색 (그리고 여기 ) (모든 PDF에서 작동하지는 않습니다 (일부 이상한 문자를 표시합니다. 인코딩 문제라고 생각하지만 확실하지 않습니다) -Credit BrainFeeder)
CALayer 및 오프 스크린 렌더링 -빠르고 부드러운 디스플레이를 위해 다음 페이지를 렌더링
선적 서류 비치
- Quartz PDFObjects (메타 정보, 주석, 썸에 사용됨)
- Abobe PDF 사양
프로젝트 예
PSPDFKit
저렴하지는 않지만 가치가 있습니다. pspdfkit.com