首页 文章

iTextSharp生成的PDF会在关闭时导致保存对话框

提问于
浏览
0

我正在使用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

编辑:按照布鲁诺的链接我发现这篇文章: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);
            }
        }
    }

1 回答

  • 0

    您是否在没有FileAccess.ReadWrite,FileShare.ReadWrite属性的情况下尝试过它?

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

    我怀疑FileShare是否会让文档稍微打开,等待有人通过保存来完成关闭它?

相关问题