【问题标题】:iTextSharp generated PDF works in browser but not after downloadiTextSharp 生成的 PDF 在浏览器中有效,但下载后无效
【发布时间】:2017-02-28 23:46:28
【问题描述】:

我有一个由 iTextSharp 在 C# 中生成的 PDF - 它是一个模板 PDF,它使用压模添加一些额外的文本行,然后推送到 S3,最后作为文件流返回到浏览器(使用 mvc.net )。

当在浏览器 (Chrome) 中查看 PDF 时,新添加的行工作正常,但是当我下载 PDF 并在本地打开它(在 Mac 上使用 Preview 或 Adob​​e Acrobat)时,只显示模板,并且新添加的添加的行不见了。

这是什么原因造成的?

这是一个代码示例:(精简)

using(var receiptTemplateStream =    GetType().Assembly.GetManifestResourceStream("XXXXX.DepositReceipts.Receipt.pdf"    ))
{
    var reader = new PdfReader(receiptTemplateStream);

    var outputPdfStream = new MemoryStream();
    var stamper = new PdfStamper(reader, outputPdfStream) { FormFlattening = true, FreeTextFlattening = true };
    var _pbover = stamper.GetOverContent(1);



    using (var latoLightStream = GetType().Assembly.GetManifestResourceStream("XXXXX.DepositReceipts.Fonts.Lato-Light.ttf"))
    using (var latoLightMS = new MemoryStream())
    {

        _pbover.SetFontAndSize(latoLight, 11.0f);
        var verticalPosition = 650;

        _pbover.ShowTextAligned(0, account.company_name, 45, verticalPosition, 0);
        verticalPosition = verticalPosition - 15;


        var filename = "Receipt 0001.pdf";

        stamper.SetFullCompression();
        stamper.Close();

        var file = outputPdfStream.ToArray();
        using (var output = new MemoryStream())
        {
            output.Write(file, 0, file.Length);
            output.Position = 0;

            var response = await _s3Client.PutObjectAsync(new PutObjectRequest()
            {
                InputStream = output,
                BucketName = "XXXX",
                CannedACL = S3CannedACL.Private,
                Key = filename
            });
        }

        return filename;
    }
}

【问题讨论】:

  • 流式下载与本地下载是一回事。向我们展示代码,以便我们了解您在做什么。
  • @DavidG,您很可能是对的,但浏览器内渲染引擎可能会产生与渲染引擎不同的结果,无论 OP 使用什么程序在下载后打开 PDF。
  • 我现在已经添加了代码示例。
  • 我刚刚测试了 PDF...在 Mac 上的 Chrome 和 Firefox 中看起来不错,但是在 Safari 中查看时,我遇到了与 Preview 和 Acrobat 相同的问题。
  • 当您通过浏览器下载时,是通过 MVC 应用程序下载的吗?您是否尝试过直接从 S3 下载文件并测试文件是否有效。您可能对 MVC 功能有疑问。

标签: c# .net pdf itext


【解决方案1】:

这是一个时髦的!

我在同一个解决方案中使用了另一种方法,没有问题。事实证明,我加载和写入内容的模板 PDF 是问题所在。

我使用的模板是在 Adob​​e Illustrator 中生成的。我有另一个是在 Adob​​e Indesign 中生成的——它有效。

当我将此模板 pdf 提取到 Indesign 中,然后再次(从 Indesign)导出时,它突然起作用了。

我不确定到底是什么导致了这个问题,但它一定是某种编码。

【讨论】:

    猜你喜欢
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    相关资源
    最近更新 更多