Создать и сохранить файл PDF

Я использую редактируемые PDF-файлы (созданные Nitro PDF Software) в моем приложении. Эти PDF-файлы имеют много редактируемых полей (например, текстовые поля) и одну кнопку (например, отправить).

Когда пользователь открывает этот файл PDF, вводит текст и нажимает кнопку отправки, он перенаправляется на страницу aspx.

Как получить все статические и динамические значения, которые публикуются на этой странице, и создать еще один файл PDF с введенными данными? И как мне сохранить созданный файл PDF?

7 ответов

Решение

Как получить все статические и динамические значения, которые публикуются на этой странице?

Вы можете получить их при получении любого другого значения из элемента управления html, например:

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

и создать еще один PDF-файл с введенными данными?

Здесь вы можете использовать PDF-библиотеку по вашему выбору (iText.Net, Nitro PDF, Amyuni PDF Creator.Net), загрузить свою PDF-форму, установить значения для каждого поля, при необходимости выровнять файл и сохранить. Код для этой части зависит от используемой библиотеки, но обычно она хорошо документирована, поэтому вы сможете легко найти пример кода.

Из Википедии, PDF Интерактивные элементы есть две возможности для интеграции данных и PDF (есть также ссылки на спецификации):

  • AcroForms (также известные как формы Acrobat), представленные в спецификации формата PDF 1.2 и включенные во все последующие спецификации PDF.
  • Формы Adobe XML Forms Architecture (XFA), представленные в спецификации формата PDF 1.5. Спецификация XFA не включена в спецификацию PDF, она упоминается только как дополнительная функция. Формы Adobe XFA не совместимы с 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. Это объясняет, почему старые версии все еще используются.

Пользователь следующий код для создания PDF в asp.net:

Ниже приведен полный пример кода, чтобы вы могли начать. // Код

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();
 }
}

Попробуйте библиотеку с открытым исходным кодом http://pdfsharp.codeplex.com/, образец можно найти здесь http://www.pdfsharp.net/wiki/.

Для создания PDF используйте следующий код:

NameSpace:

     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();
    }

Почему бы вам не сделать это способом, указанным в ссылке ниже.

http://www.gnostice.com/nl_article.asp?id=176&t=Generate_PDF_Forms_In_ASP_NET_Using_PDFOne_NET_v3

Он использует другой инструмент для создания PDF. Но вы должны быть в состоянии сделать то же самое с нитро.

Загрузите файл 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();
Другие вопросы по тегам