Apple cung cấp toàn bộ các phương thức ở cấp độ CoreGraphics
để vẽ trực tiếp nội dung PDF. Theo tôi biết, không có gói nào được đóng gói gọn gàng ở mức UIKit
, vì vậy nó có thể không phù hợp với dự án của bạn vào thời điểm này, đặc biệt nếu bạn không thoải mái ở cấp độ C. Tuy nhiên, hàm liên quan là CGContextDrawPDFPage;
theo cách thông thường là CoreGraphics
có các phương pháp khác để tạo tham chiếu PDF từ nguồn dữ liệu và sau đó lấy tham chiếu trang từ PDF. Sau đó, bạn sẽ cần phải xử lý việc chia tỷ lệ và dịch sang chế độ xem bạn muốn và được cảnh báo rằng bạn cần thực hiện lật ngang vì PDF (và OS X) sử dụng phần dưới bên trái làm nguồn gốc trong khi iOS sử dụng phần trên cùng bên trái . mã ví dụ, ra khỏi đỉnh đầu của tôi:
UIGraphicsBeginImageContext(thumbnailSize);
CGPDFDocumentRef pdfRef = CGPDFDocumentCreateWithProvider((CGDataProviderRef)instanceOfNSDataWithPDFInside);
CGPDFPageRef pageRef = CGPDFDocumentGetPage(pdfRef, 1); // get the first page
CGContextRef contextRef = UIGraphicsGetCurrentContext();
// ignore issues of transforming here; depends on exactly what you want and
// involves a whole bunch of normal CoreGraphics stuff that is nothing to do
// with PDFs
CGContextDrawPDFPage(contextRef, pageRef);
UIImage *imageToReturn = UIGraphicsGetImageFromCurrentImageContext();
// clean up
UIGraphicsEndImageContext();
CGPDFDocumentRelease(pdfRef);
return imageToReturn;
Tại một đoán, có thể bạn sẽ muốn sử dụng CGPDFPageGetBoxRect(pageRef, kCGPDFCropBox)
để có được hộp cây trồng của trang và sau đó làm việc ra làm thế nào để mở rộng/di chuyển mà để phù hợp với kích thước hình ảnh của bạn .
lẽ dễ dàng hơn cho mục đích của bạn là -renderInContext:
phương pháp trên CALayer
(xem QA 1703) - phương tiện cũ nhận được một ảnh chụp màn hình đã UIGetScreenImage
, nhưng điều đó không bao giờ thực sự chính thức API và được dường như tạm thời cho phép chỉ vì có sự chấp thuận tình cờ RedLaser . Với mã trong QA, bạn có thể tự nâng cấp lên để nhận được UIImage từ bất kỳ chế độ xem nào khác mà không cần phải xem trên màn hình. Mà có thể giải quyết một số vấn đề của bạn với chụp màn hình? Mặc dù nó có nghĩa là bạn chỉ có thể hỗ trợ OS 4.x.
Trong cả hai trường hợp, các tệp PDF chỉ không vẽ nhanh chóng. Bạn có thể cần điền bảng sau đó vẽ hình thu nhỏ trên một chuỗi nền, đẩy chúng lên trên khi có sẵn. Bạn không thể sử dụng các đối tượng UIKit một cách an toàn trên các chủ đề nền nhưng tất cả các công cụ CoreGraphics
đều an toàn.
Hi Alones, Tôi đang sử dụng mã của bạn để có được thumbnails PDF. Có vẻ như dòng CGContextConcatCTM (ngữ cảnh, pdfTransform) tạo ra một nút cổ chai bộ nhớ, tôi phát hiện ra rằng nếu tôi rời khỏi dòng này, thì OK. Nhưng tôi không thể bỏ nó ra vì tôi cần cái này cho một hình thu nhỏ thích hợp. Bạn có ý tưởng về cách chúng tôi có thể cải thiện điều này không? Thx btw ... – aslisabanci
cái này hoạt động cho tôi ... cái ở trên tôi không biết tại sao nhưng nó tạo ra hình thu nhỏ giả hoặc rác ... cảm ơn ... – Underdog
Nói của doc UIGraphicsGetImageFromCurrentImageContext() không phải là chủ đề an toàn –