2011-07-17 8 views
0

その場でHTMLファイルを生成していますが、最終ファイルからPDFを作成したいと思います。私は.Convert機能することを発見したC#で画像を含むWkHTMLToSharp/wkhtmltopdfを使用してHTMLファイルをPDFに変換する方法

public static void WritePDF(string cFile, string pdfFile) 
{ 
    WkHtmlToPdfConverter w = new WkHtmlToPdfConverter(); 

    byte[] strHTML = w.Convert(cFile); 
    File.WriteAllBytes(pdfFile, strHTML); 
    w.Dispose(); 
} 

:完了したら

public static void WriteHTML(string cFile, List<Movie> mList) 
    { 
     int lineID = 0; 
     string strHeader, strMovie, strGenre, tmpGenre = null; 

     string strPDF = null; 

     // initiates streamwriter for catalog output file 
     FileStream fs = new FileStream(cFile, FileMode.Create); 
     StreamWriter catalog = new StreamWriter(fs); 

     strHeader = "<style type=\"text/css\">\r\n" + "<!--\r\n" + "tr#odd {\r\n" + " background-color:#e2e2e2;\r\n" + " vertical-align:top;\r\n" + "}\r\n" + "\r\n" + "tr#even {\r\n" + " vertical-align:top;\r\n" + "}\r\n" + "div#title {\r\n" + " font-size:16px;\r\n" + " font-weight:bold;\r\n" + "}\r\n" + "\r\n" + "div#mpaa {\r\n" + " font-size:10px;\r\n" + "}\r\n" + "\r\n" + "div#genre {\r\n" + " font-size:12px;\r\n" + " font-style:italic;\r\n" + "}\r\n" + "\r\n" + "div#plot {\r\n" + " height: 63px;\r\n" + " font-size:12px;\r\n" + " overflow:hidden;\r\n" + "}\r\n" + "-->\r\n" + "</style>\r\n" + "\r\n" + "<html>\r\n" + " <body>\r\n" + "  <table>\r\n"; 
     catalog.WriteLine(strHeader); 
     strPDF = strHeader; 

     foreach (Movie m in mList) 
     { 
      tmpGenre = null; 

      strMovie = lineID == 0 ? "   <tr id=\"odd\" style=\"page-break-inside:avoid\">\r\n" : "   <tr id=\"even\" style=\"page-break-inside:avoid\">\r\n"; 
      catalog.WriteLine(strMovie); 
      strPDF += strMovie; 

      foreach (string genre in m.Genres) 
       tmpGenre += ", <a href=\"" + genre + ".html\" target=\"_blank\">" + genre + "</a>"; 
      strGenre = tmpGenre != null ? tmpGenre.Substring(2) : null; 

      strMovie = "    <td>\r\n" + "     <img src=\".\\images\\" + m.ImageFile + "\" width=\"75\" height=\"110\">\r\n" + "    </td>\r\n" + "    <td>\r\n" + "     <div id=\"title\">" + m.Title + "</div>\r\n" + "     <div id=\"mpaa\">" + m.Certification + " " + m.MPAA + "</div>\r\n" + "     <div id=\"genre\">" + strGenre + "</div>\r\n" + "     <div id=\"plot\">" + m.Plot + "</div>\r\n" + "    </td>\r\n" + "   </tr>\r\n"; 
      catalog.WriteLine(strMovie); 
      strPDF += strMovie; 
      lineID = lineID == 0 ? 1 : 0; 
     } 

     string closingHTML = "  </table>\r\n" + " </body>\r\n" + "</html>"; 
     catalog.WriteLine(closingHTML); 
     strPDF += closingHTML; 
     WritePDF(strPDF, cFile + ".PDF"); 
     catalog.Close(); 
    } 

が、私はPDFファイルを生成するには、次の関数を呼び出したい:私は、HTMLファイルを生成するには、次を使用していますHTMLコードをファイルではなくPDFに変換します。次に、HTMLコードを直接渡すと、画像はPDFに表示されません。私は.GIFファイルに問題があることを知っていますが、これらはすべて.JPGファイルです。

私はwkhtmltopdfの良さについて多くのことを読んできました.WkHTMLToSharpを書いた人は、あまりにも彼のプロジェクトを投稿しましたが、ドキュメントの不足によって失望しました。

変換するファイルを渡したり、余白を変更したりすることができます(これは可能ですが、正しい設定を把握する必要があります)。画像を正しく変換する必要があります。複数のページにまたがってアイテムを分割する(「ページブレークイン:回避する」など)。

他の人がこれをどのように使用しているのが大好きです。

+0

を使用して、あなたはあなたのイメージへの絶対パスを使用してみましたが?すなわち:/images/myimage.jpgの代わりに、http://www.myserver.com/images/myimage.jpgを使用しますか? –

+0

