PDA

View Full Version : سوال: تبدیل html فارسی به همراه جدول به فرمت pdf



nasrin55
یک شنبه 05 شهریور 1391, 09:20 صبح
سلام

من می خواستم اطلاعاتی را از پایگاه داده ام بگیرم و به فرمت pdf نشون بدم.
اطلاعات ساده ای رو که می نویسم ، به pdf تبدیل می کنه اما وقتی اطلاعات htmlیم رو می گیرم که توش جدول هم داره ، حروف فارسی رو خراب می کنه. (حروف از هم جدا میشه و چپ به راست میشه).

مشکل به خاطر وجود جدوله؟؟؟ از گرید هم استفاده نکردم، این جداول در زمان اجرا ساخته میشه. راهی هست که بشه پی دی اف این جداول رو ساخت؟

کدهایی که نوشتم ....


using System.Diagnostics;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.html;
using iTextSharp.text.html. simpleparser;
using iTextSharp.text.pdf;

namespace HtmlToPdf
{
class Program
{
static void Main(string[] args)
{
using (var pdfDoc = new Document(PageSize.A4))
{
PdfWriter.GetInstance(pdfDoc, new FileStream("Test.pdf", FileMode.Create));
pdfDoc.Open();

//روش صحيح تعريف فونت
FontFactory.Register("c:\\windows\\fonts\\tahoma.ttf");

StyleSheet styles = new StyleSheet();
styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.FONTFAMILY, "tahoma");
styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, "Identity-H");
styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.ALIGN, HtmlTags.ALIGN_LEFT);
styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.TEXTALIGN, "right");
styles.LoadTagStyle("span", "dir", "rtl");
styles.LoadTagStyle(HtmlTags.BODY , "float", "right");


// styles.LoadTagStyle(HtmlTags.BODY, HtmlTags., "right");

var html = @"<table>
<tr>
<td>
&nbsp;</td>
<td>
محمد&nbsp;</td>
</tr>
<tr>
<td>
مینا</td>
<td>
&nbsp;</td>
</tr> </table>";
var parsedHtmlElements = HTMLWorker.ParseToList(new StringReader(html), styles);

PdfPCell pdfCell = new PdfPCell { Border = 0 };
pdfCell.RunDirection = PdfWriter.RUN_DIRECTION_RTL;

foreach (var htmlElement in parsedHtmlElements)
{
pdfCell.AddElement(htmlElement);
}

var table1 = new PdfPTable(1);
table1.WidthPercentage = 100;
table1.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
table1.AddCell(pdfCell);
pdfDoc.Add(table1);
}

//open the final file with adobe reader for instance.
Process.Start("Test.pdf");
}
}
}

mRizvandi
سه شنبه 17 بهمن 1391, 14:36 عصر
می تونی از تکه کد زیر به جای اون بخش کد خودت که داری المانها رو اضافه می کنی، استفاده کنی، اینطوری هر تعداد جدول که داشته باشی، تمامی سلولهاش راست به چپ می شن و مشکل متن فارسی درست میشه:



var parsedHtmlElements = HTMLWorker.ParseToList(new StringReader(strHTML), styles);
PdfPCell pdfCell = new PdfPCell { Border = 0 };
pdfCell.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
foreach (var htmlElement in parsedHtmlElements)
{
if (htmlElement is PdfPTable)
{
var table = (PdfPTable)htmlElement;
table.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
foreach (var row in table.Rows)
{
foreach (var cell in row.GetCells())
{
if(cell!=null)
cell.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
}
}
}
pdfCell.AddElement(htmlElement);
}
var pdfTable = new PdfPTable(1);
pdfTable.AddCell(pdfCell);
pdfTable.WidthPercentage = 100;
pdfDoc.Add(pdfTable);
pdfDoc.Close();
PDFCreated = true;