Как отредактировать PDF в браузере и сохранить его на сервере
Вот требования, пользователи должны иметь возможность просматривать загруженные PDF файлы в браузере. Они должны иметь возможность добавлять заметки в PDF файл и сохранять обновленный PDF файл на сервер без необходимости сохранять его на своем компьютере и открывать его за пределами браузера.
Любые идеи о том, как добиться этого, приветствуются.
, кстати, я работаю с веб-сайтом asp.net(на С#).
Я не могу контролировать то, что выглядит в формате pdf. Он загружается на стороне клиента, а затем другим пользователям нужно просматривать и примечания поверх pdf.
Решение, о котором я думал, состоит в том, чтобы сделать PDF в формате jpeg и использовать javascript для построения координат того, куда должна идти заметка.
вот краткий пример html и javascript, которые создают 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>
Итак, теперь мне нужно выяснить, как:
Извлеките PDF в jpeg.
Восстановите PDF, разместив аннотации поверх него.
Ответы
Ответ 1
Вы можете использовать GhostScript для рендеринга PDF в JPEG.
Пример командной строки:
gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r300 -sOutputFile=output.jpg input.pdf
Вам нужно вызвать GhostScript через версию командной строки (как указано выше) или использовать обертку.
В этом сообщении в блоге появилась поисковая система Google:
Для создания нового PDF вы имеете две основные альтернативы:
- Измените JPEG и конвертируйте JPEG в PDF (вы можете использовать GhsotScript для преобразования)
- Используйте библиотеку PDF, которая импортирует ваш оригинальный PDF файл и добавляет данные поверх этого
Для библиотек PDF см. этот вопрос SO:
Ответ 2
Моя компания Atalasoft предоставляет компоненты, которые позволяют просматривать изображения документов, в том числе PDF файлы, и аннотировать их и сохранять аннотации обратно в PDF. В нашем пакете продуктов вам потребуется документация с документами dotImage и надстройкой PDF Reader. Вы используете dotAnnotate через наши веб-элементы управления AJAX. Ниже приведена ссылка на нашу онлайн-демонстрацию - отображаемый документ является TIFF, но вы также можете использовать PDF.
Ответ 3
Я не думаю, что вы сможете загрузить файл PDF в своем браузере, отредактировать его, а затем сохранить на сервере, не сохраняя его на своем компьютере, а затем загрузив его на сервер.
Что вы можете сделать, это настроить веб-форму с базой данных базы данных, которая может представлять PDF, и когда они ее редактируют, вы можете регенерировать 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");
Ответ 4
Мы делаем это с помощью lowagie на платформе Spring/Java.
Пользователям предоставляются предварительно сформированные налоговые декларации о продажах и могут добавлять определенные ручные настройки в нескольких полях. Затем мы перекомпилируем полные поля на основе их ввода вручную и сохраним все это в нашей БД.
Ответ 5
Вы можете использовать PDFSharp или itextsharp для создания аннотаций. Не пробовал аннотацию PDFSharp, но iTextSharp действительно работает. Вам придется обрабатывать редактирование на стороне сервера. вероятно, скопируйте файл в временную папку, отредактируйте его и сохраните.
Вы найдете itextsharp в http://itextsharp.sourceforge.net, пример аннотации: внизу на странице http://itextsharp.sourceforge.net/tutorial/ch03.html
pdfsharp: http://www.pdfsharp.net
Ответ 6
Если вы можете купить стороннюю библиотеку, я бы очень рекомендовал TxTextControl. http://www.textcontrol.com/en_US/
С помощью этого элемента управления вы можете написать редактор, который позволяет использовать ваш pdf файл в качестве шаблона и позволяет пользователю вносить изменения и сохранять их. Все внутри браузера, без необходимости вручную выбирать временный файл на компьютере. Признание в значительной степени похоже на использование TextProperty обычного TextBox.
Ответ 7
Вы не указали, какие технологические ограничения у вас есть. Если вы можете рассмотреть решение Silverlight, и у вас есть клиентские компьютеры, поддерживающие Silverlight, вы можете легко это сделать.
Посмотрите, как работает Microsoft Sketchflow, он позволяет пользователю аннотировать документы в веб-браузере, а аннотации сохраняются на сервере.
Вот компания с коммерческий контроль для аннотирования PDF (и других форматов).
Microsoft делает это в своем проигрывателе Sketchflow. Вот видео . Конечно, вы бы не использовали sketchflow, а скорее использовали что-то подобное, соответствующее вашим потребностям.
В качестве дополнительного бонуса Silverlight 4 поддерживает буфер обмена, а также перетаскивание, чтобы конечные пользователи могли вставить что-то в PDF файл, а также перетащить на него любой файл, который вы могли бы загрузить на свой сервер.