Как я могу использовать библиотеку PoDoFo для аннотирования PDF-файлов на iOS? - PullRequest
5 голосов
/ 04 октября 2011

Я хотел бы комментировать PDF-файлы в приложении для iOS. Я сталкивался с библиотекой PoDoFo , но я не уверен, как использовать это в приложении для iOS.

Можно ли использовать эту библиотеку для аннотирования PDF-файлов на iOS? Если да, то как?

Ответы [ 2 ]

4 голосов
/ 29 декабря 2011

Пожалуйста, сделайте что-нибудь подобное.

+ (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 голосов
/ 18 декабря 2013

Ответ выше предоставляет только способ добавить аннотации (типа FreeText и т. Д.). Как правило, вы хотите создать / изменить поля. Для этого я обычно использую PdfTextFields, PdfCheckboxes, PdfSignature Field. Надеюсь, это поможет

    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();
...