以下是要求,用户需要能够在浏览器中查看上载的PDF。他们需要能够向PDF添加注释并将更新的PDF保存到服务器,而无需将其保存到计算机并在浏览器外部打开。
关于如何实现这一点的任何想法都受到欢迎。
顺便说一句,我正在使用asp.net网站(在C#中)。
我无法控制pdf的外观。它是客户端上传的,然后其他用户需要查看并在pdf之上添加注释
我想的解决方案是将PDF渲染为jpeg并使用javascript绘制笔记应该去的位置的坐标。
这里是一个简单的html和javascript示例,用于创建note的json(使用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>
所以现在我需要弄清楚如何:
答案 0 :(得分:6)
您可以使用GhostScript将PDF呈现为JPEG 命令行示例:
gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r300 -sOutputFile=output.jpg input.pdf
您需要通过命令行版本(如上所述)调用GhostScript或使用包装器。 谷歌搜索发现了这篇博文:
要创建新的PDF,您有两个主要的选择:
对于PDF库,请参阅此SO问题:
答案 1 :(得分:5)
我的公司Atalasoft提供的组件可让您查看文档图像,包括PDF并对其进行注释,并将注释保存回PDF中。在我们的产品套件中,您需要dotImage文档成像和PDF Reader附加组件。您将通过我们的AJAX Web控件使用dotAnnotate。这是link to our online demo - 显示的文档是TIFF,但您也可以使用PDF。
答案 2 :(得分:3)
我认为您不能让用户在浏览器中加载pdf,编辑它,然后将其保存到服务器而不将它们保存到自己的计算机上,然后将其上传到服务器。
您可以做的是设置一个带有数据库后端的webform,它可以代表pdf,当他们编辑它时,您可以使用itextsharp重新生成PDF并从数据库加载信息,这样当用户返回编辑时您可以使用已存在的格式预填充表格。
itextsharp非常易于使用,这是一个例子:
string sourceFile = "path/to/pdfTemplate.pdf";
PdfReader reader = new PdfReader(sourceFile);
PdfStamper stamper = new PdfStamper(reader, new FileStream("path/to/store/pdf/filename.pdf", FileMode.Create));
AcroFields fields = stamper.AcroFields;
//now assign fields in the form to values from your form
fields.SetField("input1", input1.Text);
fields.SetField("input2", input2.Text);
//close the pdf after filling out fields
stamper.SetFullCompression();
stamper.FormFlattening = true;
stamper.Close();
然后,如果你想显示实际的PDF,你可以轻松
Response.Redirect("path/to/store/pdf/filename.pdf");
答案 3 :(得分:2)
我们在Spring / Java平台上使用lowagie执行此操作。
向用户显示预先生成的销售纳税申报表,并可在几个字段中添加某些手动调整。然后,我们根据他们的手动输入重新计算总计字段,并将整个内容保存回我们的数据库。
答案 4 :(得分:2)
您可以使用PDFSharp或itextsharp来创建注释。没有尝试过PDFSharp注释,但iTextSharp确实有效。您必须在服务器端处理编辑。可能将文件复制到临时文件夹编辑并保存回来。
你会在http://itextsharp.sourceforge.net找到itextsharp,注释示例:页面底部http://itextsharp.sourceforge.net/tutorial/ch03.html
pdfsharp:http://www.pdfsharp.net
答案 5 :(得分:2)
如果您能够购买第三方库,我会推荐TxTextControl。 http://www.textcontrol.com/en_US/
使用此控件,您可以编写一个编辑器,使您可以将pdf用作模板,并允许用户进行更改并保存。所有在浏览器中,无需在计算机上手动选择临时文件。 Acessing非常类似于使用普通TextBox的TextProperty。
答案 6 :(得分:0)
您没有说明您拥有的技术限制。 如果您可以考虑使用Silverlight解决方案,并且您拥有支持Silverlight的客户端计算机,则可以轻松执行此操作。
了解Microsoft Sketchflow的工作原理,它允许用户在Web浏览器中注释文档,并将注释持久保存回服务器。
这是一家公司,commercial control注释PDF(和其他格式)。
Microsoft在Sketchflow播放器中执行此操作。这是一个video。当然,你不会使用sketchflow,而是使用类似的东西来满足你的需求。
作为一个额外的好处,Silverlight 4支持剪贴板以及拖放,以便最终用户可以将某些内容粘贴到PDF immage上,并将任何文件拖到它上面,然后您就可以上传到服务器了。 / p>