joebeazelman
2009-01-01 21:07:08 UTC
For some odd reason, PdfStamper either closes or disposes my MemoryStream
object when its Close() method is called. I can't figure out why this is
happening. Thanks.
I get the following message:
System.NullReferenceException was unhandled
Message="Object reference not set to an instance of an object."
Source="itextsharp"
StackTrace:
at iTextSharp.text.pdf.PdfWriter.get_PdfIndirectReference()
at iTextSharp.text.pdf.PdfImportedPage..ctor(PdfReaderInstance
readerInstance, PdfWriter writer, Int32 pageNumber)
at iTextSharp.text.pdf.PdfReaderInstance.GetImportedPage(Int32
pageNumber)
at iTextSharp.text.pdf.PdfCopy.GetImportedPage(PdfReader reader,
Int32 pageNumber)
at Solidwave.Forms.PDFOrder.CopyPages(Stream finalPdfStream,
MemoryStream stream, Int32 numberOfPages, Document doc) in
D:\GenerateOrderPDF\GenerateOrderPDF\PDFOrder.cs:line 64
at Solidwave.Forms.PDFOrder.Draw(Stream finalPdfStream) in
D:\GenerateOrderPDF\GenerateOrderPDF\PDFOrder.cs:line 50
at GenerateOrderPDF.Program.Main() in
D:\GenerateOrderPDF\GenerateOrderPDF\Program.cs:line 22
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[]
args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence
assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
----------
class PDFOrderForm
{
private string _errorMsg = "";
public string ErrorMsg
{
get { return _errorMsg; }
set { _errorMsg = value; }
}
public void Draw(Stream finalPdfStream)
{
PdfReader firstSheetTemplateReader = new
PdfReader(@"D:\GenerateOrderPDF\GenerateOrderPDF\Invoice Template.pdf");
PdfReader secondSheetTemplateReader = new
PdfReader(@"D:\GenerateOrderPDF\GenerateOrderPDF\Invoice Template.pdf");
// create a new document to hold all final pages
Document doc = new Document();
MemoryStream tempStream;
doc.Open();
int numberOfPages = 0;
//
for (int i = 0; i < 2; i++)
{
// used to switch between first and second sheet
PdfReader templateReader = new
PdfReader(firstSheetTemplateReader);
// create a temporary memory stream for holding the generated
pages
tempStream = new System.IO.MemoryStream();
// fill out the form template fields
PdfStamper stamper = new PdfStamper(templateReader, tempStream);
AcroFields fields = stamper.AcroFields;
FillDocumentInfo(fields);
numberOfPages = FillOutDocumentDetails(templateReader, stamper,
fields);
// flatten the form
stamper.FormFlattening = true;
stamper.Close();
// copy all pages to the document
CopyPages(finalPdfStream, tempStream, numberOfPages, doc);
}
// close the document
doc.Close();
}
private static void CopyPages(Stream finalPdfStream, MemoryStream
stream, int numberOfPages, Document doc)
{
// copy all generated pages into final document
PdfCopy pdfcopy = new PdfCopy(doc, finalPdfStream);
PdfReader tempReader = new PdfReader(stream.ToArray());
for (int i = 1; i <= numberOfPages; i++)
{
pdfcopy.AddPage(pdfcopy.GetImportedPage(tempReader, i));
}
pdfcopy.FreeReader(tempReader);
}
private static int FillOutDocumentDetails(PdfReader templateReader,
PdfStamper stamper, AcroFields fields)
{
float[] tablePosition =
fields.GetFieldPositions("TABLE_PLACEHOLDER");
PdfContentByte overContent = stamper.GetOverContent(1);
int numberOfPages = templateReader.NumberOfPages;
ColumnText column = new ColumnText(overContent);
column.SetSimpleColumn(tablePosition[1], tablePosition[2],
tablePosition[3], tablePosition[4] - 0.5f, 0, Element.ALIGN_TOP);
float[] widths = { 0.1089f, 0.1089f, 0.5527f, 0.1149f, 0.1149f };
PdfPTable table = new PdfPTable(widths);
table.WidthPercentage = 100;
table.DefaultCell.BorderWidth = 0.0f;
table.DefaultCell.HasBorder(Rectangle.LEFT_BORDER);
//table.TotalWidth = tablePosition[3]-tablePosition[1];
table.SplitRows = true;
for (int j = 0; j < 500; j++)
{
PdfPCell cell = new PdfPCell();
cell.AddElement(new Chunk(j.ToString() + "we are the champions
my friends"));
table.AddCell(cell);
}
Rectangle r = new Rectangle(PageSize.A4.GetRight(72),
PageSize.A4.GetTop(72));
column.AddElement(table);
column.Go();
while (ColumnText.HasMoreText(column.Go()))
{
numberOfPages++;
stamper.InsertPage(numberOfPages,
templateReader.GetPageSizeWithRotation(1));
column.SetSimpleColumn(tablePosition[1], tablePosition[2],
tablePosition[3], tablePosition[4] + 250, 0, Element.ALIGN_TOP);
column.Canvas = stamper.GetOverContent(numberOfPages);
// reread the fill in form and add it to our document
}
return numberOfPages;
}
private static void FillDocumentInfo(AcroFields fields)
{
// fill out invoice information
fields.SetField("DOCUMENT_TITLE", "INVOICE");
fields.SetField("COMPANY_ADDRESS", "Blah");
fields.SetField("BILLING_ADDRESS", "Blah");
fields.SetField("SHIPPING_ADDRESS", "MBlah");
fields.SetField("DETAILS", "DATE: " +
DateTime.Now.ToString("MM/DD/YYYY"));
fields.SetField("STATUS", "Completed");
fields.SetField("SHIPPING_METHOD", "UPS");
fields.SetField("PAYMENT_METHOD", "VISA x1111");
fields.SetField("SHIPPING", "Done");
}
}
object when its Close() method is called. I can't figure out why this is
happening. Thanks.
I get the following message:
System.NullReferenceException was unhandled
Message="Object reference not set to an instance of an object."
Source="itextsharp"
StackTrace:
at iTextSharp.text.pdf.PdfWriter.get_PdfIndirectReference()
at iTextSharp.text.pdf.PdfImportedPage..ctor(PdfReaderInstance
readerInstance, PdfWriter writer, Int32 pageNumber)
at iTextSharp.text.pdf.PdfReaderInstance.GetImportedPage(Int32
pageNumber)
at iTextSharp.text.pdf.PdfCopy.GetImportedPage(PdfReader reader,
Int32 pageNumber)
at Solidwave.Forms.PDFOrder.CopyPages(Stream finalPdfStream,
MemoryStream stream, Int32 numberOfPages, Document doc) in
D:\GenerateOrderPDF\GenerateOrderPDF\PDFOrder.cs:line 64
at Solidwave.Forms.PDFOrder.Draw(Stream finalPdfStream) in
D:\GenerateOrderPDF\GenerateOrderPDF\PDFOrder.cs:line 50
at GenerateOrderPDF.Program.Main() in
D:\GenerateOrderPDF\GenerateOrderPDF\Program.cs:line 22
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[]
args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence
assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
----------
class PDFOrderForm
{
private string _errorMsg = "";
public string ErrorMsg
{
get { return _errorMsg; }
set { _errorMsg = value; }
}
public void Draw(Stream finalPdfStream)
{
PdfReader firstSheetTemplateReader = new
PdfReader(@"D:\GenerateOrderPDF\GenerateOrderPDF\Invoice Template.pdf");
PdfReader secondSheetTemplateReader = new
PdfReader(@"D:\GenerateOrderPDF\GenerateOrderPDF\Invoice Template.pdf");
// create a new document to hold all final pages
Document doc = new Document();
MemoryStream tempStream;
doc.Open();
int numberOfPages = 0;
//
for (int i = 0; i < 2; i++)
{
// used to switch between first and second sheet
PdfReader templateReader = new
PdfReader(firstSheetTemplateReader);
// create a temporary memory stream for holding the generated
pages
tempStream = new System.IO.MemoryStream();
// fill out the form template fields
PdfStamper stamper = new PdfStamper(templateReader, tempStream);
AcroFields fields = stamper.AcroFields;
FillDocumentInfo(fields);
numberOfPages = FillOutDocumentDetails(templateReader, stamper,
fields);
// flatten the form
stamper.FormFlattening = true;
stamper.Close();
// copy all pages to the document
CopyPages(finalPdfStream, tempStream, numberOfPages, doc);
}
// close the document
doc.Close();
}
private static void CopyPages(Stream finalPdfStream, MemoryStream
stream, int numberOfPages, Document doc)
{
// copy all generated pages into final document
PdfCopy pdfcopy = new PdfCopy(doc, finalPdfStream);
PdfReader tempReader = new PdfReader(stream.ToArray());
for (int i = 1; i <= numberOfPages; i++)
{
pdfcopy.AddPage(pdfcopy.GetImportedPage(tempReader, i));
}
pdfcopy.FreeReader(tempReader);
}
private static int FillOutDocumentDetails(PdfReader templateReader,
PdfStamper stamper, AcroFields fields)
{
float[] tablePosition =
fields.GetFieldPositions("TABLE_PLACEHOLDER");
PdfContentByte overContent = stamper.GetOverContent(1);
int numberOfPages = templateReader.NumberOfPages;
ColumnText column = new ColumnText(overContent);
column.SetSimpleColumn(tablePosition[1], tablePosition[2],
tablePosition[3], tablePosition[4] - 0.5f, 0, Element.ALIGN_TOP);
float[] widths = { 0.1089f, 0.1089f, 0.5527f, 0.1149f, 0.1149f };
PdfPTable table = new PdfPTable(widths);
table.WidthPercentage = 100;
table.DefaultCell.BorderWidth = 0.0f;
table.DefaultCell.HasBorder(Rectangle.LEFT_BORDER);
//table.TotalWidth = tablePosition[3]-tablePosition[1];
table.SplitRows = true;
for (int j = 0; j < 500; j++)
{
PdfPCell cell = new PdfPCell();
cell.AddElement(new Chunk(j.ToString() + "we are the champions
my friends"));
table.AddCell(cell);
}
Rectangle r = new Rectangle(PageSize.A4.GetRight(72),
PageSize.A4.GetTop(72));
column.AddElement(table);
column.Go();
while (ColumnText.HasMoreText(column.Go()))
{
numberOfPages++;
stamper.InsertPage(numberOfPages,
templateReader.GetPageSizeWithRotation(1));
column.SetSimpleColumn(tablePosition[1], tablePosition[2],
tablePosition[3], tablePosition[4] + 250, 0, Element.ALIGN_TOP);
column.Canvas = stamper.GetOverContent(numberOfPages);
// reread the fill in form and add it to our document
}
return numberOfPages;
}
private static void FillDocumentInfo(AcroFields fields)
{
// fill out invoice information
fields.SetField("DOCUMENT_TITLE", "INVOICE");
fields.SetField("COMPANY_ADDRESS", "Blah");
fields.SetField("BILLING_ADDRESS", "Blah");
fields.SetField("SHIPPING_ADDRESS", "MBlah");
fields.SetField("DETAILS", "DATE: " +
DateTime.Now.ToString("MM/DD/YYYY"));
fields.SetField("STATUS", "Completed");
fields.SetField("SHIPPING_METHOD", "UPS");
fields.SetField("PAYMENT_METHOD", "VISA x1111");
fields.SetField("SHIPPING", "Done");
}
}
--
View this message in context: http://www.nabble.com/MemoryStream-object-destroyed-by-PdfStamper.Close%28%29-tp21244882p21244882.html
Sent from the itextsharp-questions mailing list archive at Nabble.com.
View this message in context: http://www.nabble.com/MemoryStream-object-destroyed-by-PdfStamper.Close%28%29-tp21244882p21244882.html
Sent from the itextsharp-questions mailing list archive at Nabble.com.