0
我已經在C中編寫了一個代碼,其中我將PDF文件的內容從一個位置複製到另一個位置以供進一步處理。我所做的是:不正確的PDF文件使用C複製使用C
打開二進制讀模式文件
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是能夠正確顯示的文件,它提供了在終端上出現以下錯誤:
$ 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文件時,它沒有出現錯誤。
請隨時詢問你想要的任何進一步的信息。
當你複製你寫BUFSIZ字符,但你可能沒有讀BUFSIZ字符 - 變量n沒有告訴你有多少個字符中讀取所以這是你應該有多少寫。 –
@JerryJeremiah是的,你是對的。這解決了問題。傻我,我沒注意到那個。 – Pranjal
很高興幫助。 –