2010-02-22 36 views
13

Tôi đã quản lý để triển khai trình xem PDF rất cơ bản trong ứng dụng của mình, nhưng đã tự hỏi liệu có thể thêm chú thích vào tệp PDF hay không. Tôi đã xem qua các tài liệu SDK, nhưng không tìm thấy bất cứ điều gì. Tôi có 2 câu hỏi thực sự:Chú thích PDF trong iPhone SDK

  1. Có thể thực hiện việc này không?
  2. Cách tiếp cận tốt nhất để thực hiện là gì?
  3. Có khuôn khổ hoặc thư viện mà tôi có thể đưa vào để hỗ trợ việc này không?

Cảm ơn.

+0

Xin chào Jack, bạn có chú thích không? –

Trả lời

18

Bạn có thể thực hiện chú thích bằng cách đọc trong trang PDF, vẽ chú thích lên ngữ cảnh đồ họa PDF mới, sau đó vẽ thêm nội dung vào ngữ cảnh đồ họa đó. Dưới đây là một số mã thêm từ 'Chú thích mẫu' tại vị trí (100.0,100.0) vào tệp PDF hiện có. Phương thức getPDFFileName trả về đường dẫn của PD gốc. getTempPDFFileName trả về đường dẫn của tệp PDF mới, một trong đó là bản gốc cộng với chú thích.

Để thay đổi chú thích, chỉ cần thêm mã vẽ khác thay cho phương thức drawInRect: withFont :. Xem Hướng dẫn vẽ và in cho iOS để biết thêm về cách thực hiện điều đó.

- (void) exampleAnnotation; 
{ 
    NSURL* url = [NSURL fileURLWithPath:[self getPDFFileName]]; 

    CGPDFDocumentRef document = CGPDFDocumentCreateWithURL ((CFURLRef) url);// 2 
    size_t count = CGPDFDocumentGetNumberOfPages (document);// 3 

    if (count == 0) 
    { 
     NSLog(@"PDF needs at least one page"); 
     return; 
    } 

    CGRect paperSize = CGRectMake(0.0,0.0,595.28,841.89); 

    UIGraphicsBeginPDFContextToFile([self getTempPDFFileName], paperSize, nil); 

    UIGraphicsBeginPDFPageWithInfo(paperSize, nil); 

    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

    // flip context so page is right way up 
    CGContextTranslateCTM(currentContext, 0, paperSize.size.height); 
    CGContextScaleCTM(currentContext, 1.0, -1.0); 

    CGPDFPageRef page = CGPDFDocumentGetPage (document, 1); // grab page 1 of the PDF 

    CGContextDrawPDFPage (currentContext, page); // draw page 1 into graphics context 

    // flip context so annotations are right way up 
    CGContextScaleCTM(currentContext, 1.0, -1.0); 
    CGContextTranslateCTM(currentContext, 0, -paperSize.size.height); 

    [@"Example annotation" drawInRect:CGRectMake(100.0, 100.0, 200.0, 40.0) withFont:[UIFont systemFontOfSize:18.0]]; 

    UIGraphicsEndPDFContext(); 

    CGPDFDocumentRelease (document); 
} 
+2

Đây là một trợ giúp lớn. Khi tôi đã hiểu rõ hơn về điều này, tôi sẽ tạo một dự án github để chia sẻ với cộng đồng. – Jack

+0

Bạn đã thực hiện dự án GitHub @Jack chưa? –

+0

@Metthew Tôi đã thử ví dụ của bạn nhưng tôi không thể mở tài liệu. Tôi nhận được lỗi 'Quyền bị từ chối'. – Justin

1

Tôi không nghĩ rằng PDFAnnotation hoặc PDFKit đã được chuyển sang iPhone từ máy tính để bàn .... có thể là lý do tuyệt vời cho file a radar. Tuy nhiên, Haru có thể giúp bạn trong thời gian chờ đợi.

+0

Hiện tại, Haru chỉ có sẵn để chạy trên các nền tảng sau: 1. Cygwin + GCC (Microsoft Windows) 2. Cygwin + MinGW (Microsoft Windows) 3. MSYS + MinGW (Microsoft Windows) 3. Microsoft VC++ (Microsoft Windows) 4. Borland C++ (Microsoft Windows) 5. GCC (Linux, FreeBSD, NetBSD, Solaris ...) –

3

Tôi đang làm việc trong công cụ và tạo dự án GitHub. Vui lòng kiểm tra xem nó ra here.

+0

Tuy nhiên, dự án của bạn không lưu chú thích vào pdf. Tôi đã kiểm tra mã nguồn, nó lưu trữ tất cả các thông tin chú thích độc lập với các tệp pdf thực tế. Vì vậy, nếu tôi chuyển tập tin pdf sang máy khác thì bản pdf sẽ được chuyển mà không có bất kỳ thay đổi nào. –

+0

Nó đang được phát triển. Hãy kiểm tra sau :) – lazyprogram

+0

@ lazyprogram, vui lòng cập nhật thư viện của nó khi tôi gặp lỗi dylib và ứng dụng đang gặp sự cố trên thiết bị khi chạy nó từ xcode 7. –