使用 IText 从流中读取 Aspose pdf

Read an Aspose pdf from stream with IText

我需要使用 ITextSharp 阅读使用 Aspose 创建的 PDF。 这是我的代码:

// instantiate Pdf object
Aspose.Pdf.Generator.Pdf pdf = new Aspose.Pdf.Generator.Pdf();
// specify the Character encoding for for HTML file
pdf.HtmlInfo.CharSet = "UTF-8";
pdf.HtmlInfo.CharsetApplyingLevelOfForce = Aspose.Pdf.Generator.HtmlInfo.CharsetApplyingForceLevel.UseWhenImpossibleDetectFromContent;

// bind the source HTML
pdf.BindHTML(htmlString);

MemoryStream stream = new MemoryStream();
pdf.Save(stream);

Form form = new Form();
form.BindPdf(stream);

var inStream = new MemoryStream(Input.TemplateFile);

var pdfConcat = new PdfConcatenate(inStream);
var pdfReader = new PdfReader(stream);

pdfReader.SelectPages(new List<int>() { 0, 1 });
pdfConcat.AddPages(pdfReader);

pdfReader.Close();
pdfConcat.Close();

调试时,我在 var pdfReader = new PdfReader(stream);

行收到以下错误

PDF header signature not found

我想做的事情: - 从 HTML 字符串创建一个 PDF 页面 - 将其附加到现有 PDF

知道如何解决这个问题吗?

你做一个

form.BindPdf(stream);

在将流提供给 iTextSharp 之前

var pdfReader = new PdfReader(stream);

前一个操作已经读取了流,PdfReader没有任何内容可读。

可能是

stream.Position = 0;

就在 PdfReader 初始化之前可以正确倒回流。


如果这不起作用(例如,如果 form.BindPdf 不仅读取流而且还对其进行操作),检索流的 byte[] 副本

byte[] bytes = stream.ToArray();

before BindPdf 调用并初始化 PdfReader

var pdfReader = new PdfReader(bytes);