Создание и сохранение PDF-файла



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



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



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

659   7  

7 ответов:

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

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

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

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

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

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

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

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

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

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

Для создания 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();
    }

Загрузите dll-файл itextSharp, используйте пространство имен

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

Comments

    Ничего не найдено.