如何在c#.net中通过itextsharp实现pdf文件的版本兼容

本文关键字:文件 pdf 实现 版本 itextsharp net | 更新日期: 2023-09-27 18:13:56

我想通过itextsharp dll (ver 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只能在adobereader 9或更高版本中打开。在较低版本(如adobereader 6或7)中无法打开。我已在adobeacrobat7.0中打开它。但它不能打开。我公司的所有用户都有adobeacrobat6或7。

我怎样才能使这个代码版本兼容,这个可下载的文件可以打开每个版本的最低版本6。我希望这些信息足以让你了解。请给总建议或代码。

提前感谢。

如何在c#.net中通过itextsharp实现pdf文件的版本兼容

iText和iTextSharp的默认版本是PDF 1.4,应该与Adobe acrobat5及更高版本兼容,所以我不确定为什么您在6和7中遇到问题。但是如果你想更改版本,你可以这样做:

writer.PdfVersion = PdfWriter.VERSION_1_2;

我建议在创建writer对象后立即设置它。