2010-02-18 5 views
15

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

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

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


У меня нет никакого контроля над тем, что выглядит как PDF. Он загружается на стороне клиента, а другие пользователи должны просматривать и примечания поверх pdf.

Решение, которое я имел в виду, чтобы визуализировать PDF в формате JPEG и использовать JavaScript для построения координат, где нота должна идти.

вот быстрый пример HTML и JavaScript, которые создают JSON записку

<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> 

Так что теперь мне нужно, чтобы выяснить, как (с помощью JQuery.):

  1. Извлечь pdf в jpeg.
  2. Восстановите PDF, разместив аннотации на нем сверху.

ответ

6

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

+0

, вы можете получить последний код для GhostscriptSharp Ghostscript-обертки по адресу http://github.com/mephraim/ghostscriptsharp –

2

Мы делаем это с помощью lowagie на Spring платформы/Java.

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

+1

Я считаю, что он ссылается на http://itextpdf.com/ (обычно называемый lowagie). – cmptrgeekken

5

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

+0

Онлайн-демонстрационная ссылка больше не работает. Он все еще доступен где-то? – Sky

+0

Я больше не в Atalasoft. Я хотел бы связаться с отделом продаж или поддержки, чтобы узнать, куда он ушел. – plinth

2

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

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

PDFsharp: http://www.pdfsharp.net

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"); 
+0

Возможно. Посмотрите на мой ответ – citronas

0

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

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

Вот компания с commercial control, чтобы прокомментировать PDF (и другие форматы).

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

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

2

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

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

+0

Решение хорошее, но стоимость лицензирования является проблемой для небольших проектов. –

Смежные вопросы