2009-01-29 9 views
9

Sto costruendo un'applicazione desktop in questo momento che presenta il suo output leggibile come XHTML visualizzato in un controllo WebBrowser. Alla fine, questo output dovrà essere convertito da un file XHTML in un'immagine del documento in un sistema di imaging. A differenza dei documenti XHTML, l'immagine del documento deve essere divisa in pagine fisiche; Inoltre - e questa è la parte che mi sta uccidendo - ci devono essere intestazioni e piè di pagina su queste pagine.Quale tecnologia di generazione di immagini di pagina dovrei usare?

Per quanto mi piacerebbe, non posso semplicemente stampare il WebBrowser su un file - le opzioni di intestazione/piè di pagina che supporta non sono nemmeno abbastanza sofisticate. Quindi sto provando a cercare di capire quale sia la tecnologia giusta per generare queste immagini.

Mi sembra probabile (anche se non è obbligatorio) che quello che finirò per fare è produrre versioni PDF dei documenti HTML (in modo che io possa aggiungere intestazioni e piè di pagina) e quindi renderizzare i PDF come TIFF, che è il formato finale che il sistema di imaging vuole. Quindi, cosa sto pensando:

  • Utilizzare un tipo di software di conversione da XHTML a PDF. Il problema con questo è che senza fare molta valutazione e test non riesco a capire se i prodotti che ho visto abbiano anche la capacità di fare ciò di cui ho bisogno, ovvero prendere i documenti XHTML esistenti, decorarli con intestazioni e piè di pagina e paginarli.

  • Utilizzare XSL-FO per generare i PDF. Essere un geek XSLT di livello ninja aiuta qui (è così che sto producendo l'XHTML in primo luogo), ma sembra ancora una soluzione imbarazzante e lenta con un sacco di parti mobili. Questo significa anche che sto attaccando un grosso programma Java nel bel mezzo del mio bel sistema .NET pulito, anche se sono certamente abbastanza adulto da farlo se è la risposta giusta.

  • Utilizzare qualche altra tecnologia a cui non avevo ancora pensato, come LaTeX. Forse c'è uno strumento miracoloso per la creazione di pagine che trasforma XHTML direttamente in TIFF con intestazioni e piè di pagina. Sarebbe l'ideale.

Le mie preoccupazioni principali sono:

  • Sto costruendo un prodotto commerciale; qualunque tecnologia io usi deve essere accessibile e sostenibile. Non deve essere libero.

  • Non voglio sparire in una tana di coniglio per tre mesi sbattendo questa roba per farlo funzionare. Questo intuitivamente sembra il tipo di spazio dei problemi in cui posso perdere molto tempo solo valutando e rifiutando gli strumenti.

  • Qualsiasi soluzione io adotti deve essere relativamente immune alle modifiche di formattazione nell'XHTML. L'intera ragione per cui sto usando XSLT e producendo XHTML in primo luogo è che i documenti che sto producendo vengono assemblati dinamicamente usando regole aziendali che cambiano continuamente.

Ho passato molto tempo alla ricerca di alternative e non ho trovato nulla che sia ovviamente la risposta. Ma forse una di voi brave persone ha già risolto questo problema, e se è così, mi piacerebbe mettermi sulle vostre spalle.

+0

possibile duplicato di [programmazione ottenere screenshot della pagina] (http://stackoverflow.com/questions/1981670/programmatically-get-screenshot-of-page) – h22

risposta

5

Modifica (28/11/2010 12:30 PST) Si prega di fare +1 su questa risposta se si scarica il mio codice. Ho notato che il mio esempio Codeplex è stato scaricato centinaia di volte. Il codice non è spettacolare, ma funziona come un ottimo punto di partenza, con molti link alla guida di origine inclusi. Grazie! + tom Modifica (2009-03-29 9:00 PST), pubblicato sample conversion.
Modifica (23-03-2009, 12:30 PST, pubblicato su CodePlex) Ho sviluppato una soluzione per questo e l'ho pubblicata su CodePlex. Lo version 2.0 pubblicato viene scritto utilizzando il pattern MVVP di WPF. I file TIFF (uno per pagina) vengono generati in c: \ Temp \ XhtmlToTiff. Vengono creati anche formati XAML e XPS. Un compilato, versione installabile è disponibile presso CricketSoft.com


Hai provato il " Microsoft XPS Document Writer"? Questa è una stampante solo software che genera output di paging da una varietà di fonti, incluse le pagine web.

C'è un SDK per lavorare con documenti XPS e documenti Open XML in generale. Ecco un articolo How-to di Beth Massi: "Accessing Open XML Document Parts with the Open XML SDK".

+ tom

+0

Ho bisogno di più controllo sulla formattazione di quello che posso ottenere semplicemente reindirizzando l'output stampato di IE su un driver, sfortunatamente. Generare l'XPS sottostante sembra, per usare un eufemismo, non banale. –

+0

ah, potrei avere un po 'di aiuto per te qui. Ho deciso di programmare un esempio. Pls hold ... (e thx per il "Risposte".) –

+0

Bene, la "risposta" è stata eseguita automaticamente quando la taglia è scaduta. Non proprio ciò che intendevo, ma il sistema funziona nel modo in cui funziona. –

1

hai pensato di usare postscript?

ps: che tipo di intestazioni/piè di pagina avete bisogno - i vostri personalizzati per mettere le pagine in mezzo? se è così, poscritto o PDF è probabilmente il migliore.ma sarà molto difficile creare il convertitore xhtml + css in pdf. in pratica, è necessario disporre di una libreria in grado di analizzare sia xhtml che css (+ qualsiasi oggetto come immagini, flash ecc.)

1

PrinceXML è un convertitore XHTML/CSS in PDF. Sembra avere le caratteristiche necessarie: intestazioni

  • pagina/piè di pagina, numerazione delle pagine e la stampa fronte-retro.

mi rendo conto che probabilmente vuole risposte più ampie rispetto a questo (mi dispiace, ma non ho valutato il prodotto), ma comunque, spero che aiuta!

+0

Questo è stato sorprendentemente facile da implementare nel mio prototipo. Peccato che la licenza del server sia così costosa. –

+0

Sì, sono stato anche ripreso dai prezzi alti. Forse potresti contattare il loro ufficio vendite per vedere se puoi ottenere un accordo speciale? Sembra che funzioni a volte ... – onnodb

+0

Sì, potremmo ipoteticamente ottenere prezzi OEM. Ma anche con uno sconto del 50%, aggiungo $ 2K al prezzo del mio software (o, più realisticamente, riducendo i miei profitti di $ 2K). Sono piuttosto motivato a trovare un'altra soluzione. Sebbene tutto il resto su Prince sia perfetto. –

2

Se tiff è il vostro obiettivo, questo potrebbe essere un approccio privo di rischi e bassi:

  1. utilizza un componente per creare un'immagine per un determinato URL. Non sono sicuro quale strumento abbiamo usato per questo, ma GIYF: mi sono imbattuto in WebPreview di SmallSharpTool che sembra fare il lavoro
  2. Assicurati che possa creare un'immagine dell'intera pagina, cioè l'intera area scorrevole.
  3. Utilizzare ImageMagick per eseguire tutte le manipolazioni dell'immagine, ad esempio tagliandola in più pagine, aggiungendo intestazioni, piè di pagina e numerazione delle pagine e conversione in tiff.

Ho personalmente utilizzato le tecniche di cui sopra separatamente in progetti C# (console app e siti Web) con successo, quindi posso quasi garantire che funzionerà.

1

Tutto dipende dall'importanza della qualità per i documenti generati. È importante anche quali altre operazioni devi eseguire con il documento.

Sto costruendo un'applicazione desktop in questo momento che presenta la sua uscita leggibile come XHTML visualizzato in un controllo WebBrowser.Alla fine, questo output avrà da convertire da un file XHTML in un'immagine di un documento in un sistema di imaging.

Sembra che l'applicazione sia una specie di tipo morbido. Generare moduli compilati e salvarli.

[...] in queste pagine devono essere presenti intestazioni e piè di pagina.

Questa è la parte facile. È possibile utilizzare i modelli e unire i dati con il modello di intestazione/piè di pagina statico . Sembra che tu stia facendo VDP. Hm. Andiamo avanti.

non posso semplicemente fare la stampa del browser web in un file - l'intestazione/piè di pagina le opzioni che supporti non sono nemmeno lontanamente abbastanza sofisticato.

Perché così? Tutto ciò che serve è un driver capace.

Sembra probabile a me (anche se non è obbligatorio) che ciò che finirò per fare è producono versioni PDF dei documenti HTML

Anche in questo caso, non è chiaro il motivo per cui si vorrebbe PDF subito. PDF è un formato di interscambio di documenti . Non un PDL di per sé. PostScript è una scelta molto migliore. Sì, so che ci sono cose come XPS, PCL e cosa no. Tuttavia, la quantità di controllo di rendering e di qualità che si ottiene con PS è troppo rischiosa per una soluzione più economica. Dico meno, perché, devi anche tenere a mente il tipo di stampa che puoi usufruire. Le stampanti PostScript (non quelle con i RIP di cloni) sono generalmente più costose.

Ora, torna alla tua cosa PDF. Sì, certo che puoi generare PDF. Ha alcuni vantaggi come:

  • Migliorato il supporto per la trasparenza (e, in qualità generale)
  • archivio
  • Interchange
  • Condividilo tutto per la revisione
  • Anteprima/Verifica preliminare/Corretto
  • Sicurezza
  • Crittografia del flusso (sia per la sicurezza che per la quantità di dati trasferiti sulla stampante)
  • Utilizzare i modelli

Ma ricordate avete tutte le stampanti da fare PDF nativo strappo? Perché altrimenti sei facendo una conversione da PDF a PS/PCL con perdite. E hai appena perso la partita. Che mi riporta a PostScript;)

+0

L'interscambio e l'archiviazione sono gli argomenti più convincenti per il PDF. Non sono sicuro di quanto siano importanti il ​​controllo e la qualità del rendering: molti dei documenti che questo sistema sta sostituendo sono documenti di Word coperti da modifiche manoscritte, quindi le aspettative degli utenti sono attualmente piuttosto basse. –

+0

Significa che stai utilizzando i documenti di Word tramite l'OCR? In tal caso, il motore OCR genererà tiff per te. Oppure, è necessario generare anche i diversi piani (C, M, Y, K)? – dirkgently

+0

No, il cliente non sta attualmente analizzando i documenti di Word. Produrre PDF non è * veramente * il requisito a questo punto - la produzione di TIFF dei documenti formattati è. Quindi potrei concepibilmente usare PS. Che tipo di strumenti ho bisogno? Sono un bambino nei boschi con PS. –

3

Solo il mio 2p ma se sei un ninja XSLT suggerirei di attenermi a quello. Puoi evitare il brutto programma java guardando a nFop che è una porta C# del progetto FOP di apache. La cosa fantastica è che puoi semplicemente prendere l'assembly e utilizzare direttamente il tuo XML e XSLT per ottenere l'output PDF che desideri.

http://sourceforge.net/projects/nfop/

Speranza che aiuta.

+0

Non ho mai pensato che qualche persona intelligente avrebbe rifatto la FOP in .Net. Potrei dover fare un po 'di più in cerca di XSL-FO. So che posso farlo funzionare almeno. –

1

È possibile utilizzare PISA per Python. Utilizza il toolkit reportlab per generare un pdf da html (usando html5lib)

+0

È notevole la scarsa organizzazione della documentazione per PISA. (Come, non c'è nemmeno un collegamento ad esso sul sito PISA e non importa avere un elenco completo di dipendenze.) Ma sembra che funzioni, alla fine. –

+0

Ho trovato un esempio che mi ha permesso di attraversarlo ... Ricordo che la documentazione è un po 'avara. – jle

+0

Ho passato un'ora e mezza ieri scrivendo la procedura che i miei colleghi non tecnici avrebbero dovuto seguire per installare pisa. Ma funzionalmente è molto vicino a quello di cui ho bisogno. Vorrei che supportasse elementi fluttuanti. Un altro costo nascosto del layout senza tabella. –

1

Si potrebbe anche provare a utilizzare PDFCreator e semplicemente stampare il documento in PDF. PDFCreator si comporta come qualsiasi normale stampante e utilizza ghostscript per convertire in pdf, tiff, jpeg o qualsiasi altra cosa. Penso che puoi modificare gli elementi di intestazione e piè di pagina tramite l'interfaccia com di IE e stampare direttamente da IE. PDFCreator ha esempi per diverse lingue nella cartella com della directory di installazione. L'ho usato e posso garantire per questo. Solo per Windows però.

+0

Un'idea interessante, eccetto che IE non ti dà la possibilità di definire un DIV come il piè di pagina, che è davvero il livello di controllo della formattazione di cui ho bisogno. –

+0

Potrebbe essere possibile aggiungerlo con PDFCreator ... – jle

1

Hai davvero bisogno di usare XHTML/browser web?

Sono stato in questo esatto dilemma cercando di generare report HTML di bell'aspetto e la soluzione che ho trovato è .... rilasciare HTML e utilizzare un generatore di report "reale", ce ne sono molti là fuori, tutti supportano tutte le opzioni di impaginazione e di intestazione/piè di pagina che si possono pensare e di solito possono stampare in pdf e talvolta direttamente nelle immagini.

L'HTML non è la tecnologia giusta per i report.

+0

Non è la tecnologia giusta per i report, d'accordo. È senza dubbio la tecnologia giusta per i documenti che il mio programma produce. –

2

utilizzare qualche altra tecnologia che non ho nemmeno ancora pensato, come LaTeX.

TexML, che è la semantica LaTeX con la sintassi XML. Per utilizzare che è possibile creare XSLT, che decorare la vostra XHTML con i comandi TexML (see example)

+0

Questo è ... scoraggiante. Potrebbe essere un'ottima risposta per qualcuno che conosce LaTeX. Io no, quindi sono due colline da scalare. C'è anche questo: http://www.w3.org/2004/04/xhlt91/. –

+0

Ok, come hai detto, ho dato per scontato che tu lo sappia. ;-) Da [X] HTML a strumenti LaTeX, la maggior parte crea documenti troppo semplici, spesso anche brutti. – vartec

1

ExpertPDF HtmlToPdf Converter (www.html-to-pdf.net) dovrebbe essere in grado di fare esattamente quello che ti serve. È davvero semplice da usare, basta fare riferimento all'assemblaggio nel progetto e iniziare a usarlo. Ho usato questo prodotto con grande successo in un paio di progetti di lavoro.

+0

Ho già iniziato a valutare questo. Il grande problema con questo componente è che devi fare molta manipolazione nel codice; non è possibile (ad esempio) utilizzare il markup nel documento per fornire contenuti a intestazioni e piè di pagina. –

0

Hai menzionato che la tua app desktop corrente esporta i risultati in xhtml. Dato che xhtml è ben formato xml, dovresti usare xsl per esportarlo in pdf.

XML -> XSL-FO = PDF

Ecco una guida per principianti: http://www.devx.com/xml/Article/16430

La mia azienda ha utilizzato questa tecnica in un java + bozzolo webaplication per il governo olandese.

+0

Giusto, è per questo che l'ho elencato come una possibilità. Ho usato XSL-FO prima. Funziona, ma è lento e sgraziato. –

0

http://iecapt.sourceforge.net/

citando dall'alto sito:

IECapt è una piccola utility a riga di comando per catturare il rendering di una pagina Web di Internet Explorer in un file di immagini BMP, JPEG o PNG. La versione C++ ha anche il supporto sperimentale per l'output grafico vettoriale Enhanced Metafile. IECapt è disponibile in versione C++ e C#.

Problemi correlati