首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iTextSharp创建的PDF仍在使用中

iTextSharp创建的PDF仍在使用中
EN

Stack Overflow用户
提问于 2019-10-31 21:02:50
回答 2查看 360关注 0票数 1

如果我用给定的源代码创建一个pdf,我就会遇到一个问题,那就是我不能在"adobe-acrobat“中打开pdf-document,因为它说它仍在被另一个进程使用。我在释放锁的代码中遗漏了什么?

代码语言:javascript
复制
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();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-31 21:08:31

The error was closed FileStream。另外,正如@Amy已经提到的,您需要确保您的清理代码已执行,例如:

代码语言:javascript
复制
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(); 
}
票数 2
EN

Stack Overflow用户

发布于 2019-10-31 21:14:55

代码语言:javascript
复制
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()
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58643978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档