【问题标题】:Create a valid PDF from a web request从 Web 请求创建有效的 PDF
【发布时间】:2020-08-25 12:21:53
【问题描述】:

我正在尝试创建扫描解决方案。基本上,用户是在物理上扫描页面。打印机正在调用 API,将扫描的二进制数据传入正文中。

我正在尝试将其保存为服务器上的 PDF,但是当我打开文件时,我收到一个错误“读取流时出错”。

var bodyStream = new StreamReader(HttpContext.Current.Request.InputStream);
bodyStream.BaseStream.Seek(0, SeekOrigin.Begin);
var bodyText = bodyStream.ReadToEnd();
string pathToFiles = HttpContext.Current.Server.MapPath("~\\UploadedFiles\\WriteLines.pdf");
try
{
    using (StreamWriter outputFile = new StreamWriter(pathToFiles, false))
    {
        outputFile.WriteLine(bodyText);
    }
    
    HttpContext.Current.Response.ContentType = "application/pdf";
}

catch (Exception ex)
{
    throw (ex);
}

这只是测试一些东西,我有写入文件的权限等,它只是没有创建一个有效的文件。

对我应该使用什么有什么想法?我查看了一些库,但它们似乎没有涵盖我所追求的内容

【问题讨论】:

  • 您确定将 PDF(而不是图像)发送到您的 api 吗?
  • 是的,100% 确定它正在发送 pdf
  • 尝试一个文本文件,看看你的代码机制是否正常工作。然后,如果它有效,您就会更好地了解应该关注的地方。
  • 我知道代码的工作原理。我正在生成一个文件,当我在 notepad++ 中查看它时,我可以看到文档中的 pdf 标题,正如我所期望的那样。

标签: c# .net pdf scanning


【解决方案1】:

StreamReader.ReadToEnd 将字节转换为特定编码的字符串(默认为 UTF8)。我认为这不适用于 PDF。

您需要直接在输出文件中复制字节:

var bodyStream = HttpContext.Current.Request.InputStream;
bodyStream.Seek(0, SeekOrigin.Begin);
string pathToFiles = HttpContext.Current.Server.MapPath("~\\UploadedFiles\\WriteLines.pdf");
using (FileStream outputFile = File.Create(pathToFiles))
{
    bodyStream.CopyTo(outputFile);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2015-04-01
    • 2011-01-04
    相关资源
    最近更新 更多