2016-07-19 9 views
0

나는 한 위치에서 다른 위치로 다른 처리를 위해 PDF 파일의 내용을 복사하는 C 코드를 작성했습니다. 내가 한 것은 :C를 사용하는 부적절한 PDF 파일 복사 C

열기

if ((fp = fopen(argv[6],"rb")) == 0) { 
     fprintf(stderr, "ERROR: Can't open input file %s\n",argv[6]); 
     goto out; 
} 

그럼 내가이를 엽니 다 MuPDF을 사용하고

/* save the contents for the file to a temporary location */ 
    tempfp = fopen(CUPS_IPTEMPFILE, "wb"); 
    while ((n = fread(buf, 1, BUFSIZ, fp)) > 0) { 
    count = fwrite(buf, 1, BUFSIZ, tempfp); 
    } 
    fclose(tempfp); 

임시 위치에 PDF 파일의 내용을 저장 바이너리 읽기 모드로 파일 파일; MuPDF이 파일을 제대로 표시 할 수 있지만, 그것은 터미널에 다음과 같은 오류 제공 : 나도 같은 파일을 표시하는 Okular의를 사용하는 경우

$ mupdf cupsiptempfile.pdf 
error: cannot find startxref 
warning: trying to repair broken xref 

, 나는 오류를 얻을하지 마십시오을

$ okular cupsiptempfile.pdf 
okular(12821)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig: 
okular(12821)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig: 
okular(12821)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig: 
okular(12821)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig: 
okular(12821)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig: 

왜 여기에 차이가 있습니까? 복사 부분에 문제가 있습니까?

추가 정보 : MuPDF를 사용하여 원본 PDF 파일을 열면 오류가 없습니다.

원하는 추가 정보를 언제든지 물어보십시오.

+3

당신이 BUFSIZ 문자를 기입하지만 BUFSIZ 문자를 읽고하지 않을 수 있습니다 복사 할 때 - 변수 n이 읽은 얼마나 많은 문자 그래서 당신이 작성해야 얼마나 많은 당신에게있다 . –

+0

@ JerryJeremiah 네, 맞습니다. 그것은 그 문제를 해결했습니다. 어리석은 저, 나는 저것을주의하지 않았다. – Pranjal

+0

도움이 된 것을 기쁘게 생각합니다. –

답변

2

이 문제는 여기에 있습니다 : 파일을 복사 할 때

while ((n = fread(buf, 1, BUFSIZ, fp)) > 0) { 
    count = fwrite(buf, 1, BUFSIZ, tempfp); 
} 

는 당신이 밖으로 BUFSIZ 문자를 기입하지만, 당신이 BUFSIZ 문자를 읽고하지 않을 수 있습니다 - 변수 n이 많은 문자가 너무 읽은 어떻게 당신에게있다 그 n 문자를 다시 써야합니다. 아마 다음과 같아야합니다

while ((n = fread(buf, 1, BUFSIZ, fp)) > 0) { 
    count = fwrite(buf, 1, n, tempfp); 
}