我正在C#中编写一个websercive,它将生成pdf文件并作为byte []发送回调用者。 pdf文件是使用第三方组件生成的,但我正在努力进行转换。 pdf只是Web服务中的内存中对象,在将生成的pdf返回给调用者之前,我找不到将生成的pdf转换为byte []的任何好方法。对此有何建议?
编辑澄清:
我正在使用pdf内存中对象(确切地说是Aspose.pdf Pdf-object),它是使用发送到Web服务的数据在Web服务中构建的。它永远不会被web服务保存,调用者应该将byte []转换回pdf文件并将其保存在结尾。
答案 0 :(得分:6)
如果PDF库允许保存到流,您可以将其流式传输到MemoryStream
- 您可以通过调用GetBuffer
来获取byte[]
。
答案 1 :(得分:2)
您可以将文档显然保存()到流对象:
您可以创建一个MemoryStream对象并将其发送到Save()方法以获取二进制数据。
答案 2 :(得分:1)
我记得有一段时间与Aspose.pdf做类似的事情。这是我编写的一些POC代码,它打开一个PDF页面并将其恢复。希望它有所帮助..
public ActionResult Index(int pageNumber)
{
ActionResult result = null;
var path = Server.MapPath("~/Content/BigPdf.pdf");
if (pageNumber == 0)
{
result = new FilePathResult(path, "application/pdf");
}
else
{
string inFile = path;
string outFile = ".\\ExtractStream.pdf";
//Creating stream objects holding the PDF files in Open Mode
var inStream = new FileStream(inFile, FileMode.Open);
//Creating output stream object that will store the extracted pages as a PDF file
var outputStream = new MemoryStream();
//Instantiating PdfFileEditor object
var editor = new PdfFileEditor();
//Creating an array of integers having numbers of the pages to be extracted from PDF file
var pages = new int[] { pageNumber };
//Calling Extract method
editor.Extract(inStream, pages, outputStream);
inStream.Close();
//Closing output stream
outputStream.Seek(0, SeekOrigin.Begin);//rewind stream
var converter = new PdfConverter();
converter.BindPdf(outputStream);
converter.DoConvert();
var imageStream = new MemoryStream();
while (converter.HasNextImage())
{
converter.GetNextImage(imageStream, ImageFormat.Jpeg );
}
imageStream.Seek(0, SeekOrigin.Begin);//rewind stream
result = new FileStreamResult(imageStream, "image/Jpeg");
}
return result;
}