iTextSharp 创建的 PDF 仍在使用中
iTextSharp Created PDF is still in use
如果我使用给定的源代码创建 pdf,我会遇到无法打开 pdf 文档的问题,例如 "adobe-acrobat",因为它说它仍在被另一个进程使用.我在释放锁的代码中缺少什么?
var a = Guid.NewGuid();
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
PdfWriter writer2 = PdfWriter.GetInstance(pdfDoc, new FileStream(a.ToString()+".pdf", FileMode.Create));
writer2.SetFullCompression();
writer2.CloseStream = true;
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(AppContext.BaseDirectory + "Ehrungsantrag.png");
img.SetAbsolutePosition(0, 0);
img.ScaleAbsoluteHeight(pdfDoc.PageSize.Height);
img.ScaleAbsoluteWidth(pdfDoc.PageSize.Width);
pdfDoc.Open();
pdfDoc.NewPage();
pdfDoc.Add(img);
pdfDoc.Close();
writer2.Close();
错误是没有关闭FileStream。同样正如@Amy 已经提到的,您需要确保执行了清理代码,例如:
Document pdfDoc = null;
PdfWriter writer2 = null;
System.IO.FileStream fs = null; // <- create the FileStream
try
{
var a = Guid.NewGuid();
pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
fs = new FileStream(a.ToString()+".pdf", FileMode.Create);
writer2 = PdfWriter.GetInstance(pdfDoc, fs);
writer2.SetFullCompression();
writer2.CloseStream = true;
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(AppContext.BaseDirectory + "Ehrungsantrag.png");
img.SetAbsolutePosition(0, 0);
img.ScaleAbsoluteHeight(pdfDoc.PageSize.Height);
img.ScaleAbsoluteWidth(pdfDoc.PageSize.Width);
pdfDoc.Open();
pdfDoc.NewPage();
pdfDoc.Add(img);
}
finally
{
pdfDoc.Close();
pdfDoc = null;
//writer2.Close();
// That was the eroor -> always close open filehandles explicity !
fs.Close();
}
var a = Guid.NewGuid();
using (var pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f))
using (var writer2 = PdfWriter.GetInstance(pdfDoc, new FileStream(a.ToString()+".pdf", FileMode.Create));
{
writer2.SetFullCompression();
writer2.CloseStream = true;
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(AppContext.BaseDirectory + "Ehrungsantrag.png");
img.SetAbsolutePosition(0, 0);
img.ScaleAbsoluteHeight(pdfDoc.PageSize.Height);
img.ScaleAbsoluteWidth(pdfDoc.PageSize.Width);
pdfDoc.Open();
pdfDoc.NewPage();
pdfDoc.Add(img);
pdfDoc.Close();
writer2.Close()
}
如果我使用给定的源代码创建 pdf,我会遇到无法打开 pdf 文档的问题,例如 "adobe-acrobat",因为它说它仍在被另一个进程使用.我在释放锁的代码中缺少什么?
var a = Guid.NewGuid();
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
PdfWriter writer2 = PdfWriter.GetInstance(pdfDoc, new FileStream(a.ToString()+".pdf", FileMode.Create));
writer2.SetFullCompression();
writer2.CloseStream = true;
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(AppContext.BaseDirectory + "Ehrungsantrag.png");
img.SetAbsolutePosition(0, 0);
img.ScaleAbsoluteHeight(pdfDoc.PageSize.Height);
img.ScaleAbsoluteWidth(pdfDoc.PageSize.Width);
pdfDoc.Open();
pdfDoc.NewPage();
pdfDoc.Add(img);
pdfDoc.Close();
writer2.Close();
错误是没有关闭FileStream。同样正如@Amy 已经提到的,您需要确保执行了清理代码,例如:
Document pdfDoc = null;
PdfWriter writer2 = null;
System.IO.FileStream fs = null; // <- create the FileStream
try
{
var a = Guid.NewGuid();
pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
fs = new FileStream(a.ToString()+".pdf", FileMode.Create);
writer2 = PdfWriter.GetInstance(pdfDoc, fs);
writer2.SetFullCompression();
writer2.CloseStream = true;
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(AppContext.BaseDirectory + "Ehrungsantrag.png");
img.SetAbsolutePosition(0, 0);
img.ScaleAbsoluteHeight(pdfDoc.PageSize.Height);
img.ScaleAbsoluteWidth(pdfDoc.PageSize.Width);
pdfDoc.Open();
pdfDoc.NewPage();
pdfDoc.Add(img);
}
finally
{
pdfDoc.Close();
pdfDoc = null;
//writer2.Close();
// That was the eroor -> always close open filehandles explicity !
fs.Close();
}
var a = Guid.NewGuid();
using (var pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f))
using (var writer2 = PdfWriter.GetInstance(pdfDoc, new FileStream(a.ToString()+".pdf", FileMode.Create));
{
writer2.SetFullCompression();
writer2.CloseStream = true;
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(AppContext.BaseDirectory + "Ehrungsantrag.png");
img.SetAbsolutePosition(0, 0);
img.ScaleAbsoluteHeight(pdfDoc.PageSize.Height);
img.ScaleAbsoluteWidth(pdfDoc.PageSize.Width);
pdfDoc.Open();
pdfDoc.NewPage();
pdfDoc.Add(img);
pdfDoc.Close();
writer2.Close()
}