2011-08-02 5 views
8

나는 모든 제안 사항과 코드 스 니펫이 포함 된 pdf 뷰어를 개발했습니다. 감사합니다 :) 이제 저는 그것을 pdf 편집기로 만들고 싶습니다. 나는 아이폰/ipad에 대한 응용 프로그램을 PDFKit (바탕 화면에만 해당)와 비슷하게 만들고 싶습니다. 사용자가 주석을 추가하고 텍스트 섹션을 강조 표시 할 수있게하려고합니다.pdf에 주석 추가

어떻게해야합니까? 지금까지 PDF 내용을 파싱했습니다 (이전 게시물은 pdf parsing problem). 기존의 PDF에 주석을 추가하는 오픈 소스 pdf 편집기가 있습니까 ???

또한 Objective-C를 사용하여 수행 할 수 있습니까? 아니면이 작업을 수행하는 다른 언어 코드 (C 또는 javascript)가 있습니까?

NSURL *newUrl = [NSURL fileURLWithPath:"path to pdf"]; 
CGPDFDocumentRef templateDocument = CGPDFDocumentCreateWithURL(newUrl); 
CFRelease(url); 

CGContextRef pdfContext = UIGraphicsGetCurrentContext(); 
CGPDFPageRef page = CGPDFDocumentGetPage(templateDocument, 1); 
CGContextDrawPDFPage(pdfContext, page); 

const char *text = "second line!"; 
CGContextShowTextAtPoint (pdfContext, 10, 30, text, strlen(text)); 
CGContextEndPage (pdfContext); 

CGContextRelease (pdfContext); 

pdfcontext 새로운 PDF를 만드는 동안 I 만든 동일한 목적으로한다. 내 pdf에는 "hello world"와 같은 행이 있습니다. 한 줄 더 추가하려고합니다. 이 사람이 정말 까다로운 일이 될 것입니다

GContextShowTextAtPoint: invalid context 0x0 
+0

여기에 PDF 파서 코드 스 니펫을 게시 할 수 있습니까? – ajay

+0

그게에 대한 해결책을 찾았습니까 – wan

+0

아니, 나는 그것을하지 못했습니다. 높은 수준의 그래픽이 필요합니다. – cancerian

답변

3

:

나는 다음과 같은 오류를 얻고있다.

석영이 당신을 정말로 돕지 않습니다.

꽤 비관적 인 라이센스가 있고 appstore와 호환되는 libHaru를 사용해 볼 수도 있습니다. 무료 라이드는 아닙니다. HARU는 pdfs 만 생성 할 수 있습니다.

http://libharu.org/

+1

답장을 보내 주셔서 감사합니다.하지만 필자의 요구 사항을 수정해야합니다. 그러나 편집하는 대신 pdf의 전체 내용을 다시 쓸 수있는 방법이 있습니다. 이것은 내 코드 (내 질문을 편집)입니다. 나는 시도했지만 잘못된 컨텍스트를 말하는 오류를 보여줍니다 – cancerian

7

그래서 제목에 당신은 당신이 PDF 파일에 주석을 추가 할 말,하지만 당신은 당신의 질문의 몸에서 일을하려고하는 예는 단순히 PDF 파일에 텍스트를 추가하고 . 이들은 매우 다른 것을 ....

다음

이 (당신의 시도에 유사한) 기존의 PDF 파일에 텍스트를 추가하는 "안녕하세요"입니다 :

나는이 테스트를하지 않은 있지만 기반으로 기존 코드 (CGContextShowTextAtPoint 대신 CTLine을 사용하여 드로잉 한 곳)에서 매우 가까워 야합니다. 명확성을 위해 오류 검사가 제거되었습니다.

/* 
* This function copies the first page of a source pdf into the destination pdf 
* and then adds a line of text to the destination pdf. 
* 
* This must be modified by putting the correct path into the NSURL lines 
* for sourceURL and destURL before it will work. 
* 
* This code is using ARC and has error checking removed for clarity. 
*/ 
- (void)helloWorldPDF { 
    // Open the source pdf 
    NSURL    *sourceURL  = [NSURL fileURLWithPath:@"path to original pdf"]; 
    CGPDFDocumentRef sourceDoc  = CGPDFDocumentCreateWithURL((__bridge CFURLRef)sourceURL); 

    // Create the new destination pdf & set the font 
    NSURL    *destURL  = [NSURL fileURLWithPath:@"path to new pdf"]; 
    CGContextRef  destPDFContext = CGPDFContextCreateWithURL((__bridge CFURLRef)destURL, NULL, NULL); 
    CGContextSelectFont(destPDFContext, "CourierNewPS-BoldMT", 12.0, kCGEncodingFontSpecific); 

    // Copy the first page of the source pdf into the destination pdf 
    CGPDFPageRef  pdfPage   = CGPDFDocumentGetPage(sourceDoc, 1); 
    CGRect    pdfCropBoxRect = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox); 
    CGContextBeginPage (destPDFContext, &pdfCropBoxRect); 
    CGContextDrawPDFPage(destPDFContext, pdfPage); 

    // Close the source file 
    CGPDFDocumentRelease(sourceDoc); 

    // Draw the text 
    const char *text = "second line!"; 
    CGContextShowTextAtPoint(destPDFContext, 10.0, 30.0, text, strlen(text)); 

    // Close the destination file 
    CGContextRelease(destPDFContext); 
} 
+0

대단해! 정말 도움이되었습니다. 여기에 대한 자습서 또는 무언가가 있습니까? –

+0

@KunalBalani 거기에있을 수 있습니다,하지만 아무도 내가 참여했다. 이 문제를 해결할 수없는 질문이 있으시면 여기에서 직접 질문하십시오! – lnafziger

+0

@lnafziger 귀하의 코드는 pdf에 읽기 전용 텍스트 주석을 추가합니다. 다른 뷰어에서 편집 가능하게하려면 pdf의/Annots 사전에 입력해야합니다. –

관련 문제