【问题标题】:iTextSharp-generated PDFs cause save dialog when closingiTextSharp 生成的 PDF 在关闭时会导致保存对话框
【发布时间】:2012-10-14 19:52:42
【问题描述】:

我正在使用 iTextSharp 生成 PDF 文档,并将它们保存到磁盘,如下所示:

        Document document = new Document(PageSize.LETTER, 50, 50, 80, 50);
        FileStream fs = new FileStream(Ruta, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
        PdfWriter PDFWriter = PdfWriter.GetInstance(document, fs);

        EsquemaFormato PageEventHandler = new EsquemaFormato();
        PageEventHandler.Title = TitleMiddle;
        PageEventHandler.TitleHeaderFont = FontFactory.GetFont(BaseFont.HELVETICA, 12, Font.NORMAL);
        PageEventHandler.TitleRightHeaderFont = FontFactory.GetFont(BaseFont.HELVETICA, 9, Font.NORMAL);
        PageEventHandler.HeaderLeft = "Nombre";
        PageEventHandler.HeaderRight = TitleRight;
        PageEventHandler.RutaImagen = RutaImagen;
        PageEventHandler.Cuerpo = Cuerpo;
        PDFWriter.PageEvent = PageEventHandler;

        document.Open();
        document.Close();

基于http://www.mazsoft.com/blog/post/2008/04/30/Code-sample-for-using-iTextSharp-PDF-library.aspx

我打开了我刚刚创建的任何 PDF 文件,但是当我尝试关闭它时会出现“您要保存吗?”对话框出现。不是使用 iTextSharp 生成的 PDF 不会发生这种情况。

我错过了什么?我见过使用 Response 的解决方案,但我不使用它。 提前致谢。

更新: 这是一个示例http://dl.dropbox.com/u/4582874/test.pdf

编辑: 通过关注 Bruno 的链接,我发现了这篇文章:iTextSharp + FileStream = Corrupt PDF file

成功了! 这是我现在的工作代码:

    public void CreatePDF(string TitleMiddle, string Ruta, string RutaImagen, string TitleRight, string Cuerpo)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            Document document = new Document(PageSize.LETTER, 50, 50, 80, 50);
            PdfWriter PDFWriter = PdfWriter.GetInstance(document, ms);

            EsquemaFormato PageEventHandler = new EsquemaFormato();
            PageEventHandler.Title = TitleMiddle;
            PageEventHandler.TitleHeaderFont = FontFactory.GetFont(BaseFont.HELVETICA, 12, Font.NORMAL);
            PageEventHandler.TitleRightHeaderFont = FontFactory.GetFont(BaseFont.HELVETICA, 9, Font.NORMAL);
            PageEventHandler.HeaderLeft = "Nombre";
            PageEventHandler.HeaderRight = TitleRight;
            PageEventHandler.RutaImagen = RutaImagen;
            PageEventHandler.Cuerpo = Cuerpo;
            PDFWriter.PageEvent = PageEventHandler;

            document.Open();
            document.Close();
            byte[] content = ms.ToArray();
            using (FileStream fs = File.Create(Ruta))
            {
                fs.Write(content, 0, (int)content.Length);
            }
        }
    }

【问题讨论】:

  • 您能否发布由您的代码生成的示例 pdf 以供进一步检查?
  • 布鲁诺,我没有使用 GetBuffer()
  • mkl,我如何在此处发布示例 pdf?我找不到附加文件选项

标签: asp.net itextsharp


【解决方案1】:

您是否尝试过不使用 FileAccess.ReadWrite、FileShare.ReadWrite 属性?

我每天都使用 itextSharp 创建 PDF,从来没有遇到过这个问题 - 你的代码和我的代码之间的主要区别是我没有这些。

我怀疑 FileShare 使文档处于打开状态,等待某人通过保存完成关闭它?

【讨论】:

  • FileStream fs = new FileStream(Ruta, FileMode.OpenOrCreate); // 我遇到了同样的问题
  • 关闭你的文件流。或者创建与您的 GetInstance 内联的新文件流。 PdfWriter.GetInstance(document, new FileStream(Ruta, FileMode.OpenOrCreate));
  • 它也有效(我已经用另一个解决方案编辑了我的帖子),谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多