【问题标题】:How to make version compatible of a pdf file through itextsharp in c#.net如何通过 c#.net 中的 itextsharp 使 pdf 文件的版本兼容
【发布时间】:2011-12-25 23:23:04
【问题描述】:

我想通过 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 仅在 adobe reader 9 或更高版本中打开。它在adobe reader 6或7等较低版本中无法打开。我在adobe acrobat 7.0中打开了它。但它无法打开。我公司的所有用户都有 adobe acrobat 6 或 7。

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

提前致谢。

【问题讨论】:

    标签: c# asp.net pdf download itext


    【解决方案1】:

    iText 和 iTextSharp 的默认版本是 PDF 1.4,它应该与 Adob​​e Acrobat 5 及更高版本兼容,所以我不确定您为什么会遇到 6 和 7 的问题。但如果您想更改版本可以这样:

    writer.PdfVersion = PdfWriter.VERSION_1_2;
    

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

    【讨论】:

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