2015-04-19 1 views
0

Im, используя TuesPechkin, чтобы закрыть Pdfs из динамического Html. Тело легко, так как оно может принимать строку HTML, заголовок & нижний колонтитул, однако, берут только Urls. Я хранили их локально atm как html, я могу привести их в документ, но без какого-либо динамического содержимого.Как добавить динамический заголовок в сгенерированный PDF-документ

Есть ли способ использовать бритву или подобное, чтобы принести значение в, как это -

var document = new HtmlToPdfDocument 
{ 
    GlobalSettings = new GlobalSettings(), 
    Objects = 
    { 
     new ObjectSettings 
     { 
      HtmlText = "<p>Some Html</p>", 
      Footer = new FooterSetting { PageUrl = "file://C:/file.cshtml?Name=name" } 
     } 
    } 
}; 

Html ищет что-то вроде

<html> 
    <p>Name: @Request["name"]</p> 
</html> 

Проект только библиотеки классов, поэтому я считаю, что это отсутствуют некоторые аспекты, необходимые для запуска бритвы?

Заранее благодарим за любой ввод.

ответ

1

Вы можете попробовать преобразовать код бритвы в строку, а затем сохранить его как файл и, наконец, экспортировать файл в PDF.

Когда-нибудь вроде этого:

Бритва в строку

public string RenderRazorViewToString(string viewName, object model) 
{ 
    ViewData.Model = model; 
    using (var sw = new StringWriter()) 
    { 
     var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); 
     var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); 
     viewResult.View.Render(viewContext, sw); 
     viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View); 
     return sw.GetStringBuilder().ToString(); 
    } 
} 

Экспорт в PDF

public void MyPDFExport() 
{ 
    string url = @"d:\Foo.html"; 
    string html = RenderRazorViewToString("File", "myName"); 
    System.IO.File.WriteAllBytes(url, System.Text.Encoding.ASCII.GetBytes(html)); 

    var document = new HtmlToPdfDocument 
    { 
     GlobalSettings = new GlobalSettings(), 
     Objects = 
     { 
      new ObjectSettings 
      { 
       HtmlText = "<p>Some Html</p>", 
       FooterSettings = new FooterSettings { HtmlUrl = url } 
      } 
     } 
    }; 
    IConverter converter = 
     new ThreadSafeConverter(
      new RemotingToolset<PdfToolset>(
       new Win32EmbeddedDeployment(
        new TempFolderDeployment()))); 

    byte[] result = converter.Convert(document); 
} 

Посмотреть File.cshtml

@model string 

<html> 
    <p>Name: @Model</p> 
</html> 
+0

привет спасибо за ответ. Мы хотели избежать сохранения чего-либо физически, кроме pdf (должно было это указать). Отправлено для настройки веб-сервера для запуска бритвы в конце – Tamzoid

+0

@Tamzoid Я думаю, вы не можете сделать это, не сохраняя html-файл (один раз визуализированный) на своем сервере. В чем проблема с сохранением его в временном файле, а затем удалить его после создания pdf-файла? –

+0

Зачем вам нужно сохранять страницу html? Я просто использую контроллер и viewbag, а затем указываю значение, которое я хочу отобразить в URL-адресе. Никакой конкретной причины, другие в моей команде, похоже, не одобряют это – Tamzoid

Смежные вопросы