2012-02-22 141 views
9

我在我的應用程序中使用可編輯的pdf文件(由Nitro PDF Software創建)。這些pdf文件有很多可編輯字段(如文本框)和一個按鈕(如提交)。生成並保存PDF文件

每當用戶打開該pdf文件,輸入文本並點擊提交按鈕,他們就會被重定向到一個aspx頁面。

如何獲取發佈到此頁面的所有靜態和動態值,並使用輸入的數據創建另一個pdf文件?我該如何保存創建的pdf文件?

+2

你爲什麼不問PDF工具包的創造者? – jgauffin 2012-02-27 14:41:57

回答

2

如何獲取發佈到此頁面的所有靜態和動態值?

當你從一個HTML控件檢索其他任何值,例如您可以retreive他們:

string MyVal = Request.Form["FieldName"]; 

並創建輸入數據的另一個PDF文件?

在這裏您可以使用您選擇的PDF庫(iText.Net,Nitro PDF,Amyuni PDF Creator.Net),加載您的PDF表格,將值設置到每個字段,根據需要拼合您的文件並保存。這部分的代碼取決於正在使用的庫,但它們通常都有很好的文檔記錄,所以您應該能夠輕鬆找到示例代碼。

4

用戶對於之後在asp.net生成PDF代碼:

有下面一個完整的代碼示例,讓您開始。 //代碼

using System; 
using System.IO; 
using System.Diagnostics; 

using iTextSharp.text; 
using iTextSharp.text.pdf; 

public class iTextDemo 
{ 
public static void Main() 
{ 
    Console.WriteLine("iText Demo"); 

    // step 1: creation of a document-object 
    Document myDocument = new Document(PageSize.A4.Rotate()); 

    try 
    { 

    // step 2: 
    // Now create a writer that listens to this doucment and writes the document to desired Stream. 

    PdfWriter.GetInstance(myDocument, new FileStream("Salman.pdf", FileMode.Create)); 

    // step 3: Open the document now using 
    myDocument.Open(); 

    // step 4: Now add some contents to the document 
    myDocument.Add(new Paragraph("First Pdf File made by Salman using iText")); 

    } 
    catch(DocumentException de) 
    { 
    Console.Error.WriteLine(de.Message); 
    } 
    catch(IOException ioe) 
    { 
    Console.Error.WriteLine(ioe.Message); 
    } 

    // step 5: Remember to close the documnet 

    myDocument.Close(); 
} 
} 
8

維基百科,PDF Interactive elements有兩種可能整合數據和PDF文件(也有鏈接到規格):

  • AcroForms(也被稱爲Acrobat中的形式),採用PDF 1.2格式規範引入,幷包含在所有後續PDF規範中。
  • 在XML 1.5格式規範中引入了Adobe XML Forms Architecture(XFA)表單。 XFA規範不包含在PDF規範中,它僅作爲可選功能引用。 Adobe XFA Forms與AcroForms不兼容。

對於兼容性問題,我會去AcroForms。在那種情況下,我會使用XFDF,因爲它是XML,因此更容易解析。我從來沒有使用過Nitro,但是當你建立一個PDF表單時,你通常會提供一個「保存」按鈕,並選擇操作這個按鈕的「發送/發佈表單到服務器」的數據格式XML,它只是XFDF。

只有在瀏覽器中查看PDF時纔有效。因此,典型的用例是:在將PDF返回給用戶將數據混合到PDF中之前,在服務器上有一個空的PDF模板,用戶在表單中輸入數據(PDF在瀏覽器中通過插件打開或本地Chrome),然後用戶按下在服務器上發佈xml的保存按鈕。用戶下一次請求獲取PDF時,您將最新數據與模板再次混合。

所以只有兩個問題是開放的:

查看完整過程在這裏:http://itextpdf.com/book/chapter.php?id=9。本示例在運行時動態更新PDF。由於使用iText,因此Java和C#沒有區別。

請注意,以前版本的iText(Java高達2.1.7和C#高達4.1.6)是在Mozilla公共許可證或LGPL下分發的,而當前版本是根據Affero通用公共許可證分發的。這就解釋了爲什麼仍舊使用舊版本。

1

生成PDF,使用下面的代碼:

命名空間:

 Using System.IO; 
    Using.iTextSharp.text; 
    Using.iTextSharp.text.pdf; 

在按鈕點擊:

 private void button1_Click(object sender, EventArgs e) 
    { 
     Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35); 
     PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(@"C:\Test.pdf", FileMode.Create)); 
     doc.Open(); 
     Paragraph paragraph = new Paragraph("Hi, \n This is xxx from yyy \n This is my pdf file"); 
     doc.Add(paragraph); 
     doc.Close(); 
    }