2014-02-14 50 views
-2

我的目標是創建一個文件並在其中保存一些文本。但是,這個文件應該是以pdf格式創建的,而不需要使用任何庫。 我已經寫了下面的代碼:在c中不使用任何第三方庫創建pdf文件?

#include <stdio.h> 

int main(void) { 
    FILE *fp; 
    char ch; 
    fp = fopen("file.pdf", "w"); 
    fprintf(fp, "%PDF-1.3"); //to initiate data storage in pdf file 
    printf("\nEnter data to be stored in to the file:"); 
    while((ch = getchar()) != EOF) 
     putc(ch,fp); 
    fclose(fp); 
    return 0; 
} 

現在我的文件是PDF格式創建的,但是當我通過雙擊它打開它,它是不開放的,給人的消息,如:在打開文件 「錯誤該文件已損壞,無法修復。「

請提供任何建議來解決此問題。

+3

文件是文件擴展名,它不會添加文件的格式和標頭的信息,您必須創建一個文件,該文件符合PDF格式。使用庫 –

+0

無視整個PDF構建,您的程序仍然因其嘗試做的事情而被破壞。 'getchar()'返回'int',因爲'EOF'不適合一個字符。 – unwind

+1

如果您真的打算重新發明Adobe製作[PDF規範可用](http://www.adobe.com/devnet/pdf/pdf_reference.html)。 – jpw

回答

8

命名文件「file.pdf」並寫入幾個標題字節不會使其成爲PDF文件。文件格式由其內容確定,而不是其名稱(或某些工具如file用於「猜測」格式的字節對)。

如果要編寫PDF文件「不使用任何庫」,則需要PDF文件格式的描述,然後根據該規範生成文件

我會強烈勸阻這種方法。第三方庫是有原因的。

+0

因此,unix工具'文件'可以欺騙承認錯誤的文件格式? – ajay

+2

@ajay:'人5魔法'。這是'file'使用的查找。如果一個文件看起來足夠像一個給定的格式,那麼'file'將標識爲*是*格式。任何以「\ x7fELF \ x02 \ x01」開頭的文件都將被識別爲「ELF 64位LSB」,即使其餘文本都是純文本。 'file'應該做什麼,*執行*文件來檢查它是否真的是可執行文件? – DevSolar

1

如果要在沒有任何庫的幫助下以特定格式創建文件,第一個自然步驟應該是查看格式的規範

在PDF的情況下,規範是ISO標準。但是,與大多數ISO標準不同,您可以從Adobe網站下載僅使用不同頁眉和頁腳的免費版本:ISO 32000-1 copy from Adobe

如果您不喜歡RFC的語言ISO規範,您可以選擇Adobe自己查看最新的PDF參考文獻;在這些文件中使用了替代性語言機制來指定要求,建議,選項,禁止等等。:PDF reference, sixth edition (Version 1.7)

相關問題