Как отредактировать pdf в браузере и сохранить его на сервере - PullRequest
15 голосов
/ 18 февраля 2010

Вот требования, пользователи должны иметь возможность просматривать загруженные PDF-файлы в браузере. Они должны иметь возможность добавлять заметки в PDF-файл и сохранять обновленный PDF-файл на сервере, не сохраняя его на своем компьютере и открывая его вне браузера.

Любые идеи о том, как этого добиться, приветствуются.

кстати, я работаю с сайтом asp.net (на C #).

<ч />

Я не имею никакого контроля над тем, как выглядит 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, поместив над ним аннотации.

Ответы [ 7 ]

6 голосов
/ 26 февраля 2010

Вы можете использовать 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 см. Этот вопрос:

5 голосов
/ 22 февраля 2010

Моя компания, Atalasoft , предоставляет компоненты, которые позволяют просматривать изображения документов, включая PDF-файлы, комментировать их и сохранять аннотации обратно в PDF. В нашем наборе продуктов вам понадобится изображение документа dotImage и дополнение PDF Reader. Вы будете использовать dotAnnotate через наши веб-элементы управления AJAX. Вот ссылка на нашу онлайн-демонстрацию - документ отображается в формате TIFF, но вы также можете использовать PDF.

3 голосов
/ 24 февраля 2010

Я не думаю, что вы сможете заставить пользователя загрузить 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");
2 голосов
/ 28 февраля 2010

Если вы можете купить стороннюю библиотеку, я бы очень рекомендовал TxTextControl.http://www.textcontrol.com/en_US/

С помощью этого элемента управления вы можете написать редактор, который позволит вам использовать ваш pdf в качестве шаблона и позволяет пользователю вносить изменения и сохранять их.Все в браузере, без необходимости вручную выбирать временный файл на компьютере.Acessing во многом похож на использование TextProperty обычного TextBox.

2 голосов
/ 23 февраля 2010

Вы можете использовать PDFSharp или itextsharp для создания аннотаций. Не пробовал аннотацию PDFSharp, но iTextSharp работает. Вам придется обрабатывать редактирование на стороне сервера. возможно, скопируйте файл во временную папку, отредактируйте его и сохраните обратно.

Вы найдете itextsharp в http://itextsharp.sourceforge.net, пример аннотации: внизу страницы http://itextsharp.sourceforge.net/tutorial/ch03.html

pdfsharp: http://www.pdfsharp.net

2 голосов
/ 19 февраля 2010

Мы делаем это, используя lowagie на платформе Spring / Java.

Пользователи получают предварительно сгенерированные налоговые декларации и могут добавлять определенные корректировки вручную в нескольких полях. Затем мы пересчитываем поля итогов на основе их ручного ввода и сохраняем все это обратно в нашу БД.

0 голосов
/ 26 февраля 2010

Вы не указали какие у вас технологические ограничения. Если , вы можете рассмотреть решение Silverlight, и у вас есть клиентские компьютеры, которые поддерживают Silverlight, вы можете легко это сделать.

Посмотрите, как работает Microsoft Sketchflow, он позволяет пользователю аннотировать документы в веб-браузере, и аннотации сохраняются на сервере.

Вот компания с коммерческим контролем для аннотирования PDF (и других форматов).

Microsoft делает это в своем проигрывателе Sketchflow. Вот это видео . Конечно, вы не будете использовать sketchflow, а скорее будете реализовывать нечто подобное, отвечающее вашим потребностям.

В качестве дополнительного бонуса Silverlight 4 поддерживает буфер обмена, а также перетаскивание, чтобы конечные пользователи могли вставлять что-либо в изображение PDF, а также перетаскивать на него любой файл, который затем вы сможете загрузить на свой сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...