2013-01-24 13 views
2

iOS의 내 앱은 PDF에서 포함 된 파일을 추출합니다. 이제는 MuPDF을 사용하여 동일한 기능을 갖춘 Android 앱을 만들려고합니다.MuPDF를 사용하여 pdf에서 임베디드 파일을 추출하는 방법

iOS에서

, 내가 포함 된 파일을 추출 할 Quartz2d를 사용할 수 있습니다

  1. 액세스 루트 PDF 사전 (CGPDFDocumentGetCatalog)
  2. 받기 파일 배열 (이름> EmbeddedFiles> 이름)로하고
  3. 그것을 통해 itarate 파일 사전 내용 (EF> F)에서 파일 스트림 내용을 NSData으로 복사하고 저장하십시오.

MuPDF로 이것을 수행 할 수있는 방법이 있습니까? pdfextact.c에 따라

+0

어떤 라이브러리가 PDF 주석에 포함 된 파일을 추가하는 데 사용됩니까? –

답변

1

솔루션, bruteforce처럼 보이지만, 그것은 작동 : 모든 PDF 객체 (pdf_load_object) 객체 (isembed)

  • 이 경우 파일을 포함하는 경우
  • 결정을 통해

    1. itarate is - 스트림에 액세스하고 파일 저장 (saveembed)

    대부분의 테스트 케이스에서 파일 끝에 포함 된 파일이므로 reverce 반복은 의미를 만든다.

    static int isembed(pdf_obj *obj) { 
        pdf_obj *type = pdf_dict_gets(obj, "Type"); 
        return pdf_is_name(type) && !strcmp(pdf_to_name(type), "Filespec"); 
    } 
    
    
    static void saveembed(pdf_obj *dict) { 
        char *filename; 
    
        pdf_obj *obj = pdf_dict_gets(dict, "F"); 
        if (obj) filename = pdf_to_str_buf(obj); 
    
        obj = pdf_dict_gets(dict, "EF"); 
        if (!obj) return; 
    
        pdf_obj *stream = pdf_dict_gets(obj, "F"); 
        if (!stream) return; 
    
        FILE *f; 
        fz_buffer *buf; 
        int n, len; 
        unsigned char *data; 
    
        buf = pdf_load_stream(doc, pdf_to_num(stream), pdf_to_gen(stream)); 
    
        printf("extracting embedded file %s\n", filename); 
    
        f = fopen(filename, "wb"); 
    
        len = fz_buffer_storage(ctx, buf, &data); 
        n = fwrite(data, 1, len, f); 
    
        fclose(f); 
        fz_drop_buffer(ctx, buf); 
    } 
    
  • 관련 문제