現在我創造的作品,如「iAnnotate PDF」 直到在UIView的,現在我已經完成了讀取和顯示PDF頁面的應用程序。 即使我成功獲得TOC成功。編輯PDF
現在我想編輯PDF,編輯包括標記,高光和寫作筆記。
現在我的問題是如何編輯?我的意思是我們是否需要創建另一個PDF,然後寫入新的更改?
或者有什麼方法可以更新現有pdf中的單個頁面? 如果是如何做到這一點?
如果我們正在重寫整個pdf,那是否會造成開銷?
現在我創造的作品,如「iAnnotate PDF」 直到在UIView的,現在我已經完成了讀取和顯示PDF頁面的應用程序。 即使我成功獲得TOC成功。編輯PDF
現在我想編輯PDF,編輯包括標記,高光和寫作筆記。
現在我的問題是如何編輯?我的意思是我們是否需要創建另一個PDF,然後寫入新的更改?
或者有什麼方法可以更新現有pdf中的單個頁面? 如果是如何做到這一點?
如果我們正在重寫整個pdf,那是否會造成開銷?
也許這個想法可以在iPhone中工作我認爲沒有直接的方式我們可以編輯PDF,但我們可以做的,我們可以產生這樣的功能,即iAnnotate應用程序有,即繪製線和文本,然後將PDF保存爲一頁接一頁的圖片,你也會在其中包含編輯過的頁面,然後你將再次通過圖片創建PDF,然後我想你會得到編輯後的PDF。
您可以使用CoreGraphics輕鬆創建/編輯pdf。只要創建定義尺寸的矩形,然後創建的背景下,推進的背景下,調用CFPDFContextBeginPage,開始繪製就像你通常會做......這裏有一個例子:
CGRect mediaBox = CGRectMake(0, 0, 550, 800);
NSString *url = [path stringByExpandingTildeInPath];
CGContextRef ctx = CGPDFContextCreateWithURL((CFURLRef)[NSURL fileURLWithPath:url], &mediaBox, NULL);
UIGraphicsPushContext(ctx);
//Page1
CGPDFContextBeginPage(ctx, NULL);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -mediaBox.size.height);
//name and value are NSStrings
[name drawInRect:rectName withFont:fontName];
[value drawInRect:rectValue withFont:fontValue];
[[UIImage imageNamed:@"logo.png"] drawInRect:CGRectMake(8, 15, 91, 99)];
CGPDFContextEndPage(ctx);
UIGraphicsPopContext();
CFRelease(ctx);
UPDATE 您可以複製頁面你需要然後像這樣對它們進行繪圖:
CGPDFDocumentRef originalDoc = NULL;
CGContextRef pdfContext = NULL;
CGRect docRect = CGRectZero;
NSURL *originalURL = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"pdf"];
NSString *newPath = @"/Users/***/Desktop/new.pdf";
CFURLRef newURL = CFURLCreateWithFileSystemPath (NULL,
(CFStringRef)newPath,
kCFURLPOSIXPathStyle,
false);
//Original doc and it's dimesnions
originalDoc = CGPDFDocumentCreateWithURL((CFURLRef)originalURL);
CGPDFPageRef firstPage = CGPDFDocumentGetPage(originalDoc, 1);
if (firstPage == NULL) {
NSLog(@"This document has no pages..Exiting.");
}
docRect = CGPDFPageGetBoxRect(firstPage, kCGPDFCropBox);
NSLog(@"%@", NSStringFromRect(docRect));
//New doc context
if (newURL != NULL) {
pdfContext = CGPDFContextCreateWithURL(newURL, &docRect, NULL);
if (pdfContext == NULL) {
NSLog(@"Error creating context");
}
CFRelease(newURL);
} else {
NSLog(@"Error creating url");
}
然後單獨複製每個頁面。在這個特定的例子中,我在頁面中添加了「貝茨」(編號)。
//Copy original to new, and write bates
size_t count = CGPDFDocumentGetNumberOfPages(originalDoc);
for (size_t pageNumber = 1; pageNumber <= count; pageNumber++) {
CGPDFPageRef originalPage = CGPDFDocumentGetPage(originalDoc, pageNumber);
CGContextBeginPage (pdfContext,nil);
CGContextSetRGBFillColor(pdfContext, 0, 0, 255, 0.1);
CGContextSetRGBStrokeColor(pdfContext, 0, 0, 255, 0.5);
// Draw a circle (filled)
CGContextFillEllipseInRect(pdfContext, CGRectMake(0, 0, 25, 25));
CGContextSaveGState(pdfContext);
//flip context due to different origins
CGContextTranslateCTM(pdfContext, 0.0, (docRect.size.height - (docRect.size.height * 0.80))/2);
CGContextScaleCTM(pdfContext, 1.0, 0.8);
//copy content of template page on the corresponding page in new file
CGContextDrawPDFPage(pdfContext, originalPage);
CGContextRestoreGState(pdfContext);
//flip context back
//CGContextTranslateCTM(pdfContext, 0.0, -(docRect.size.height - (docRect.size.height * 0.80))/2);
//CGContextScaleCTM(pdfContext, 1.0, 1.25);
CGContextSetRGBFillColor(pdfContext, 0, 0, 255, 0.1);
CGContextSetRGBStrokeColor(pdfContext, 0, 0, 255, 0.5);
// Draw a circle (filled)
CGContextFillEllipseInRect(pdfContext, CGRectMake(0, 0, 25, 25));
NSString *bate = [self generateStringForCount:(int)pageNumber-1];
int fontSize = 15;
CGContextSelectFont(pdfContext, "Helvetica", fontSize, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(pdfContext, kCGTextFill);
CGContextSetTextPosition(pdfContext, 0.0f, round(fontSize/4.0f));
CGContextShowText(pdfContext, [bate UTF8String], strlen([bate UTF8String]));
CGContextEndPage(pdfContext);
}
CFRelease(pdfContext);
我知道如何創建pdf。我想**編輯** pdf。如何編輯單行而不是單頁。我想避免重寫整個pdf。如果可以編輯現有pdf中的單頁,這將很容易..或者任何複製大量頁面和更換特定頁面的方式也可以。 – DivineDesert
已更新,顯示如何複製頁面。有了這個,你可以在頁面上繪製或添加新的內容.. – 0xSina
我沒有得到你的觀點:( – DivineDesert
但是你不認爲這會造成頭頂?對於單個頁面,我們需要編寫完整的pdf,對於pdf中的頁面不會有任何限制。 – DivineDesert
但是,這是方式。我不認爲沒有直接的API或庫提供這樣的功能,它是由你來處理這個想法。 – Ballu