2009-10-12 4 views
5

Utilizzo iTextSharp (porta iText di C#) per creare file PDF da testo/html. La maggior parte del mio testo è in ebraico, una lingua da destra a sinistra.Inversione di stringhe nelle lingue da destra a sinistra (BiDirectional) in iTextSharp

Il mio problema è che i PDF mostrano langauge RTL al contrario, quindi ho bisogno di invertire le mie stringhe in un modo che sarebbe solo invertire il testo RTL senza invertire qualsiasi numero o testo in inglese. È a mia conoscenza che fribidi consente di farlo su linux, ma non ho trovato nessuna soluzione per questo problema per Windows.

Sarei lieto di ricevere qualsiasi suggerimento, inclusa un'alternativa a iTextSharp che lo faccia automaticamente (se ne esiste uno).

risposta

0

HTML visualizza in ebraico/arabo in modalità logica e in PDF è necessario memorizzarlo in modalità Visual. Quello che devi fare è convertire dalla modalità logica a quella visiva. Ci sono alcune librerie che fanno questo (google per minibidi che è IMHO con licenza BSD, o fribidi che è GPL o LGPL).

Il mio vero suggerimento sarebbe quello di cambiare direzione. Scrivi una piccola applicazione in Qt4 che prende come argomento prima l'URL e il secondo il PDF da scrivere. Dal momento che Qt4 ha il supporto HTML (tramite QtWebKit) ha la possibilità di stampare su PDF (script post e SVG pure) questo dovrebbe essere più semplice quindi scrivere la propria soluzione HTML-> PDF.

1

PDFCreator è uno strumento gratuito per creare file PDF da quasi tutte le applicazioni Windows. Si installa come un driver di stampante Windows, in modo che possa essere utilizzato da qualsiasi programma Windows che abbia una funzionalità di stampa.

È possibile considerare gli input come stringhe di testo semplici da stampare e, se è possibile utilizzare l'opzione di menu print di Notepad, verrà creato il PDF corretto.

Se si desidera eseguire una immersione più approfondita nella stampa C# da destra a sinistra, utilizzare il formato di stringa StringFormatFlags.DirectionRightToLeft con le chiamate Graphics.DrawString().

Un frammento da un PrintPage Event Handler:

lineFmt = new StringFormat(StringFormatFlags.DirectionRightToLeft); 
e.Graphics.DrawString(textToPrint, font, Brushes.Black, startX, ypos, lineFmt); 
1

Basta inserire la stringa nella cella della tabella:

PdfPCell cell1 = new PdfPCell(new Phrase("מספר",font)); 
cell1.HorizontalAlignment = 2; //0=Left, 1=Centre, 2=Right 
7

Per mostrare testi RTL utilizzando iTextSharp correttamente:

  • È necessario imposta la codifica del font su BaseFont.IDENTITY_H
  • Quindi è necessario utilizzare elementi contenitore che supportano RunDirection, ad esempio PdfPCell, ColumnText, ecc. E ora è possibile impostare il valore element.RunDirection = PdfWriter.RUN_DIRECTION_RTL;