使用IText从流中读取Aspose pdf

时间:2016-01-07 16:18:02

标签: c# pdf itextsharp aspose

我需要使用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标题签名

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

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

1 个答案:

答案 0 :(得分:3)

你做了

form.BindPdf(stream);
在将流提供给iTextSharp之前

var pdfReader = new PdfReader(stream);

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

可能是

stream.Position = 0;
PdfReader初始化之前

可以正确地回流流。

如果这不起作用(例如,如果form.BindPdf不只是读取流而是操纵它),请检索流的byte[]副本

byte[] bytes = stream.ToArray();
BindPdf电话之前

并使用以下内容初始化PdfReader

var pdfReader = new PdfReader(bytes);