2009-10-12 11 views
5

Estoy utilizando iTextSharp (C# iText port) para crear archivos pdfs a partir de text/html. La mayor parte de mi texto está en hebreo, un idioma de derecha a izquierda.Invertir cadenas de derecha a izquierda (BiDirectional) Idiomas en iTextSharp

Mi problema es que los PDF muestran RTL langauge en reversa, así que tengo que invertir mis cadenas de una manera que solo revierte el texto RTL sin invertir ningún número o texto en inglés. Entiendo que fribidi permite hacer eso en Linux, pero no pude encontrar ninguna solución para este problema para Windows.

Me gustaría recibir cualquier sugerencia, incluida una alternativa a iTextSharp que lo haría automáticamente (si existe).

Respuesta

0

HTML muestra hebreo/árabe en modo lógico, y en PDF debe almacenarlo en modo Visual. Lo que debes hacer es convertir de modo lógico a visual. Hay algunas bibliotecas que hacen esto (google para minibidi que es licenciado BSD en mi humilde opinión, o fribidi que es GPL o LGPL).

Mi sugerencia real sería cambiar de dirección. Escribe una aplicación muy pequeña en Qt4 que toma como primer argumento la URL, y el segundo el PDF para escribir. Dado que Qt4 tiene soporte HTML (a través de QtWebKit) tiene la opción de imprimir en PDF (publicar script y SVG también), esto debería ser más sencillo que escribir su propia solución HTML-> PDF.

1

PDFCreator es una herramienta gratuita para crear archivos PDF desde casi cualquier aplicación de Windows. Se instala como un controlador de impresora de Windows, de modo que puede ser utilizado por cualquier programa de Windows que tenga una funcionalidad de impresión.

Puede tratar su entrada como cadenas de texto simples para imprimir, y quizás al usar la opción de menú printNotepad se creará el PDF correcto.

Si desea profundizar un poco más en la impresión de derecha a izquierda C#, utilice el formato de cadena StringFormatFlags.DirectionRightToLeft con Graphics.DrawString() llamadas.

Un fragmento de un PrintPage Event Handler:

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

sólo hay que poner la cadena en celda de tabla:

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

Para mostrar textos RTL utilizando iTextSharp correctamente:

  • Es necesario establezca la codificación de la fuente en BaseFont.IDENTITY_H
  • Luego debe usar elementos de contenedor que admitan RunDirection, como PdfPCell, ColumnText, etc. y ahora puede configurar su element.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
Cuestiones relacionadas