C# 使用IText从流中读取Aspose pdf

C# 使用IText从流中读取Aspose pdf,c#,pdf,itextsharp,aspose,C#,Pdf,Itextsharp,Aspose,我需要阅读一个用Aspose创建的PDF,使用ITextSharp。 这是我的密码: // 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.CharsetApplyingLevelO

我需要阅读一个用Aspose创建的PDF,使用ITextSharp。 这是我的密码:

// 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();
//实例化Pdf对象
Aspose.Pdf.Generator.Pdf Pdf=新建Aspose.Pdf.Generator.Pdf();
//指定HTML文件的字符编码
pdf.HtmlInfo.CharSet=“UTF-8”;
pdf.HtmlInfo.CharsetApplyingLevelOfForce=Aspose.pdf.Generator.HtmlInfo.CharsetApplyingForceLevel.UseWhenImableDetectFromContent;
//绑定源HTML
pdf.BindHTML(htmlString);
MemoryStream stream=新的MemoryStream();
pdf.Save(stream);
表单=新表单();
表格.pdf(stream);;
var inStream=新内存流(Input.TemplateFile);
var pdfConcat=新的Pdfconcatate(河道内);
var pdfReader=新的pdfReader(流);
SelectPages(新列表(){0,1});
pdfConcat.AddPages(pdfReader);
pdfReader.Close();
pdfConcat.Close();
调试时,我在第行
var pdfReader=new pdfReader(stream)上遇到了以下错误:

找不到PDF标头签名

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

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

你可以

form.BindPdf(stream);
在你把溪流给它之前

var pdfReader = new PdfReader(stream);
前一个操作已经读取了流,对于
PdfReader
,没有留下任何可读取的内容

可能是

stream.Position = 0;
就在
PdfReader
初始化可以正确倒带流之前


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

byte[] bytes = stream.ToArray();
BindPdf
调用并初始化
PdfReader
之前,使用以下命令:

var pdfReader = new PdfReader(bytes);
你做了一个

form.BindPdf(stream);
在你把溪流给它之前

var pdfReader = new PdfReader(stream);
前一个操作已经读取了流,对于
PdfReader
,没有留下任何可读取的内容

可能是

stream.Position = 0;
就在
PdfReader
初始化可以正确倒带流之前


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

byte[] bytes = stream.ToArray();
BindPdf
调用并初始化
PdfReader
之前,使用以下命令:

var pdfReader = new PdfReader(bytes);

我强烈建议您尝试在使用流的任何操作完成后立即获取流的原始底层字节。例如,
pdf.Save(stream)保存到空的
。伟大的调用
ToArray()
获取字节,这样您就可以毫无疑问地知道,您再次拥有这些字节,其他人无法对它们做任何事情。没有指针,“开放性”或“封闭性”。如果您的下一个对象需要一个
,您可以轻松地将字节重新包装到一个新的
内存流
,例如for
form.BindPdf(流)。这将真正帮助您进行调试。我强烈建议您在完成使用流的任何操作后,立即尝试获取流的原始底层字节。例如,
pdf.Save(stream)保存到空的
。伟大的调用
ToArray()
获取字节,这样您就可以毫无疑问地知道,您再次拥有这些字节,其他人无法对它们做任何事情。没有指针,“开放性”或“封闭性”。如果您的下一个对象需要一个
,您可以轻松地将字节重新包装到一个新的
内存流
,例如for
form.BindPdf(流)。这将真正帮助您进行调试。这将解决我的问题。但我现在有另一个。我的新页面未附加到我的PDF中。但这是另一个问题,如果需要的话,我会挖掘一点并发布另一个问题。谢谢:)从上面的陈述中,您的意思是HTML没有正确转换为PDF,因此它没有附加到现有的PDF中吗?如果是这样的话,请您分享您的源代码/输入HTML,这样我们就可以测试转换并分享我们的发现。我的名字是Nayyer,我是Aspose的开发者传道者。这解决了我的问题。但我现在有另一个。我的新页面未附加到我的PDF中。但这是另一个问题,如果需要的话,我会挖掘一点并发布另一个问题。谢谢:)从上面的陈述中,您的意思是HTML没有正确转换为PDF,因此它没有附加到现有的PDF中吗?如果是这样的话,请您分享您的源代码/输入HTML,这样我们就可以测试转换并分享我们的发现。我的名字是Nayyer,我是Aspose的开发者传道者。