2010-02-18 5 views
15

Ecco i requisiti, gli utenti devono essere in grado di visualizzare i PDF caricati nel browser. Devono essere in grado di aggiungere note al PDF e salvare il PDF aggiornato sul server senza doverlo salvare sul proprio computer e aprirlo fuori dal browser. Come modificare un pdf nel browser e salvarlo sul server

Tutte le idee su come ottenere questo risultato sono benvenute.

dal modo in cui sto lavorando con un sito Web asp.net (in C#).


non ho alcun controllo su ciò che il pdf assomiglia. Viene caricato sul lato client, quindi gli altri utenti devono visualizzare e le note sopra il pdf.

La soluzione che ho pensato è quello di rendere il PDF in formato jpeg e utilizzare javascript per tracciare le coordinate del luogo in cui la nota deve andare.

ecco un breve esempio di HTML e JavaScript che creano il JSON di 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> 

Così ora ho bisogno di capire come (utilizzando jQuery.):

  1. Renderizza un pdf in jpeg.
  2. Ricrea il PDF inserendo le annotazioni su di esso.

risposta

6

È possibile utilizzare GhostScript per rendere un PDF in JPEG.
linea di comando esempio:

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

è necessario chiamare GhostScript attraverso la versione a riga di comando (come sopra) o utilizzare un wrapper. Una ricerca su Google alzato questo post del blog:

Per la creazione di un nuovo PDF si hanno due alternative principali:

  • Modifica il JPEG e convertire il JPEG in formato PDF (è possibile utilizzare GhsotScript per la conversione)
  • Utilizzare una libreria PDF che importa il PDF originale e aggiungere i dati sopra a quello

Per le librerie PDF vedono questa domanda SO:

+0

puoi ottenere l'ultimo codice per il wrapper GhostscriptSharp Ghostscript all'indirizzo http://github.com/mephraim/ghostscriptsharp –

2

Lo facciamo utilizzando Lowagie su una piattaforma/Java primavera.

Gli utenti sono presentati con le dichiarazioni dei redditi delle vendite pre-generate e possono aggiungere alcune regolazioni manuali in alcuni campi. Quindi ricalcolo i campi dei totali in base al loro inserimento manuale e salviamo il tutto nel nostro DB.

+1

Credo che si riferisca a http://itextpdf.com/ (usato per essere chiamato lowagie). – cmptrgeekken

5

La mia azienda, Atalasoft, fornisce componenti che consentono di visualizzare le immagini dei documenti, inclusi i PDF, di annotarle e di salvare le annotazioni nel PDF. Nella nostra suite di prodotti, avresti bisogno di dotImage document imaging e del componente aggiuntivo PDF Reader. Utilizzerai dotAnnotate tramite i nostri controlli web AJAX. Ecco uno link to our online demo: il documento visualizzato è un TIFF, ma è possibile utilizzare anche un PDF.

+0

Il collegamento demo online non funziona più. È ancora disponibile da qualche parte? – Sky

+0

Non sono più in Atalasoft. Contatterei il reparto vendite o supporto per scoprire dove è andato. – plinth

3

Non credo che si sarà in grado di avere un utente caricare un PDF nel browser , modificalo, quindi salvalo sul server senza che lo salvi sul loro computer e quindi lo carichi sul server.

Quello che puoi fare è configurare un modulo web con un back-end del database che può rappresentare il pdf, e quando lo modificano puoi rigenerare il PDF usando itextsharp e caricando le informazioni dal database, in questo modo quando l'utente torna a modifica il PDF puoi prepopolare il modulo con ciò che già esiste.

itextsharp è estremamente facile da usare, ecco un esempio:

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

quindi se si voleva mostrare il PDF reale si potrebbe facilmente

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

È possibile. Guarda la mia risposta – citronas

0

Lei non ha specificato quali limiti la tecnologia che hai. Se si può prendere in considerazione una soluzione Silverlight e si dispone di computer client che supportano Silverlight, è possibile farlo facilmente.

Dai un'occhiata a come funziona Microsoft Sketchflow, consente all'utente di annotare i documenti nel browser Web e le annotazioni vengono reimpostate sul server.

Questa è una società con un commercial control per annotare PDF (e altri formati).

Microsoft lo fa nel proprio lettore Sketchflow. Ecco un video. Naturalmente non useresti sketchflow ma piuttosto implorando qualcosa di simile che soddisfi le tue esigenze.

Come bonus aggiuntivo, Silverlight 4 supporta gli Appunti e trascina e rilascia in modo che gli utenti finali possano incollare qualcosa nell'immagine PDF e trascinare qualsiasi file su di esso e quindi caricarlo sul server.

2

Se si è in grado di acquistare una libreria di terze parti, consiglierei TxTextControl.http://www.textcontrol.com/en_US/

Con questo controllo è possibile scrivere un editor, che consente di utilizzare il pdf come modello e consente all'utente di apportare modifiche e salvarle. Tutto il all'interno del del browser, senza la necessità di selezionare manualmente un file temporaneo sul computer. Acessing è praticamente come usare TextProperty di un normale TextBox.

+0

La soluzione è buona ma il costo della licenza è un problema per i piccoli progetti. –