C#搭建简单的http服务器,在线html转pdf应用

LocalServer

使用web链接打开本地应用 (含在线抓取网页生成pdf)

[官网地址]

[github地址:https://github.com/deriva/LocalServer]

c# html生成pdf,C#编写 HTML生成PDF的方式有几种
这里介绍一种:C#使用wkhtmltopdf,把HTML生成PDF(包含分页)
架构设计:

本地搭建一个控制台应用程序(指定端口:15080)—>

web系统 利用ajax访问本地程序:http://127.0.0.1:15080


本地搭建一个控制台应用程序过程:主要用到HttpListener 监听 核心代码如下
//服务对象

public static MyHttpServer httpServer;
static void Main(string[] args)
 {

     Console.Title = ("本地服务器");
     Console.ForegroundColor = ConsoleColor.DarkGreen;
     ToolUtils.Print("-------------------------------------------------------------------------", 0);
     ToolUtils.Print("-----------------------------    Hello World ----------------------------", 0);
     ToolUtils.Print("-------------------------------------------------------------------------", 0);
    //启动http服务
     httpServer = new MyHttpServer(routes);//初始化,传入路由
     httpServer.respNotice += dataHandle;//回调方法,接收到http请求时触发
     httpServer.Start(15080);//端口  
     Console.ReadKey();
}

web页面调用本地服务方法其实很简单:
检测web服务是否 开始:
//检测本地服务是否开启

  $.ajax({
    url: 'http://127.0.0.1:15080/Pdf/index',
    type: 'get',
    complete: function (r) {
        if (r.status == 200) {
           //开启 todo
        } else {
            layer.alert("本地服务未开启,请先开启再来导出");
        }
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        layer.alert("本地服务未开启,请先开启再来导出");
    }
  });

接下来的我们可以在自己的页面调用本地服务了 ,可以通过传要抓取的页面http地址,和下载的pdf文件名 2个参数
html代码如下:





注意:有动态生成二维码的页面 需要用到QRCodeEncoder 由服务端生成图片流

简单介绍其他方式生成pdf
jspdf

 
 
    $("#" + divID).css("background-color", "white");
               var canvas_new = document.createElement("canvas");

               var scale = 3;

               var w = parseInt(window.getComputedStyle(document.querySelector("#" + divID)).width);

               var h = parseInt(window.getComputedStyle(document.querySelector("#" + divID)).height);
               canvas_new.width = w * scale;

               canvas_new.height = h * scale;

               canvas_new.getContext("2d").scale(scale, scale);
               var options = {
                   canvas: canvas_new
               };

               html2canvas(document.querySelector("#" + divID), options).then(function (canvas) {

                   var contentWidth = canvas.width;

                   var contentHeight = canvas.height;



                   //一页pdf显示html页面生成的canvas高度;

                   var pageHeight = contentWidth / 592.28 * 841.89;

                   //未生成pdf的html页面高度

                   var leftHeight = contentHeight;

                   //页面偏移

                   var position = 0;

                   //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高

                   var imgWidth = 595.28;

                   var imgHeight = 592.28 / contentWidth * contentHeight + 45;



                   var pageData = canvas.toDataURL('image/jpeg', 1.0);

                   var pdf = new jsPDF('', 'pt', 'a4');

                   //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)

                   //当内容未超过pdf一页显示的范围,无需分页

                   if (leftHeight < pageHeight) {

                       pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight);

                   } else {

                       while (leftHeight > 0) {

                           pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)

                           leftHeight -= pageHeight;

                           position -= 841.89;

                           //避免添加空白页

                           if (leftHeight > 0) {

                               pdf.addPage();

                           }

                       }

                   }

                   pdf.save('我的.pdf');
               });
   ```
这种方式生成pdf 当页面小的时候 没有问题  当页面特别大有5,6页的时候就会有问题

 

你可能感兴趣的:(C#.Net,服务器,c#,http)