Как отредактировать 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 файл, а также перетащить на него любой файл, который вы могли бы загрузить на свой сервер.