Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过c#net中的itextsharp使pdf文件版本兼容_C#_Asp.net_Pdf_Download_Itext - Fatal编程技术网

如何通过c#net中的itextsharp使pdf文件版本兼容

如何通过c#net中的itextsharp使pdf文件版本兼容,c#,asp.net,pdf,download,itext,C#,Asp.net,Pdf,Download,Itext,我想通过itextsharp dll(5.0.5版)创建一个可下载的pdf文件。我有四个文本框,由用户填写,点击下载pdf文件。填充文本粘贴在现有pdf文件的特定位置,并使其可下载。用户可以打开或保存该文件。我创建文件的代码是: using iTextSharp.text; using iTextSharp.text.pdf; Response.Clear(); Response.ContentType = "application/pdf";

我想通过itextsharp dll(5.0.5版)创建一个可下载的pdf文件。我有四个文本框,由用户填写,点击下载pdf文件。填充文本粘贴在现有pdf文件的特定位置,并使其可下载。用户可以打开或保存该文件。我创建文件的代码是:

using iTextSharp.text;
using iTextSharp.text.pdf;

Response.Clear();
Response.ContentType = "application/pdf";                                                                                        Response.AddHeader("Content-Disposition", "attachment;filename=Patient Refund Request " + txtPatientName.Text + ".pdf");

string sourceFile = Server.MapPath("~/Forms/Refund.pdf");
PdfReader reader = new PdfReader(sourceFile);    
iTextSharp.text.Rectangle size = reader.GetPageSizeWithRotation(1);
Document document = new Document(size);
PdfWriter writer = PdfWriter.GetInstance(document, Response.OutputStream);
document.Open();
PdfContentByte cb = writer.DirectContent;

BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.EMBEDDED);
cb.SetColorFill(BaseColor.DARK_GRAY);
cb.SetFontAndSize(bf, 12);
cb.BeginText();
cb.ShowTextAligned(0, txtDate.Text, 260, 655, 0);
cb.EndText();

cb.BeginText();
cb.ShowTextAligned(0, txtPatientName.Text, 260, 620, 0);
cb.EndText();

cb.BeginText();
cb.ShowTextAligned(0, txtPatDOB.Text, 260, 588, 0);
cb.EndText();

cb.BeginText();
ColumnText ct = new ColumnText(cb);
ct.SetSimpleColumn(new Phrase(new Chunk(txtDescription.Text, FontFactory.GetFont(FontFactory.HELVETICA, 12, Font.BOLD))), 90, 440, 550, 36, 20, Element.ALIGN_LEFT | Element.ALIGN_TOP);
ct.Go();
cb.EndText();

PdfImportedPage page = writer.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);

document.Close();
writer.Close();
reader.Close();
此代码工作正常,打开pdf文件并显示所有内容。 我的问题是,此pdf仅在adobe reader 9或更高版本中打开。它不是在较低版本(如adobe reader 6或7)中打开的。我已经在AdobeAcrobat7.0中打开了它。但它不能打开。我公司的所有用户都有adobe acrobat 6或7。

如何使此代码版本兼容,以便每个版本都可以打开此可下载文件,最低版本为6。我希望这些信息足以让你了解。请给出建议或代码


提前谢谢

iText和iTextSharp的默认版本是
PDF 1.4
,该版本应与Adobe Acrobat 5及更高版本兼容,因此我不确定为什么6和7会出现问题。但如果要更改版本,可以通过以下方式进行:

writer.PdfVersion = PdfWriter.VERSION_1_2;

我建议在创建
writer
对象后立即设置此选项。

感谢Chris的回复。我在应用程序中使用了此代码。现在它正在打开文件。但问题来了。当我在任何静态位置保存此pdf文件时,例如“C:\\”驱动器。它很容易打开,但当我动态创建它并使其在不保存任何位置(之前指定)的情况下可下载时,它会给出一个错误“打开此文档时出错。该文件已损坏,无法修复。”我只需要可下载的文件,用户可以询问该文件的保存位置。我该怎么办?我猜HTTP流中有一些额外的垃圾。确保调用
Response.End
或类似的方法来关闭流。是的,克里斯,你是对的。我忘了把response.End()放在代码的末尾。现在我的代码是工作文件,并能够下载该文件。非常感谢你。谢谢你的帮助。