2011-08-02 247 views
8

我開發了一個包含所有建議和代碼片段的PDF查看器。謝謝:)現在我想讓它成爲一個PDF編輯器。我想創建一個類似於PDFKit(僅適用於桌面)的iphone/ipad應用程序。我希望用戶能夠添加註釋並突出顯示文本部分。將註釋添加到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時創建的同一個對象。我的pdf有一個像「你好世界」的線。我正在嘗試添加一行。

我收到以下錯誤:

GContextShowTextAtPoint: invalid context 0x0 
+0

你可以在這裏發佈pdf解析器代碼片段嗎? – ajay

+0

你是否發現任何解決方案 – wan

+0

不,我沒有..它需要高水平的圖形。 – cancerian

回答

3

這一次將是真的棘手

石英在這裏並不真正幫你。

你可能想嘗試libHaru,它有一個非常悲觀的許可證和appstore兼容。這不是免費的,但HARU只能生成pdf。

http://libharu.org/

+1

嗨感謝您的答覆,但我需要編輯PDF這就是我的要求。但是有什麼方法可以重寫pdf的全部內容,而不是僅僅編輯它。這是我的代碼(編輯我的問題)。我試過,但它顯示錯誤說無效的背景 – cancerian

7

所以在標題你說你想要的註釋添加到PDF,但隨後你正試圖使工作在你的問題的身體的例子僅僅是添加文本到PDF 。這些都是非常不同事情....

這裏是一個「Hello World」的文本添加到現有的PDF(類似於您嘗試):

我沒有測試過這一點,但它是基於現有的代碼(我正在使用CTLine而不是CGContextShowTextAtPoint進行繪製),因此它應該非常接近。爲了清楚起見,錯誤檢查已被刪除。

/* 
* 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。爲了使其可以在其他瀏覽器上編輯,您需要在/ Annotations pdf中輸入內容。 –