我在我的应用程序中使用可编辑的pdf文件(由Nitro PDF Software创建)。这些pdf文件有很多可编辑的字段(如文本框)和一个按钮(如提交)。
每当用户打开该pdf文件时,输入文本并单击提交按钮,他们将重定向到aspx页面。
如何获取发布到此页面的所有静态和动态值,并使用输入的数据创建另一个pdf文件?如何保存创建的pdf文件?
答案 0 :(得分:8)
来自维基百科,PDF Interactive elements有两种集成数据和PDF的可能性(还有指向的链接):
对于兼容性问题,我会选择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 :(得分: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();
}
}
答案 2 :(得分:3)
尝试使用开源库http://pdfsharp.codeplex.com/,可以在此处找到示例http://www.pdfsharp.net/wiki/。
答案 3 :(得分:2)
如何获取发布到此页面的所有静态和动态值?
您可以在从html控件中检索任何其他值时检索它们,例如:
string MyVal = Request.Form["FieldName"];
并使用输入的数据创建另一个pdf文件?
在这里,您可以使用您选择的PDF库(iText.Net,Nitro PDF,Amyuni PDF Creator.Net),加载PDF表单,为每个字段设置值,根据需要展平文件,然后保存。这部分的代码取决于所使用的库,但它们通常都有很好的文档记录,因此您应该能够轻松找到示例代码。
答案 4 :(得分:1)
为什么不按照以下链接中提到的方式进行操作。
http://www.gnostice.com/nl_article.asp?id=176&t=Generate_PDF_Forms_In_ASP_NET_Using_PDFOne_NET_v3
它使用另一种PDF生成工具。但你应该能够用硝基做同样的事。
答案 5 :(得分: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();
}
答案 6 :(得分:0)
下载itextSharp dll文件,使用命名空间
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using iTextSharp.text.pdf.draw;
Document document = new Document(PageSize.A4,43,43, 43, 43);
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(@"D:\abc\text.pdf", FileMode.Create));
PdfPCell cell = null;
PdfPTable table = null;
document.Open();
Chunk glue = new Chunk(new VerticalPositionMark());
Paragraph para = new Paragraph();
table = new PdfPTable(1);
table.TotalWidth = 340f;
table.LockedWidth = true;
table.SpacingBefore = 20f;
table.HorizontalAlignment = Element.ALIGN_CENTER;
table.AddCell(PhraseCell(new Phrase("SCHEME INSTALLMENT RECEIPT ", FontFactory.GetFont("Arial", 12,1)), PdfPCell.ALIGN_CENTER));
cell = PhraseCell(new Phrase(), PdfPCell.ALIGN_CENTER);
cell.Colspan = 1;
cell.PaddingBottom = 10f;
table.AddCell(cell);
document.Add(table);
Phrase ph1 = new Phrase();
Paragraph mm = new Paragraph();
ph1.Add(new Chunk(Environment.NewLine));
ph1.Add(new Chunk("Name : " + name,FontFactory.GetFont("Arial", 10,1)));
ph1.Add(glue);
ph1.Add(new Chunk("Bill No. : " + BillNo, FontFactory.GetFont("Arial", 10,1)));
ph1.Add(new Chunk(Environment.NewLine));
ph1.Add(new Chunk("Address : " + address, FontFactory.GetFont("Arial", 10,1)));
ph1.Add(glue);
ph1.Add(new Chunk("Bill Date : " + billDate, FontFactory.GetFont("Arial", 10,1)));
ph1.Add(new Chunk(Environment.NewLine));
ph1.Add(new Chunk("Mobile No. : " + mobile, FontFactory.GetFont("Arial", 10,1)));
ph1.Add(glue);
ph1.Add(new Chunk("Scheme No. : " + orderNo, FontFactory.GetFont("Arial", 10,1)));
mm.Add(ph1);
para.Add(mm);
document.Add(para);
table = new PdfPTable(3);
table.TotalWidth = 340f;
table.LockedWidth = true;
table.SpacingBefore = 20f;
table.HorizontalAlignment = Element.ALIGN_CENTER;
table.AddCell(PhraseCell(new Phrase("HSN Code ", FontFactory.GetFont("Arial", 10,1)), PdfPCell.ALIGN_CENTER));
table.AddCell(PhraseCell(new Phrase("No of Installment", FontFactory.GetFont("Arial", 10,1)), PdfPCell.ALIGN_CENTER));
table.AddCell(PhraseCell(new Phrase("Installment Amount", FontFactory.GetFont("Arial", 10,1)), PdfPCell.ALIGN_CENTER));
cell = PhraseCell(new Phrase(), PdfPCell.ALIGN_CENTER);
cell.Colspan = 3;
cell.PaddingBottom = 10f;
table.AddCell(cell);
table.AddCell(PhraseCell(new Phrase("7113", FontFactory.GetFont("Arial", 10,1)), PdfPCell.ALIGN_CENTER));
table.AddCell(PhraseCell(new Phrase(paidNo, FontFactory.GetFont("Arial", 10,1)), PdfPCell.ALIGN_CENTER));
table.AddCell(PhraseCell(new Phrase(paidAmount, FontFactory.GetFont("Arial", 10,1)), PdfPCell.ALIGN_CENTER));
cell = PhraseCell(new Phrase(), PdfPCell.ALIGN_CENTER);
cell.Colspan = 3;
cell.PaddingBottom = 10f;
table.AddCell(cell);
PdfContentByte contentByte = writer.DirectContent;
contentByte.MoveTo(45.0, 627.0);
contentByte.LineTo(550.0, 627.0);
document.Add(table);
Paragraph para1 = new Paragraph();
Phrase ph2 = new Phrase();
Paragraph mm1 = new Paragraph();
string amountWord = ConvertNumbertoWords(Convert.ToInt64(paidAmount));
ph2.Add(new Chunk(Environment.NewLine));
ph2.Add(new Chunk(Environment.NewLine));
ph2.Add(new Chunk(Environment.NewLine));
ph2.Add(new Chunk(amountWord + " Only", FontFactory.GetFont("Arial", 10,1)));
ph2.Add(new Chunk(Environment.NewLine));
ph2.Add(new Chunk("By Cash", FontFactory.GetFont("Arial", 10,1)));
ph2.Add(new Chunk(Environment.NewLine));
ph2.Add(new Chunk(paidAmount, FontFactory.GetFont("Arial", 10,1)));
mm1.Add(ph2);
para1.Add(mm1);
document.Add(para1);
Paragraph para3 = new Paragraph();
Phrase ph3 = new Phrase();
Paragraph mm3 = new Paragraph();
ph3.Add(new Chunk(Environment.NewLine));
ph3.Add(new Chunk("Credit Card Charges :", FontFactory.GetFont("Arial", 10,1)));
ph3.Add(new Chunk(Environment.NewLine));
ph3.Add(new Chunk("Customer Sign.", FontFactory.GetFont("Arial", 10,1)));
ph3.Add(glue);
ph3.Add(new Chunk("For Example", FontFactory.GetFont("Arial", 10,1)));
mm3.Add(ph3);
para3.Add(mm3);
document.Add(para3);
document.Close();