Domanda

Abbiamo del codice che produce un documento RTF da un modello RTF. Fondamentalmente sta facendo la ricerca di stringhe e sostituisce tag speciali all'interno del file RTF. Questo è accessibile tramite una pagina web.

In genere, il tempo di elaborazione è molto rapido.

Tuttavia, dobbiamo incorporare un'immagine all'interno di un modello. Li abbiamo incorporati come immagini JPEG usando Word " Inserisci / Immagine / Da file ... " funzionalità. Ma abbiamo scoperto che le dimensioni del file RTF risultante dipendono fortemente dall'immagine.

Ad esempio, ho inserito un logo JPEG 20k (che è fondamentalmente uno sfondo solido con del testo). Le dimensioni del file RTF sono aumentate da circa 390k (senza l'immagine) a 510k (con l'immagine).

Quindi abbiamo inserito un JPEG contenente uno screenshot, cioè l'immagine contiene testo, più colori, ecc. Il JPEG è di circa 150k. Utilizzando questa immagine, le dimensioni del file RTF sono aumentate da 390k a 3,5 MB.

Quindi la codifica che Word utilizza per archiviare immagini in un RTF non funziona in modo lineare. Immagino che dipenda da ciò che è nell'immagine JPEG.

Devo ridurre al minimo le dimensioni dei modelli RTF per cercare di ridurre al minimo i tempi di elaborazione dei file.

  • Qualcuno ha qualche idea su come ridurre al minimo le dimensioni dei file RTF con immagini incorporate?
  • Esiste un modo per controllare la codifica utilizzata da Word? Non riesco a vedere alcuna opzione da nessuna parte.
  • Qualcuno sa quale tipo di codifica binaria utilizza Word / RTF?

Grazie in anticipo.

È stato utile?

Soluzione

Un'immagine in un file RTF viene archiviata come WMF, non compressa. Su Mac, sarebbe macpict. La soluzione migliore per ridurre le dimensioni del file consiste nel collegare l'immagine al documento anziché inserire una copia nel documento. Il compromesso è che devi tenere insieme i file.

Modifica La compressione dell'RTF è un'opzione? Usando zip / rar, otterrai le dimensioni del tuo file, ma dovrai decomprimerlo, ovviamente prima. Dovrebbero esserci strumenti che faranno la compressione RTF, ma non li ho mai usati.

Altri suggerimenti

Ecco la soluzione migliore

http://support.microsoft.com/kb/224663

Estratto:

  

SINTOMI

     

Quando salvi un documento di Microsoft Word che contiene un EMF,   Grafica PNG, GIF o JPEG come formato di file diverso (ad esempio,   Word 6.0 / 95 ( .doc) o Rich Text Format ( .rtf)), la dimensione del file del   il documento può aumentare notevolmente.

     

Ad esempio, un documento di Microsoft Word 2000 che contiene un JPEG   l'immagine salvata come documento di Word 2000 può avere una dimensione del file di   45.568 byte (44,5 KB). Tuttavia, quando si salva questo file come Word 6.0 / 95   ( .doc) o come formato Rich Text ( .rtf), la dimensione del file può aumentare a   1.289.728 byte (1,22 MB).

     

CAUSA

     

Questa funzionalità è di progettazione in Microsoft Word. Se uno   EMF, un PNG, una GIF o un'immagine JPEG vengono inseriti in un documento Word,   quando il documento viene salvato, due copie del grafico vengono salvate in   documento. La grafica viene salvata in EMF, PNG, GIF o JPEG applicabili   formato e vengono anche convertiti nel formato WMF (Windows Metafile).

     

RISOLUZIONE

     

Avviso Se si utilizza   Editor del Registro di sistema in modo errato, è possibile che si verifichino gravi problemi   richiede di reinstallare il sistema operativo. Microsoft non può   garantire che è possibile risolvere i problemi derivanti dall'uso del registro   Editor errato. Utilizzare l'Editor del Registro di sistema a proprio rischio.

     

