gpt4 book ai didi

c# - 如何从流中加载 PDF 并添加文件附件?

转载 作者:行者123 更新时间:2023-11-30 22:00:52 25 4
gpt4 key购买 nike

我正在使用 MS SQL Report Server 网络服务生成 PDF 格式的报告:

byte[] Input;
ReportServer report = new ReportServer(serverUrl + @"/ReportExecution2005.asmx", reportPath);
Input = report.RenderToPDF(reportParamNames, reportParamValues);

此服务返回带有 pdf 文件的字节数组。

我需要将这个字节数组加载到 iTextSharp:

using (MemoryStream ms = new MemoryStream(Input)) {
Document doc = new Document();
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
doc.Open();
...
}

这似乎没问题,但我正在尝试向此 PDF 添加附件:

PdfFileSpecification pfs = PdfFileSpecification.FileEmbedded(writer, xmlInputFile, xmlFileDisplayName, null);
writer.AddFileAttachment(pfs);

这看起来也不错,但是当我将流保存到文件时,生成的 pdf 不正确。

请注意,文件附件始终是一个 XML 文件,我需要在内存中创建它,永远不会在文件系统中。我如何使用 iTextSharp 执行此操作?

最佳答案

我读了:

This service return a byte array with pdf file. I need this byte array load to iTextSharp:

using (MemoryStream ms = new MemoryStream(Input))
{
Document doc = new Document();
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
doc.Open();
...
}

this seems ok

OK。您想要向现有 PDF 文件添加附件,但是您使用的是 DocumentPdfWriter这些类用于从头开始创建新的 PDF 文档

请阅读documentation .有一个方便的表格 (6.1),可以让您概述不同的类以及何时使用它们。

我引用了 PdfReader 的描述和 PdfStamper类:

PdfReader: Reads PDF files. You pass an instance of this class to one of the other PDF manipulation classes.

PdfStamper: Manipulates one (and only one) PDF document. Can be used to add content at absolute positions, to add extra pages, or to fill out fields. All interactive features are preserved, except when you explicitly remove them (for instance, by flattening a form).

我们确定您做错了:您应该使用 PdfReaderPdfStamper而不是 DocumentPdfWriter .现在让我们来看看some examples :

PdfReader reader = new PdfReader(pdf_bytes);
using (var ms = new MemoryStream()) {
using (PdfStamper stamper = new PdfStamper(reader, ms)) {
PdfFileSpecification pfs = PdfFileSpecification.FileEmbedded(
stamper.Writer, xmlInputFile, xmlFileDisplayName, null);
stamper.AddFileAttachment(pfs);
}
reader.Close();
return ms.ToArray();
}

如您所见,我们创建了一个 PdfReader使用保存在内存中的字节的实例。然后我们使用 PdfStamper创建一个新的 MemoryStream我们使用其中的字节。

请看The Best iText Questions on StackOverflow获取更多答案。

关于c# - 如何从流中加载 PDF 并添加文件附件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28210389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com