[點晴永久免費OA]C#將頁面生成pdf文件(CSS樣式不缺失)
將html文本或者html網(wǎng)頁生成pdf,我常用的2種方式:TuesPechkin 或 wkhtmltopdf。 一、使用TuesPechkin轉(zhuǎn)pdf 首先引用TuesPechkin.dll,我使用的是1.0.3,也可以使用最新穩(wěn)定版 /// <summary>
/// 將網(wǎng)頁轉(zhuǎn)為pdf文件
/// </summary>
/// <param name="filePath">文件路徑/目錄</param>
/// <param name="fileName">文件名</param>
/// <param name="url">網(wǎng)頁url</param>
public bool ConvertWebpageToPDF(string filePath, string fileName, string url)
{
if (Directory.Exists(filePath) == false)
Directory.createDirectory(filePath);
try
{
HtmlToPdfDocument htmlToPdfDocument = new HtmlToPdfDocument();
GlobalSettings globalSettings = new GlobalSettings();
globalSettings.ProduceOutline = new bool?(true);
//html網(wǎng)頁內(nèi)容的寬高
double width = 100; double.TryParse(txt_width.Text, out width);
double height = 120; double.TryParse(txt_height.Text, out height);
//設(shè)置pdf寬高
double proportion = 1.26;
width /= proportion;
height = Math.Floor(height / proportion);
string Width = width.ToString(); string Height = height.ToString();
globalSettings.PaperSize = new PechkinPaperSize(Width, Height);
//設(shè)置pdf文檔四周空白邊距
globalSettings.Margins.Top = 0;
globalSettings.Margins.Right = 0;
globalSettings.Margins.Bottom = 0;
globalSettings.Margins.Left = 0;
globalSettings.Margins.Unit = Unit.Centimeters;
string pageUrl = url;
ObjectSettings objectSettings = new ObjectSettings();
double value = 1;
objectSettings.HtmlText = string.Empty;
objectSettings.PageUrl = pageUrl;
objectSettings.LoadSettings.BlockLocalFileAccess = true;
objectSettings.LoadSettings.ZoomFactor = new double?(value);
objectSettings.WebSettings.PrintMediaType = new bool?(true);
objectSettings.WebSettings.PrintBackground = new bool?(false);
htmlToPdfDocument.GlobalSettings = globalSettings;
htmlToPdfDocument.Objects.Add(objectSettings);
IPechkin pechkin = Factory.create();
byte[] array = pechkin.Convert(htmlToPdfDocument);
string path = string.Empty;
if (array == null)
{
return false;
}
path = Path.Combine(filePath, fileName);
using (FileStream fileStream = new FileStream(path, FileMode.create))
{
fileStream.Write(array, 0, array.Length);
fileStream.Flush();
fileStream.Close();
FileStream fs = new FileStream(path, FileMode.Open);
byte[] file = new byte[fs.Length];
fs.Read(file, 0, file.Length);
fs.Close();
return true;
}
}
catch (Exception ex)
{
return false;
}
} 二、使用wkhtmltopdf轉(zhuǎn)pdf wkhtmltopdf是一個插件,首先要下載https://wkhtmltopdf.org/downloads.html 下載后有使用說明:需要使用cmd安裝到本地目錄 public void wkhtmltopdf(string filePath, string fileName, string url)
{
Process p = new Process();
//wkhtmltopdf插件安裝的地址
string dllstr = AppDomain.CurrentDomain.BaseDirectory + "wkhtmltopdf\\wkhtmltopdf.exe";
//string dllstr = "C:\\Windows\\System32\\wkhtmltopdf.exe";
if (System.IO.File.Exists(dllstr))
{
string savepath = Path.Combine(filePath, fileName);
p.StartInfo.FileName = dllstr;
StringBuilder paramsBuilder = new StringBuilder();
paramsBuilder.Append("--page-width " + txt_width.Text + "mm ");
paramsBuilder.Append("--zoom 1.2 ");
paramsBuilder.Append("--disable-smart-shrinking ");
paramsBuilder.Append("--page-height " + txt_height.Text + "mm ");
paramsBuilder.Append("--margin-bottom 0mm ");
paramsBuilder.Append("--margin-left 0mm ");
paramsBuilder.Append("--margin-right 0mm ");
paramsBuilder.Append("--margin-top 0mm ");
paramsBuilder.AppendFormat("\"{0}\" \"{1}\"", url, savepath);
p.StartInfo.Arguments = paramsBuilder.ToString();
//p.StartInfo.Arguments = " \"" + url + "\" \"" + savepath + "\"";
p.StartInfo.UseShellexecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.createNoWindow = true;
p.Start();
p.WaitForExit();
}
} 備注: 以上2種方法生成pdf效果都非常好,css也能完美支持。 都是通過請求網(wǎng)頁url,將整個網(wǎng)頁生成pdf。 該文章在 2022/12/22 16:18:33 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |