我有一个由iTextSharp在C#中生成的PDF - 它是一个模板PDF,它使用压模获得一些额外的文本行,然后推送到S3并最终作为文件流返回到浏览器(使用mvc.net) .
当在浏览器(Chrome)中查看PDF时,新添加的行工作正常,但是当我下载PDF并在本地打开它(在Mac上使用预览或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;
}
}
1 回答
这是一个时髦的!
我在同一个解决方案中有另一种方法可以正常工作 . 事实证明,我加载和写入我的内容的模板PDF是问题所在 .
我使用的模板是在Adobe Illustrator中生成的 . 我有另一个在Adobe Indesign中生成的 - 它起作用了 .
当我将这个模板pdf拉入Indesign,然后再次导出它(来自Indesign)时,它突然起作用了 .
我不确定究竟是什么导致了这个问题,但它必须是某种编码 .