PDA

View Full Version : تعیین مکان دلخواه برای عکس های درج شده توسط ادیتور هنگام تبدیل به pdf به وسیله ITextSharp



bftarane
دوشنبه 14 بهمن 1392, 10:11 صبح
سلام.
من در دیتابیس توسط ادیتور یه متن و یه عکس درج کردم که عکس رو هم در سمت راست قرار داده بودم
ولی در pdf ای که به کمک لینک زیر ایجاد کردم
http://www.dotnettips.info/post/615/
عکسها می رن سمت چپ
می تونید در لینک زیر ببینید pdf رو
http://dentaliran.ir/newtest.aspx.pdf

من خودم فکر می کنم یه همچین چیزی باید نوشته بشه

foreach (var htmlElement in parsedHtmlElements) { if (htmlElement is PdfImage) { var Image = (PdfImage)htmlElement; ////Image. ???????????????????? how can we set direction of image here? } }
لطفاً راهنمایی کنید
اینم کدها

protected void Button1_Click(object sender, EventArgs e)
{
// Create a Document object
var document = new Document(PageSize.A4, 50, 50, 25, 25);

// Create a new PdfWriter object, specifying the output stream
//var output = new FileStream(Server.MapPath("MyFirstPDF.pdf"), FileMode.Create);
var output = new MemoryStream();
var writer = PdfWriter.GetInstance(document, output);

// Open the Document for writing
document.Open();

//... Step 3: Add elements to the document! ...




var logo = iTextSharp.text.Image.GetInstance(Server.MapPath("~/EditorImages/13911212000037PhotoA.jpg"));
//logo.SetAbsolutePosition(240, 650);

logo.Alignment = Element.ALIGN_CENTER;
document.Add(logo);


FontFactory.Register("c:\\windows\\fonts\\tahoma.ttf");


StyleSheet titlestyles = new StyleSheet();
titlestyles.LoadTagStyle(HtmlTags.BODY, HtmlTags.FONTFAMILY, "tahoma");
titlestyles.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, "Identity-H");
titlestyles.LoadTagStyle(HtmlTags.BODY, HtmlTags.ALIGN, HtmlTags.ALIGN_LEFT);

var htmlTitle = lbl_tit.Text;
var parsedHtmlElementsTitle = HTMLWorker.ParseToList(new StringReader(htmlTitle), titlestyles);



PdfPCell pdfCellTitle = new PdfPCell { Border = 0 };

pdfCellTitle.RunDirection = PdfWriter.RUN_DIRECTION_RTL;



foreach (var htmlElement in parsedHtmlElementsTitle)
{

pdfCellTitle.AddElement(htmlElement);

}
var tableTitle = new PdfPTable(1);

tableTitle.AddCell(pdfCellTitle);

document.Add(tableTitle);

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);
var html = lbl_content.Text;
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);

//}


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())
{

cell.RunDirection = PdfWriter.RUN_DIRECTION_RTL;





}

}

}



pdfCell.AddElement(htmlElement);

}


var table1 = new PdfPTable(1);

table1.AddCell(pdfCell);

document.Add(table1);
// Close the Document - this saves the document contents to the output stream
document.Close();
Response.ContentType = "application/pdf";
Response.BinaryWrite(output.ToArray());
}
وب سایت تستی هم که دارم تست رو روش انجام میدم رو هم در لینک زیر گذاشتم که راحتتر بتونید تست کنید، لطفاً بررسی کنید و راهنمایی کنید.
http://dentaliran.ir/pdfffffffffffffffff.zip

فقط در Class1 که در appcode هست مسیر دیتابیس رو تصحیح کنید.
دیتابیس هم اکسس هست و در پوشه DB قرار داره.

anubis_ir
دوشنبه 14 بهمن 1392, 11:21 صبح
اگر نظرات اون مطلب رو مطالعه مي‌كرديد، عنوان كردند كه روش HTML Worker منسوخ شده و پشتيباني نميشه. به روز شده‌اش در اينجا http://www.dotnettips.info/post/1464

bftarane
دوشنبه 14 بهمن 1392, 22:50 عصر
ممنون. من نظرات را مطالعه کرده بودم.
در هر صورت اون رو هم امتحان کردم با همون داده های پست اول ولی متنها رو به صورت نقطه نشون میده. من هیچ کار خاصی نکردم فقط اون قسمت که استاد نصیری محتوای html ای فرستاده به متغیر html، محتوای lbl_content رو گذاشتم داخل این متغیر.
حداقل با ITextSharp متنها رو درست نشون می داد.


ظاهراً افراد کمی در این مورد کار کردن.
کاش همون سایت تالار گفتگو داشت که می پرسیدم ولی متأسفانه همچین امکانی نداشت.

mf_007
سه شنبه 15 بهمن 1392, 21:33 عصر
من عکسی روکه ثابت بود توفایل پی دی اف به این صورت عمل کردم که اول کلاس دادم بهش بعد با کد زیر چپ چین راست چینشو تنظیم کردم.

styles.LoadStyle("imglogo", HtmlTags.ALIGN, HtmlTags.ALIGN_LEFT);

حالا شما مثل اینکه هر بار عکس جدید اضافه می کنید .باید بگردید و یه راهی برای کلاس دادن بهش پیدا کنید.یه راه حل که به ذهنم رسید اینه که تو کد C# به سه تا کلاس استایل چپ و راست و وسط بدید بعد موقع وارد کردن عکس ، عکس رو با کلاس مورد نظر اضافه کنید

bftarane
چهارشنبه 16 بهمن 1392, 00:04 صبح
ممنون تست می کنم و نتیجه رو اطلاع می دم.