2011-10-04 45 views
5

我想在iOS应用程序中注释PDF。我遇到了PoDoFo library,但我不确定如何在iOS应用程序中使用它。如何使用PoDoFo库在iOS上注释PDF?

是否可以使用此库在iOS上注释PDF?如果是这样,怎么样?

+0

答案就在这里 http://stackoverflow.com/questions/9047033/how-to-build-podofo-library-for-ios/12032950#12032950 –

回答

4

请做这样的事情。

+ (void)createUTFAnnotationTextOnPage:(NSInteger)pageIndex 
            doc:(PdfDocument*)doc // PdfMemDocument instance 
           rect:(PdfRect)rect 
           title:(NSString*)title 
           content:(NSString*)content 
           bOpen:(Boolean)bOpen 
           colorR:(double)r 
           colorG:(double)g 
           colorB:(double)b { 
    PdfPage* pPage = doc->GetPage(pageIndex); 
    if (! pPage) { 
     // couldn't get that page 
     return; 
    } 
    PdfAnnotation* anno; 

    anno = pPage->CreateAnnotation(ePdfAnnotation_Text, rect); 

    PdfString sTitle(reinterpret_cast<const pdf_utf8*>([title UTF8String])); 
    PdfString sContent(reinterpret_cast<const pdf_utf8*>([content UTF8String])); 

    anno->SetTitle(sTitle); 
    anno->SetContents(sContent); 
    anno->SetColor(r, g, b); 
    anno->SetOpen(bOpen); 
} 

// ----------- 
    PdfError::EnableDebug(false); // or true 
    NSString* inFile = [[NSBundle mainBundle] pathForResource:@"forTesting.pdf" ofType:nil]; 
    PoDoFo::PdfMemDocument doc([inFile UTF8String]); 
    [YourPodofoObj createUTFAnnotationTextOnPage:0 doc:&doc rect:PdfRect(50, 50, 50, 50) title:@"author by XX" content:@"I use it for test" bOpen:true colorR:1.0 colorG:.0 colorB:.0]; 
    doc.Write(OUT_PUT_PATH); 
2

以上回答仅为您提供添加注释(类型自由文本等)的方式。通常你会想创建/修改字段。我通常为此使用PdfTextFields,PdfCheckboxes,PdfSignature字段。希望帮助

PdfMemDocument memDoc; 
    PdfFileInputStream fileInputStream(filePath); 
    char *srcBuffer = new char[fileInputStream.GetFileLength()]; 
    size_t srcLen = fileInputStream.GetFileLength(); 
    fileInputStream.Read(srcBuffer,srcLen); 


    PdfOutputDevice outputDevice(filePath); 
    outputDevice.Write(srcBuffer,srcLen); 
    memDoc.Load(srcBuffer,srcLen); 

    PdfTextField txtField = PdfTextField(pPage,PdfRect(50, 50, 50, 50),&memDoc); 
    txtField.SetFieldName(@"SomeUniqueName"); 

    memDoc.Write(&outputDevice); 
    outputDevice.Flush();