2016-07-19 8 views
0

私は、Cでコードを書いています。ここでは、PDFファイルの内容を別の場所にコピーして処理します。私がやったことです:Cを使用した不適切なPDFファイルのコピー

オープン私は開くことがMuPDFを使用していますバイナリ読み取りモードでファイル

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

その後、私は一時的な場所にPDFファイルの内容を保存

/* 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); 

ファイル; MuPDFが正しくファイルを表示することができるが、それは、端末に次のエラーを与える:

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

私は同じファイルを表示するには、Okularを使用している場合は、私はすべてのエラーに

$ 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); 
} 
関連する問題