絶対パスを使用すると、私は生成したコードを自分のウェブサイトで使用することはできません。 – Dizzy49

答えて

0

使用WkHtmlToXSharpを:

は、あなたのコンバータのインスタンスでこれらのオプションを指定する必要があります。

Githubの

public static string ConvertHTMLtoPDF(string htmlFullPath, string pageSize, string orientation) 
{ 
    string pdfUrl = htmlFullPath.Replace(".html", ".pdf"); 

    try 
    { 
     #region USING WkHtmlToXSharp.dll 
     //IHtmlToPdfConverter converter = new WkHtmlToPdfConverter(); 
     IHtmlToPdfConverter converter = new MultiplexingConverter(); 

     converter.GlobalSettings.Margin.Top = "0cm"; 
     converter.GlobalSettings.Margin.Bottom = "0cm"; 
     converter.GlobalSettings.Margin.Left = "0cm"; 
     converter.GlobalSettings.Margin.Right = "0cm"; 
     converter.GlobalSettings.Orientation = (PdfOrientation)Enum.Parse(typeof(PdfOrientation), orientation); 
     if (!string.IsNullOrEmpty(pageSize)) 
      converter.GlobalSettings.Size.PageSize = (PdfPageSize)Enum.Parse(typeof(PdfPageSize), pageSize); 

     converter.ObjectSettings.Page = htmlFullPath; 
     converter.ObjectSettings.Web.EnablePlugins = true; 
     converter.ObjectSettings.Web.EnableJavascript = true; 
     converter.ObjectSettings.Web.Background = true; 
     converter.ObjectSettings.Web.LoadImages = true; 
     converter.ObjectSettings.Load.LoadErrorHandling = LoadErrorHandlingType.ignore; 

     Byte[] bufferPDF = converter.Convert(); 

     System.IO.File.WriteAllBytes(pdfUrl, bufferPDF); 

     converter.Dispose(); 

     #endregion 
    } 
    catch (Exception ex) 
    { 
     throw new Exception(ex.Message, ex); 
    } 

    return pdfUrl; 
} 
0

Spire.Pdfを使用してこれを行うことができます。

このコンポーネントは、htmlからpdfに変換できます。

PdfDocument pdfdoc = new PdfDocument(); 
pdfdoc.LoadFromHTML(fileFullName, true, true, true); 
//String url = "http://www.e-iceblue.com/"; 
//pdfdoc.LoadFromHTML(url, false, true, true); 
pdfdoc.SaveToFile("FromHTML.pdf"); 
+0

Spire.Pdfは無料であればかなりいいと思われます。 – Dizzy49

0

私たちはwkhtmltopdfも使用しており、画像を正しくレンダリングできます。ただし、デフォルトではイメージのレンダリングは無効になっています。

var wk = _GetConverter() 
wk.GlobalSettings.Margin.Top = "20mm"; 
wk.GlobalSettings.Margin.Bottom = "10mm"; 
wk.GlobalSettings.Margin.Left = "10mm"; 
wk.GlobalSettings.Margin.Right = "10mm"; 
wk.GlobalSettings.Size.PaperSize = PdfPaperSize.A4; 
wk.ObjectSettings.Web.PrintMediaType = true; 
wk.ObjectSettings.Web.LoadImages = true; 
wk.ObjectSettings.Web.EnablePlugins = false; 
wk.ObjectSettings.Web.EnableJavascript = true; 

result = wk.Convert(htmlContent); 
+0

wk.GlobalSettings.Size.PaperSize = PdfPaperSizeというプロパティがあります。 A4;は私が持っているバージョンではサポートされていません...あなたはどのバージョンを使用していますか?私のバージョンはhttps://github.com/pruiz/WkHtmlToXSharp – Haroon

1

から最新のDLLをダウンロードして、私はHTMLからPDFを作成する方法についての例をコード化しています。画像を印刷するように更新しました。

1:ファイルに//とフルパス:ファイルを使用して

https://github.com/hmadrigal/playground-dotnet/tree/master/MsDotNet.PdfGeneration

はかなりあなたは2つのオプションがあります(私のブログの記事で、私はプロジェクトhttps://hmadrigal.wordpress.com/2015/10/16/creating-pdf-reports-from-html-using-dotliquid-markup-for-templates-and-wkhtmltoxsharp-for-printing-pdf/のほとんどを説明します) 。

<img alt="profile" src="{{ employee.PorfileFileName | Prepend: "Assets\ProfileImage\" | ToLocalPath }}" /> 

2:URLデータ(https://en.wikipedia.org/wiki/Data_URI_scheme

<img alt="profile" src="data:image/png;base64,{{ employee.PorfileFileName | Prepend: "Assets\ProfileImage\" | ToLocalPath | ToBase64 }}" /> 

乾杯、 ハーブ

関連する問題