c# - 如何在浏览器中编辑pdf并将其保存到服务器

标签 c# .net asp.net pdf pdf-generation

这是要求,用户需要能够在浏览器中查看上传的 PDF。他们需要能够向 PDF 添加注释并将更新的 PDF 保存到服务器,而不必将其保存到他们的机器并在浏览器之外打开它。

欢迎任何关于如何实现这一目标的想法。

顺便说一句,我正在使用 asp.net 网站(使用 C#)。


我无法控制 pdf 的外观。它是在客户端上传的,然后其他用户需要查看并在 pdf 顶部添加注释。

我想的解决方案是将 PDF 呈现为 jpeg 并使用 javascript 绘制注释应该去的位置的坐标。

这是创建 json of note 的 html 和 javascript 的快速示例(使用 jQuery。)

    <html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <style type="text/css">
        *
        {
            margin:0;
            padding:0;
        }
        #PDF
        {
            position:absolute;
            top:0;
            bottom:0;
            width:600px;
            height:800px;
            background:url(assets/images/gray.png) repeat;
            float:left;
        }
        #results
        {
            float:right;
        }
        .comment
        {
            position:absolute;
            border:none;
            background-color:Transparent;
            height:300px;
            width:100px;
            overflow:auto;
            float:left;
            top:0;
            right:0;
            font-family: Arial;
            font-size:12px;
            
        }
        div.comment
        {
            padding-top:-20px;
        }
        .comment a.button
        {
            display:block;
            padding-top:-20px;
        }
    </style>
</head>
<body>  
    <div>
        <div id="PDF"></div>
        
        <div id="results">
            
        </div>
    </div>
</body>
</html>

<script type="text/javascript" src="script/jquery.js"></script>
<script type="text/javascript">
    var points = [];
    $("#PDF").click(function(e) {
        if ($("textarea.comment").length == 0) {
            var that = this;
            var txt = $("<textarea class='comment'></textarea>").css({ top: e.pageY, left: e.pageX }).blur(function() { $(this).remove(); }).keypress(function(e2) {
                if (e2.keyCode == 13 && !e.shiftKey) {
                    var that2 = this;
                    $("#PDF").append($("<div class='comment'>").html(that2.value.replace(/\r/gi, "<br>")).css({ top: e.pageY, left: e.pageX }));
                    $(this).remove();
                    points.push({ "x": e.pageX, "y": e.pageY, "text": that2.value })
                    $("#results").append('{ "x": ' + e.pageX + ', "y": ' + e.pageY + ', "text": "' + that2.value + '" }<br/>');
                }
            });
            $(this).append(txt);
            txt.each(function() { this.focus(); })
        }
    }); 
</script>

所以现在我需要弄清楚如何:

  1. 将 pdf 渲染为 jpeg。
  2. 重新创建 PDF,将注释放在上面。

最佳答案

您可以使用 GhostScript将 PDF 呈现为 JPEG。
命令行示例:

gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r300 -sOutputFile=output.jpg input.pdf

您需要通过命令行版本(如上所述)调用 GhostScript 或使用包装器。 谷歌搜索出现了这篇博文:

要创建新的 PDF,您有两个主要选择:

  • 修改JPEG并将JPEG转为PDF(可以使用GhsotScript进行转换)
  • 使用导入原始 PDF 并在其上添加数据的 PDF 库

对于 PDF 库,请参阅此 SO 问题:

关于c# - 如何在浏览器中编辑pdf并将其保存到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2292126/

相关文章:

c# - 如何将变量从一个应用程序域传递到另一个应用程序域

c# - ArangoDB 创建文档导致空插入

c# - 学习 Active Directory 操作的好网站

c# - 从 http 传输到 https asp.net c#

c# - 如何在 3D 三角形上的给定点 (x,z) 处找到 y?

c# - 为什么我不应该总是在 C# 中使用可空类型

c# - 从哪里开始学习 LINQ 最好?

c# - 与流程一起打印输出

ASP.NET Core 自定义模型绑定(bind)失败时的错误

c# - 模型中的 INotifyPropertyChanged