Per impedire a Word di salvare due copie della grafica nel documento,   e per ridurre la dimensione del file del documento, aggiungere il   ExportPictureWithMetafile = 0 valore stringa in Microsoft Windows   Registro di sistema.

Abbiamo fatto un progetto simile al lavoro. Solo che non lo stiamo usando " Inserisci / Immagine / Da file ... " funzionalità. Il nostro modello ha un tag chiamato [foto], come presumo anche il tuo. Quando elaboriamo il documento sostituiamo il tag con i codici RTF necessari per visualizzare le immagini. Li inseriamo in un tavolo e mostriamo due immagini su ogni riga, più una riga in alto per il titolo.

Quindi, potresti inserire un tag [foto] nel tuo modello. Quindi si sostituisce il tag con i codici RTF. Puoi trovare alcuni buoni riferimenti a questi codici sul web. Per es. qui .

Ora, il mio codice è simile al seguente:

  

\ par {\ rtf1 \ ansi \ deff0 {\ trowd \ cellx8810 { title } \ intbl \ qc \ cell \ row} {\ trowd \ cellx4405 \ cellx8810 {\ PICT \ jpegblip \ picwgoal4000 \ pichgoal3000 \ piccropl-50 \ piccropr-50 \ piccropt-50 \ piccropb-50 \ hex    La tua immagine come una matrice di byte in esadecimali } \ intbl \ cell {\ pict \ jpegblip \ picwgoal4000 \ pichgoal3000 \ piccropl-50 \ piccropr-50 \ piccropt-50 \ piccropb-50 \ hex    L'altra tua immagine } \ intbl \ cell \ row}

se ottieni l'immagine in un array di byte, puoi usare BitConverter.ToString (array) per ottenere il tuo codice esadecimale. solo dovrai sostituire i trattini " - " di " " ;;

I nostri file occuperanno meno di 1/10 dello spazio a " normale " RTF lo farà. Se apriamo il codice del documento con un editor come Notepad ++, possiamo vedere i codici RTF, ma se apriamo il documento e lo salviamo come RTF (cambiando il suo nome), passerà da 1,5 Mb a 50 Mb !! Immagino che la risposta di DaveParillo lo giustifichi: scrivo ogni immagine solo una volta.

Spero che sia d'aiuto. Saluti amico

Inizialmente, tieni presente che ogni byte è memorizzato usando 2 caratteri (due byte), questo significa che gli incrementi sono almeno la doppia dimensione dell'immagine originale.

Altre cose di cui hai bisogno è che Word e Word Pad inseriscano diversi (sapore o formato) della stessa immagine più altri campi (che RTF può essere visualizzato senza di essi).

Ecco alcuni script usati per inserire immagini in RTF ( https://joseluisbz.wordpress.com/2011/06/22/script-de-clases-rtf-para-jsp-y-php/ ) e un esempio di use ( https://joseluisbz.wordpress.com/2011/07/16/subiendo-imagenes-png-y-jpg-y-archivos-a- mysql-con-php-y-jsp-y-mostrarlos-en-rtf-usando-clases / )

Ora, forse dovrai sostituire l'immagine originale con un'altra ( http://joseluisbz.wordpress.com/2013/07/26/exploring-a-wmf-file-0x000900/ ).

La risposta di Swartbees ha funzionato perfettamente per me. Ho prima ridotto la qualità dell'immagine a "0" utilizzando G.I.M.P. Salva come funzionalità jpeg. Dopo aver seguito la soluzione di Microsoft suggerita da Swartbees sopra ho reinserito l'immagine nel file e l'aumento delle dimensioni è stato trascurabile da 229k a 279k (anziché 29000kb).

Grazie per i vostri suggerimenti ragazzi.

Sì, rimuovendo i caratteri ridondanti. E per fare questo devi reinserirli nel tuo stream. Ad esempio se hai più di venti caratteri f in una riga, puoi sostituirlo con f [20] nel tuo stream. È un inizio.

-La migliore fortuna.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top