【发布时间】:2017-02-28 23:46:28
【问题描述】:
我有一个由 iTextSharp 在 C# 中生成的 PDF - 它是一个模板 PDF,它使用压模添加一些额外的文本行,然后推送到 S3,最后作为文件流返回到浏览器(使用 mvc.net )。
当在浏览器 (Chrome) 中查看 PDF 时,新添加的行工作正常,但是当我下载 PDF 并在本地打开它(在 Mac 上使用 Preview 或 Adobe 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 功能有疑问。