2013-05-22 247 views
1

我很努力地將文件附加到我在運行時生成的PDF中。將文件附加到PDF

我在MVC框架中使用C#ASP.net。我最初使用HTML視圖中的ABCpdf創建PDF,但後來我意識到,我還需要將文件附加到PDF。我切換到使用iText,我已經設法附加文件到PDF使用解決方案在iTextSharp for PDF - how add file attachments?

我現在的問題是,我似乎無法將這些附件作爲PDF中的鏈接引用。

「iText in Action」書建議我可以使用註釋或文檔級附件。我不覺得這本書易於理解或者代碼易於理解。在互聯網上的文章的方式似乎也沒有什麼幫助,但道歉是我錯過了任何東西。

這是我第一次在這裏問一個問題,所以我道歉,如果我這樣做是不正確的。

+0

可能重複[iTextSharp for PDF - 如何添加文件附件?](http://stackoverflow.com/questions/3007218/itextsharp-for-pdf-how-add-file-attachments) – Bobrovsky

回答

1

對不起,你不喜歡我的書。

你讀過第16章了嗎?您要嵌入文件作爲這樣的文檔級附件:

PdfFileSpecification fs = PdfFileSpecification.FileEmbedded(writer, ...); 
fs.AddDescription("specificname", false); 
writer.AddFileAttachment(fs); 

裏面的文件,要打開與關鍵字「specificname」中描述的PDF文檔創建一個鏈接。這是通過一個動作完成:

PdfTargetDictionary target = new PdfTargetDictionary(true); 
target.EmbeddedFileName = "specificname"; 
PdfDestination dest = new PdfDestination(PdfDestination.FIT); 
dest.AddFirst(new PdfNumber(1)); 
PdfAction action = PdfAction.GotoEmbedded(null, target, dest, true); 

你可以使用這個動作的註釋,塊,等...例如:

Chunk chunk = new Chunk(" (see info)"); 
chunk.SetAction(action); 

這是一個普遍的誤解認爲,這將爲任何附件工作。然而,ISO-32000-1是關於GotoE(mbedded)的功能很明確:

12.6.4.4嵌入式去到操作 嵌入式去到行動(PDF 1.6)類似於一個遠程走至動作 但允許跳轉到或嵌入在另一個PDF文件 PDF文件(見7.11.4,「嵌入式文件流「)。 流」)。

如果你的意思是問「我想將任何文件(例如Docx,jpg,...文件)附加到我的PDF文件中,並向PDF文件添加一個操作來打開這樣的文件點擊一個鏈接「,那麼你會問一些在PDF規範中不被支持的東西。

隨意閱讀ISO-32000-1。如果您不理解我的書,您將不得不額外努力嘗試閱讀PDF標準...

+0

對不起 - 我並不是想暗示我不喜歡你的書,我當然喜歡你的書,並發現它非常有幫助。關於文件嵌入的部分我確實發現很複雜,很難理解,非常感謝你花時間在這裏解釋得非常好,我懷疑我有點匆匆忙忙,所以你完全正確,我的意思是任何文件,但我沒有意識到這一點,再次感謝 – DuncanOppaz

+0

沒問題,我剛剛開始編寫第三版,或者更確切地說:將在Leanpub上免費提供4卷新文檔:https://leanpub.com/u/itextsoftware書寫工作非常艱苦,所以所有有助於改進本書的反饋都是值得歡迎的。 –

0

在ABCpdf菜單項下找到的ABCpdf註釋示例項目顯示瞭如何添加文件附件。這些使用標準的「Pin」格式鏈接圖標。

因爲這個圖標通常被理解,所以我建議您使用該圖標而不是用通用鏈接替換它。

但是,如果您需要使用更通用的鏈接,請通過電子郵件與我們聯繫,我認爲我們有一些您可以使用的示例代碼。

我在ABCpdf .NET軟件組件上工作,所以我的回覆可能包含基於ABCpdf的概念。這正是我所知道的。 :-)「

+0

非常感謝 - 儘管多次查看您的所有支持文檔,但我還沒有看到。這是因爲我在尋找嵌入和附件而不是註釋 - 現在我感到一個白癡。這非常有用,謝謝。 (對不起,我不能加一個,因爲我還沒有足夠的聲譽去做) – DuncanOppaz

+0

再次感謝 - 這真的很有幫助。順便在你的頁面上:http://www.websupergoo.com/helppdf9net/source/4-examples/18-annotations.htm我認爲可能會有一個小小的錯誤:FileAttachmentAnnotation fileAttachMent = new FileAttachmentAnnotation(theDoc, 「340 625 340 640」,Server.MapPath(「video.WMV」));這意味着你看不到推針,因爲X座標是相同的,所以矩形沒有寬度,推測應該是「340 625 360 640」。我希望這是有幫助的。 – DuncanOppaz