Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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# iTextSharp生成的PDF可以在浏览器中工作,但下载后不能工作_C#_.net_Pdf_Itext - Fatal编程技术网

C# iTextSharp生成的PDF可以在浏览器中工作,但下载后不能工作

C# iTextSharp生成的PDF可以在浏览器中工作,但下载后不能工作,c#,.net,pdf,itext,C#,.net,Pdf,Itext,我有一个PDF,它是由iTextSharp在C#中生成的-它是一个模板PDF,使用stamper添加一些额外的文本行,然后推送到S3,最后作为文件流返回到浏览器(使用mvc.net) 在浏览器(Chrome)中查看PDF时,新添加的行可以正常工作,但当我下载PDF并在本地打开它(使用预览或Mac上的Adobe Acrobat)时,只显示模板,新添加的行就消失了 这是什么原因造成的 下面是一个代码示例:(浓缩) 这是一个时髦的 在同一个解决方案中,我有另一种方法可以毫无问题地工作。事实证明,我加载

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

在浏览器(Chrome)中查看PDF时,新添加的行可以正常工作,但当我下载PDF并在本地打开它(使用预览或Mac上的Adobe Acrobat)时,只显示模板,新添加的行就消失了

这是什么原因造成的

下面是一个代码示例:(浓缩)

这是一个时髦的

在同一个解决方案中,我有另一种方法可以毫无问题地工作。事实证明,我加载并写入内容的PDF模板就是问题所在

我使用的模板是在Adobe Illustrator中生成的。我有另一个是在AdobeInDesign中生成的,很有效

当我把这个pdf模板拉到Indesign中,然后再次(从Indesign)导出它时,它突然起作用了


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

作为流下载与本地下载是一样的。向我们展示代码,这样我们就可以看到您在做什么。@DavidG,您很可能是对的,但浏览器中的渲染引擎可能会产生不同于渲染引擎的结果,无论OP在下载后打开PDF时使用什么程序。我现在添加了代码示例。我刚刚测试了PDF。。。它在Mac上的Chrome和Firefox中看起来不错,但在Safari中查看时,我遇到了与Preview和Acrobat相同的问题。当你通过浏览器下载它时,这是通过MVC应用程序下载的吗?您是否尝试过直接从S3下载该文件并测试该文件是否正常工作。您可能对MVC功能有问题。
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;
    }
}