使用iTextSharp将附件添加到现有PDF文件

时间:2014-10-16 19:09:59

标签: c# itextsharp itext

我有一个PDF文件的流,并希望在PDF中添加Excel或文本文件附件。 以下代码完成了这项工作,但它基本上将现有的PDF页面复制到一个新的并添加了附件。我必须逐页复制,因为PdfWriter无法从PdfReader打开现有的PDF说。有没有更好的方法呢?我也玩过PdfStamper,但看起来无论你需要PdfWriter来附加文件。

代码是来自ASP.Net MVC app的Action方法。

[HttpPost]
    public ActionResult Index(HttpPostedFileBase file)
    {
        string s = System.Web.HttpContext.Current.Server.MapPath(@"~/temp/");

        PdfReader reader = new PdfReader(file.InputStream);
        Document document = new Document();
        MemoryStream ms = new MemoryStream();

        PdfWriter writer = PdfWriter.GetInstance(document, ms);
        document.Open();
        document.AddDocListener(writer);

        for (int i = 1; i <= reader.NumberOfPages; i++)
        {
            document.SetPageSize(reader.GetPageSize(i));
            document.NewPage();
            PdfContentByte cb = writer.DirectContent;
            PdfImportedPage page = writer.GetImportedPage(reader, i);
            int rotation = reader.GetPageRotation(i);
            if (rotation == 90 || rotation == 270)
                cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height);
            else
                cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0);
        }

        PdfFileSpecification pfs = PdfFileSpecification.FileEmbedded(writer, s + "test.xlsx", "test.xlsx", null);
        writer.AddFileAttachment(pfs);

        document.Close();

        return File(ms.ToArray(), "application/pdf", "test.pdf");
    }

1 个答案:

答案 0 :(得分:0)

有许多基于官方iText网站iText book的Java示例。这些示例也可以在SVN存储库中的C#中获得。这些示例的缩写链接格式如下:http://tinyurl.com/itextsharpIIA2C07

在这种情况下,07指向第7章中的示例。如果您需要第8章,请将08替换为08。

第7章是您需要了解如何使用PdfStamper添加注释的章节。您确实需要一个PdfWriter实例,并且在将Java示例与其C#端口进行比较时,您会发现stamper.getWriter()的C#反对部分是stamper.Writer