iTextSharp的生成PDF文件会保存对话框关闭时 [英] iTextSharp-generated PDFs cause save dialog when closing
问题描述
我使用iTextSharp的生成PDF文档,并把它们保存到磁盘是这样的:
文档的文档=新的文件(PageSize.LETTER,50,50,80,50);
的FileStream FS =新的FileStream(鲁塔,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.ReadWrite);
PdfWriter PDFWriter = PdfWriter.GetInstance(文件,FS); EsquemaFormato PageEventHandler =新EsquemaFormato();
PageEventHandler.Title = TitleMiddle;
PageEventHandler.TitleHeaderFont = FontFactory.GetFont(BaseFont.HELVETICA,12,Font.NORMAL);
PageEventHandler.TitleRightHeaderFont = FontFactory.GetFont(BaseFont.HELVETICA,9,Font.NORMAL);
PageEventHandler.HeaderLeft =农布雷
PageEventHandler.HeaderRight = TitleRight;
PageEventHandler.RutaImagen = RutaImagen;
PageEventHandler.Cuerpo = Cuerpo;
PDFWriter.PageEvent = PageEventHandler; document.Open();
document.Close();
我打开我刚刚创建的PDF文件,但是当我尝试关闭它会导致一个要不要救?出现对话框。这不与不与iTextSharp的生成的PDF发生
我在想什么?我见过使用响应解决方案,但我不使用它。
先谢谢了。
更新:
下面是一个示例 http://dl.dropbox.com/u/4582874/test.pdf
编辑:
按照布鲁诺的链接,我发现这个职位: iTextSharp的+的FileStream =损坏的PDF文件
这是没有的伎俩!
这是我的工作code现在:
公共无效CreatePDF(字符串TitleMiddle,串鲁塔,串RutaImagen,串TitleRight,串Cuerpo)
{
使用(MemoryStream的毫秒=新的MemoryStream())
{
文档的文档=新的文件(PageSize.LETTER,50,50,80,50);
PdfWriter PDFWriter = PdfWriter.GetInstance(文件,MS); EsquemaFormato PageEventHandler =新EsquemaFormato();
PageEventHandler.Title = TitleMiddle;
PageEventHandler.TitleHeaderFont = FontFactory.GetFont(BaseFont.HELVETICA,12,Font.NORMAL);
PageEventHandler.TitleRightHeaderFont = FontFactory.GetFont(BaseFont.HELVETICA,9,Font.NORMAL);
PageEventHandler.HeaderLeft =农布雷
PageEventHandler.HeaderRight = TitleRight;
PageEventHandler.RutaImagen = RutaImagen;
PageEventHandler.Cuerpo = Cuerpo;
PDFWriter.PageEvent = PageEventHandler; document.Open();
document.Close();
字节[] =内容ms.ToArray();
使用(的FileStream FS = File.Create(鲁塔))
{
fs.Write(含量,0,(int)的content.Length);
}
}
}
你有没有尝试过没有FileAccess.ReadWrite,FileShare.ReadWrite属性?
我创建PDF的使用iTextSharp的日常生活,还从来没碰到了这个问题 - 你的code和矿山之间的主要区别是我不具备这些。
我怀疑文件共享离开文档有所开放,等着别人来完成与保存关闭它?
I am using iTextSharp to generate PDF documents, and save them to disk like this:
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();
Based on http://www.mazsoft.com/blog/post/2008/04/30/Code-sample-for-using-iTextSharp-PDF-library.aspx
I open any PDF file I just created, but when I try to close it causes a "Do you want to Save?" dialog to appear. This does not happen with PDFs that are not generated with iTextSharp.
What am I missing? I've seen solutions using Response but I don´t use it. Thanks in advance.
Update: Here is a sample http://dl.dropbox.com/u/4582874/test.pdf
EDIT: By following Bruno's link I found this post: iTextSharp + FileStream = Corrupt PDF file
That did the trick! Here is my working code now:
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);
}
}
}
Have you tried it without the FileAccess.ReadWrite, FileShare.ReadWrite properties?
I create PDF's using itextSharp everyday and have never ran into this issue - main difference between your code and mine is i don't have these.
I suspect the FileShare is leaving the document somewhat open, waiting for someone to finalise closing it with a save?
这篇关于iTextSharp的生成PDF文件会保存对话框关闭时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!