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

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

8 голосов
/ 22 февраля 2012

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

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

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

Ответы [ 7 ]

8 голосов
/ 02 марта 2012

Из Википедии, Интерактивные элементы 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. Это объясняет, почему старые версии все еще используются.

4 голосов
/ 29 февраля 2012

Пользователь, следующий код для создания 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();
 }
}
3 голосов
/ 27 февраля 2012

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

2 голосов
/ 28 февраля 2012

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

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

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

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

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

1 голос
/ 12 ноября 2013

Для создания 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();
    }
1 голос
/ 27 февраля 2012

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

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

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

0 голосов
/ 30 мая 2018

Загрузите файл 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...