2010-02-18 39 views
15

Estos son los requisitos, los usuarios deben poder ver los archivos PDF cargados en el navegador. Deben poder agregar notas al PDF y guardar el PDF actualizado en el servidor sin tener que guardarlo en su equipo y abrirlo fuera del navegador. Cómo editar un pdf en el navegador y guardarlo en el servidor

Se agradecen todas las ideas sobre cómo lograr esto.

por cierto estoy trabajando con un sitio web asp.net (en C#).


que no tienen control sobre lo que el pdf se parece. Se carga desde el lado del cliente y luego otros usuarios necesitan ver y notas en la parte superior del pdf.

La solución que estaba pensando es hacer que el PDF a un archivo JPEG y utilizar javascript para trazar las coordenadas de donde la nota debe ir.

aquí es un ejemplo rápido del HTML y JavaScript que crean el JSON de la nota

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

Así que ahora tengo que encontrar la manera de (usando jQuery.):

  1. Renderiza un pdf a jpeg.
  2. Recrea el PDF colocando las anotaciones sobre él.

Respuesta

6

Usted puede utilizar GhostScript para hacer un PDF a JPEG.
Comando ejemplo de línea:

gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r300 -sOutputFile=output.jpg input.pdf 

necesita llamar GhostScript a través de la versión de línea de comandos (como el anterior) o utilizar un envoltorio. Una búsqueda en Google se presentó esta entrada del blog:

Para crear un nuevo PDF tiene dos alternativas principales:

  • modificar el JPEG y convertir el JPEG en formato PDF (puede usar GhsotScript para la conversión)
  • Utilice una biblioteca PDF que importe su PDF original y añada datos además de ese

Para las bibliotecas PDF ver esta cuestión de forma:

+0

Puede obtener el último código para el contenedor de GhostscriptSharp Ghostscript en http://github.com/mephraim/ghostscriptsharp –

2

Hacemos esto utilizando Lowagie en una plataforma/Java primavera.

Los usuarios reciben declaraciones de impuestos de venta generadas previamente y pueden agregar ciertos ajustes manuales en algunos campos. A continuación, recalculamos los campos de totales en función de su entrada manual y guardamos todo de nuevo en nuestro DB.

+1

Creo que se está refiriendo a http://itextpdf.com/ (solía llamarse lowagie). – cmptrgeekken

5

Mi empresa, Atalasoft, proporciona componentes que le permiten ver imágenes de documentos, incluidos archivos PDF, anotarlos y guardar las anotaciones en el PDF. En nuestro paquete de productos, necesitaría imágenes de documentos dotImage y el complemento PDF Reader. Estarías usando dotAnnotate a través de nuestros controles web AJAX. Aquí hay un link to our online demo - el documento que se muestra es un TIFF, pero también puede usar un PDF.

+0

El enlace de demostración en línea ya no funciona. ¿Todavía está disponible en algún lado? – Sky

+0

Ya no estoy en Atalasoft. Me pondría en contacto con el departamento de ventas o soporte para averiguar dónde se ha ido. – plinth

3

No creo que usted será capaz de tener un usuario cargar un archivo PDF en su navegador , edítelo y guárdelo en el servidor sin que lo guarden en su máquina y luego lo carguen en el servidor.

Lo que puede hacer es configurar un formulario web con un backend de base de datos que pueda representar el pdf, y cuando lo editan puede regenerar el PDF usando itextsharp y cargar la información de la base de datos, de esa manera cuando el usuario regrese edite el PDF, puede rellenar el formulario con lo que ya existe.

itextsharp es extremadamente fácil de usar, aquí es un ejemplo:

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(); 

continuación, si desea mostrar el archivo PDF real que podría fácilmente

Response.Redirect("path/to/store/pdf/filename.pdf"); 
+0

Es posible. Mire mi respuesta – citronas

0

no especificó qué limitaciones tecnología que tiene. Si puede considerar una solución Silverlight, y tiene computadoras cliente compatibles con Silverlight, puede hacerlo fácilmente.

Eche un vistazo a cómo funciona Microsoft Sketchflow, le permite al usuario anotar documentos en el navegador web y las anotaciones se conservan en el servidor.

Aquí hay una empresa con un commercial control para anotar PDF (y otros formatos).

Microsoft hace esto en su reproductor de Sketchflow. Aquí hay un video. Por supuesto, no utilizará sketchflow, sino que implementará algo similar que satisfaga sus necesidades.

Como una ventaja adicional Silverlight 4 es compatible con el portapapeles, así como arrastrar y soltar para que los usuarios finales puedan pegar algo en el archivo PDF y arrastrar cualquier archivo que luego pueda cargar en su servidor.

2

Si puede comprar una biblioteca de terceros, recomendaría TxTextControl.http://www.textcontrol.com/en_US/

Con este control puede escribir un editor, que le permite usar su pdf como plantilla y permite al usuario realizar cambios y guardarlos. Todos dentro del navegador, sin la necesidad de seleccionar manualmente un archivo temporal en la computadora. El acceso es más o menos como usar TextProperty de un TextBox normal.

+0

La solución es buena, pero el costo de la licencia es un problema para los proyectos pequeños. –

Cuestiones relacionadas