ساخت یک گزارش ساز به کمک iTextSharp و Open Office
نویسنده: وحید نصیری
تاریخ: ۱۳۹۰/۰۹/۰۱ ۰۰:۱۹:۰۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
using System;
using System.Diagnostics;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace PdfForm
{
class Program
{
//روش صحیح ثبت و معرفی فونت در این کتابخانه
public static iTextSharp.text.Font GetTahoma()
{
var fontName = "Tahoma";
if (!FontFactory.IsRegistered(fontName))
{
var fontPath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\tahoma.ttf";
FontFactory.Register(fontPath);
}
return FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
}
static void Main(string[] args)
{
string fileNameExisting = @"form.pdf";
string fileNameNew = @"newform.pdf";
using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open))
using (var newFileStream = new FileStream(fileNameNew, FileMode.Create))
{
var pdfReader = new PdfReader(existingFileStream);
using (var stamper = new PdfStamper(pdfReader, newFileStream))
{
//نکته مهم جهت کار با اطلاعات فارسی
//در غیراینصورت شاهد ثبت اطلاعات نخواهید بود
stamper.AcroFields.AddSubstitutionFont(GetTahoma().BaseFont);
//form.Fields.Keys = تمام فیلدهای موجود در فرم
var form = stamper.AcroFields;
//مقدار دهی فیلدهای فرم
form.SetField("TextBox1", "مقدار1");
form.SetField("TextBox2", "مقدار2");
// "Yes" and "Off" are valid values here
form.SetField("Check Box 1", "Yes");
// "" and "Off" are valid values here
form.SetField("Option Button 1", "");
// نحوه مقدار دهی لیست
form.SetListOption("ListBox1", new[] { "1مقدار یک", "مقدار دو1" }, null);
form.SetField("ListBox1", null);
// به این ترتیب فرم دیگر توسط کاربر قابل ویرایش نخواهد بود
//stamper.PartialFormFlattening --> جهت غیرقابل ویرایش نمودن فیلدی مشخص
stamper.FormFlattening = true;
stamper.Close();
pdfReader.Close();
}
}
Process.Start("newform.pdf");
}
}
}
PdfContentByte content = stamper.GetOverContent(pdfReader.NumberOfPages); Image image = Image.GetInstance(imagePath); image.SetAbsolutePosition(450,650); image.ScaleAbsolute(200,200); content.AddImage(image);
public static Font GetTahoma()
{
var fontName = "Tahoma";
if (!FontFactory.IsRegistered(fontName))
{
var fontPath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\tahoma.ttf";
FontFactory.Register(fontPath);
}
return FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
}
string fileNameExisting = @"Test.pdf";
string fileNameNew = @"newform.pdf";
using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open))
using (var newFileStream = new FileStream(fileNameNew, FileMode.Create))
{
var pdfReader = new PdfReader(existingFileStream);
using (var stamper = new PdfStamper(pdfReader, newFileStream))
{
//نکته مهم جهت کار با اطلاعات فارسی
//در غیراینصورت شاهد ثبت اطلاعات نخواهید بود
stamper.AcroFields.AddSubstitutionFont(GetTahoma().BaseFont);
//form.Fields.Keys = تمام فیلدهای موجود در فرم
var form = stamper.AcroFields;
//مقدار دهی فیلدهای فرم
form.SetField("Text1", "مقدار1");
form.SetField("Text2", "مقدار2");
form.SetField("Text3", "مقدار3");
form.SetField("Text4", "مقدار4");
form.SetField("Text5", "مقدار5");
form.SetField("Text6", "مقدار6");
// به این ترتیب فرم دیگر توسط کاربر قابل ویرایش نخواهد بود
//stamper.PartialFormFlattening --> جهت غیرقابل ویرایش نمودن فیلدی مشخص
stamper.FormFlattening = true;
stamper.Close();
pdfReader.Close();
}
}
Process.Start("newform.pdf");
string fileNameExisting = @"c:\Test.pdf"; string fileNameNew = @"c:\newform.pdf";
string fileNameExisting =HttpRuntime.AppDomainAppPath+ @"TestOpenOffice.pdf"; string fileNameNew =HttpRuntime.AppDomainAppPath+ @"newform.pdf";
Process.Start(HttpRuntime.AppDomainAppPath+"newform.pdf");
در صورتی که همین مقدار در داخل یک div و یا td در صفحه Razor بدرستی نمایش داده میشود
در صورت امکان راهنمائی کنید.سپاس