Abhai Oza Ответов: 1

Экспорт HTML-файла в pdf в ASP.NET с C#


У меня есть экспорт html файла в pdf файл и у меня есть проблема с изображением,
Изображения дисплея варьироваться в большие не установлен в файл в формате PDF
pdf generate using iTextSharp

.

Используя этот код..

public void ExportToPdf(DataTable myDataTable)
{

// Фиктивные данные для счета-фактуры (счета-фактуры).
строку "название" = "ASPSnippets";
int orderNo = 2303;
DataTable dt = новый DataTable();
ДТ.Столбцы.AddRange(new DataColumn[5] {
new DataColumn ("ProductId", typeof (string)),
new DataColumn ("Product", typeof (string)),
new DataColumn ("Price", typeof(int)),
new DataColumn ("Quantity", typeof(int)),
new DataColumn ("Total", typeof(int))});
dt. Rows. Add(101, "солнцезащитные очки", 200, 5, 1000);
dt. Rows. Add(102, "джинсы", 400, 2, 800);
dt. Rows. Add(103, "брюки", 300, 3, 900);
dt. Rows. Add(104, "рубашки", 550, 2, 1100);

использование (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter hw = new HtmlTextWriter(sw))
{
Проверьте новое окно инструментов();

// Создать Заголовок Счета-Фактуры (Счета-Фактуры).
СБ.Добавить("");
СБ.Добавить("");
СБ.Добавить("");
СБ.Добавить("");
СБ.Добавить("");
СБ.Добавить("
Приказ № : ");
sb. Append(orderNo);
СБ.Добавить("
Дата: ");
СБ.Добавить(Тип Datetime.Сейчас);
СБ.Добавить("
название компании: ");
СБ.Добавить ("название");
СБ.Добавить("
");
СБ.Добавить("
");

// Создать Сетку Элементов Счета-Фактуры (Счета-Фактуры).
СБ.Добавить("");
СБ.Добавить("");
foreach (столбец DataColumn в dt.Столбцы)
{
СБ.Добавить("");
}
СБ.Добавить("");
по каждому элементу (объекта datarow Row в ДТ.Строк)
{
СБ.Добавить("");
foreach (столбец DataColumn в dt.Столбцы)
{
СБ.Добавить("");
}
СБ.Добавить("");
}
СБ.Добавить("");
СБ.Добавить("");
СБ.Добавить("
");
СБ.Добавить(колонка.Имя_столбца);
СБ.Добавить("
");
sb. Append(строка[столбец]);
СБ.Добавить("
СБ.Добавить(ДТ.Столбцы.Количество-1);
sb. Append ("">Total
");
СБ.Добавить(ДТ.Вычислить("сумма(общая)", ""));
СБ.Добавить("
");

// Экспорт HTML-строки в формате PDF.
StringReader sr = новый StringReader(sb. ToString());
Документ pdfDoc = новый документ(PageSize. A4, 10f, 10f, 10f, 0f);
HTMLWorker htmlparser = новый HTMLWorker(pdfDoc);
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.Выходной поток);
pdfDoc.Открыть();
htmlparser.Синтаксический анализ(СР);
pdfDoc.Рядом();
Ответ.ContentType = " приложение / pdf";
Ответ.AddHeader ("content-disposition", "attachment;filename=Invoice_" + orderNo +". pdf");
Ответ.Кэш.SetCacheability (HttpCacheability.NoCache);
Ответ.Запись (pdfDoc);
Ответ.Конец();
}
}
}

Спасибо...

Что я уже пробовал:

Изображение не отображается должным образом в pdf генерируйте файл с помощью iTextSharp

1 Ответов

Рейтинг:
0

Vinod Satapara

Привет,

Я предлагаю использовать еще один инструмент с открытым исходным кодом WKHTMLTOPDF. Я использовал его во многих проектах, и он отлично работает.


wkhtmltopdf


public byte[] WkHtmlToPdf(string url, string wkHtmlDir)
{
//// Получить аутентификационный файл cookie
var cookieName = FormsAuthentication.FormsCookieName;
ВАР authCookie = свойство HttpContext.Запрос.Cookies[cookieName];

const string fileName = " - ";
var wkHtmlExe = wkHtmlDir + " \\wkhtmltopdf.exe";

var p = новый процесс
{
свойство StartInfo =
{
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = истина,
RedirectStandardInput = true,
UseShellExecute = false,
Имя файла = wkHtmlExe,
WorkingDirectory = wkHtmlDir
}
};

ВАР переключается = "";
переключатели + = " --print-media-type ";
if (authCookie != null) переключает += string.Формат ("--cookie {0} {1}", authCookie.Имя, authCookie.Ценность);
переключатель (reportTypeId)
{
случай 4:
переключатели += "--маржа-топ 0мм --маржа-дно 0мм --маржа-право 0мм --левое поле 15 мм ";
перерыв;
по умолчанию:
переключатели += "--верхнее поле 20 мм --маржа-дно 10 мм-правое поле 10 мм-левое поле 10 мм ";
перерыв;
}

переключатели + = " --размер страницы A4 ";
//выключателей + = " - заголовок HTML-файла по HTTP://" + запрос.URL-адрес.Авторитет + "/Content/html/header.html ";
если (задержка)
переключатели + = " --javascript-задержка 1000";
p. StartInfo.Аргументы = переключатели + " \ ""+ url + " \ "" + имя файла;
p. начало();

// чтение вывода
var buffer = новый байт[32768];
байт [] файл;
использование (var ms = new MemoryStream())
{
в то время как (правда)
{
ВАР читать = Р.StandardOutput.BaseStream.Читать(буфера, 0, буфер.Длина);

if (read <= 0)
{
перерыв;
}
ms. Write(буфер, 0, чтение);
}
файл = ms.Метод toArray();
}

// ждать или выйти
p. WaitForExit(60000);

// прочитайте код выхода, закройте процесс
var returnCode = p. ExitCode;
p. закрыть();

var filePath = wkHtmlDir + " \\log.txt";
Файловый помощник.WriteLine(filePath, string.Формат ("Url: {0}", url));
Файловый помощник.WriteLine(filePath, string.Формат ("ReturnCode: {0}", returnCode.ToString(CultureInfo.Языка и региона существует)));
Файловый помощник.WriteLine(filePath, string.Формат ("длина файла: {0}", (file.Длина)));

return returnCode == 0 ? файл: null;

}

Надеюсь, это поможет

С уважением,
Винод
компании по разработке программного обеспечения на заказ