当前位置: 首页 > 编程日记 > 正文

html实现pdf预览打印机,Pdf操作(HTML转PDF,PDF直接网页连接打印机)

Pdf导出的操作:引用TuesPechkin.dll和TuesPechkin.Wkhtmltox.AnyCPU.dll程序集,新建PDF静态类 PDFConverter,在web.config配置保存dir

///

///pdf转换///

public static classPdfConvert {///

///staticDeploymentPath///

private static readonly string StaticDeploymentPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wkhtmltopdf");///

///CreateWkhtmltopdfPath///

public static voidCreateWkhtmltopdfPath() {if (Directory.Exists(StaticDeploymentPath) == false) {

Directory.CreateDirectory(StaticDeploymentPath);

}

}///

///converter///

public static IConverter Converter =

newThreadSafeConverter(new RemotingToolset(newWinAnyCPUEmbeddedDeployment(newStaticDeployment(StaticDeploymentPath)

)

)

);

}

publicHttpResponseMessage CreateFormPdf(WebTaskFormDetail wtData) {try{string fileName = AesCode.AesDecrypt(wtData.TaskId) + "_" +wtData.FormId;var baseUrl =GetBaseUrl();string url = baseUrl +UrlFormTemplate;

HttpClient client= newHttpClient();var template =client.GetStringAsync(url).Result;string page = "form.html";

url= baseUrl + UrlFormContentDir +page;var content =client.GetStringAsync(url).Result;var json = JsonConvert.SerializeObject(wtData).Replace(@"\", @"\\");string html = template.Replace("[[content]]", content).Replace("[[json]]", json);string path = HttpContext.Current.Request.PhysicalApplicationPath + ZxjcAttachmentDir + @"html\";if (!Directory.Exists(path)) {

Directory.CreateDirectory(path);

}

StreamWriter sw= new StreamWriter(path + fileName + ".html", false, Encoding.UTF8);

sw.Write(html);

sw.Close();

path= ZxjcAttachmentDir + @"pdf\";if (!Directory.Exists(Path.Combine(PhysicalApplicationPath(), path))) {

Directory.CreateDirectory(Path.Combine(PhysicalApplicationPath(), path));

}var savePath = path + fileName + ".pdf";byte[] pdfBuf = null;

CreatePdf(Path.Combine(PhysicalApplicationPath(), savePath), fileName,refpdfBuf);var downloadUrl = new Uri(baseUrl + ZxjcAttachmentDir.Replace(@"\", "/") + "pdf/" + fileName + ".pdf");//关联任务附件

var attachmentInfo = newAttachmentInfo {

AttachmentName= wtData.FormName + ".pdf",

Path=savePath,

Url=downloadUrl.ToString(),

Description=wtData.Description

};

SaveAttachment(attachmentInfo,Convert.ToInt32(AesCode.AesDecrypt(wtData.TaskId)));

HttpResponseMessage response= new HttpResponseMessage { Content = new StreamContent(newMemoryStream(pdfBuf)) };

response.Content.Headers.ContentDisposition= new ContentDispositionHeaderValue("attachment");

response.Content.Headers.ContentLocation=downloadUrl;

response.Content.Headers.ContentType= new MediaTypeHeaderValue("application/pdf");returnresponse;

}catch(Exception ex) {throw;

}

}private void CreatePdf(string path, string fileName, ref byte[] pdfBuf) {var document = newHtmlToPdfDocument {

GlobalSettings={

ProduceOutline= true,

DocumentTitle= "web 表单",

PaperSize=PaperKind.A4,

Margins={All = 1.375,Unit =Unit.Centimeters}//Margins = new MarginSettings(50,50,50,50)

},

Objects={new ObjectSettings { PageUrl = this.GetBaseUrl() + ZxjcAttachmentDir.Replace(@"\", "/") + "html/" + fileName + ".html"}

}

};

pdfBuf=PdfConvert.Converter.Convert(document);

File.WriteAllBytes(path, pdfBuf);

}private static stringPhysicalApplicationPath() {returnHttpContext.Current.Request.PhysicalApplicationPath;

}

直接在浏览器链接打印机打印

private void CreatePdf(string path, string fileName, ref byte[] pdfBuf) {

var pageUrl = this.GetBaseUrl() + ZxjcAttachmentDir.Replace(@"\", "/") + "html/" + fileName + ".html";

var document = new HtmlToPdfDocument {

GlobalSettings ={

ProduceOutline = true,

Copies=1,

DPI = 1200,

DocumentTitle = "web 表单",

PaperSize = PaperKind.A4,

Orientation = GlobalSettings.PaperOrientation.Portrait,

OutputFormat = GlobalSettings.DocumentOutputFormat.PDF,

Margins ={All = 1.375,Unit = Unit.Centimeters}

//Margins = new MarginSettings(50,50,50,50)

},

Objects = {

new ObjectSettings {

PageUrl = pageUrl,

//HtmlText = docHtml,

WebSettings = new WebSettings {

DefaultEncoding = "utf-8",

LoadImages =true,

PrintBackground =true,

EnableJavascript =true ,

PrintMediaType =true,

EnablePlugins = true

},

//LoadSettings =new LoadSettings {

// BlockLocalFileAccess = false,

// RenderDelay=5000,

//}

}

}

};

pdfBuf = PdfConvert.Converter.Convert(document);

File.WriteAllBytes(path, pdfBuf);

}

相关文章:

CUDA编程遇到的问题

1、总喜欢在core 代码中,访问device memory。 然后排错很久!!!!! 2、第一次cudaMalloc() 耗时很久 3、cudaMalloc对于大数据也耗时很久 4、一致内存使用错误,不知道为什么!&#xff…

2022-2028年中国数字化档案加工行业市场深度分析及发展策略分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国数字化档案加工行业市场行业相关概述、中国数字化档案加工行业市场行业运行环境、分析了中…

eclipse打开处于无响应状态解决办法

eclipse打开后处于无响应状态,变没有了反映,并且cup占用率为0。应该是非正常关机导致eclipse工作区的文件状态错误导致。 解决方案:在工作区目录中,有一个.metadata目录,里面是工作区及各插件的信息,删除此…

Unity创建在线多人游戏视频教程

Unity创建在线多人游戏视频教程 Learn To Create An Online Multiplayer Game In Unity 学会在Unity中创建在线多人游戏 MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更…

《需求分析》读后感之二

项目的目标是系统的业务需求。在很多情况下,涉众可以清晰地表达出系统的业务需求,这时可以通过安排和涉众的面谈来明确项目的动机。但也有很多情况下,涉众无法表达他们的业务需求,或者表达的业务需求不够清晰。因此,要…

统计学 计算机论文,统计学专业论文范文

1实验教学软件选择 目前流行的统计软件有SAS、SPSS、Statistica、EViews、Excel等,但上述软件的特点和功能优势各不相同,所以要根据学生的专业特点和教学要求选用不同的统计软件或者软件组合。但是由于专业统计软...2019-09-061非统计专业统计学教学过程…

JVM年轻代,老年代,永久代详解​​​​​​​

秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录&…

html中#include file的使用方法

有两个文件a.htm和b.htm&#xff0c;在同一文件夹下a.htm内容例如以下 <!-- #include file"b.htm" --> b.htm内容例如以下 今天&#xff1a;雨 31 ℃&#xff5e;26 ℃ <br />明天&#xff1a;雷阵雨 33 ℃&#xff5e;27 ℃ 直接在浏览器中打开a&#…

Linux服务之Samba服务篇

Samba服务 桑巴Smb是基于cs架构 作用&#xff1a;用于跨平台进行文件共享 优点&#xff1a;兼容性好&#xff0c;较为安全(具备身份验证&#xff09; 缺点&#xff1a;仅限内网环境使用 应用&#xff1a;一般在办公环境下使用 rz 也是一种可以在Windows和Linux操作系统之间进行…

ue4商城素材 Cyberpunk City / Recife Environment 赛博朋克城市场景

ue4商城素材 Cyberpunk City / Recife Environment 赛博朋克城市场景 ue4商城素材 Cyberpunk City / Recife Environment 赛博朋克城市场景 ue4商城素材 Cyberpunk City / Recife Environment 赛博朋克城市场景 Unreal Engine虚幻游戏引擎素材资源 Unreal Engine Marketplace …

微型计算机系统外文,微型计算机控系统(单片机控制系统) 毕业论文外文翻译.doc...

微型计算机控系统(单片机控制系统) 毕业论文外文翻译英语翻译Microcontroller reset is to make the CPU and other system features are in a defined initial state, and from this state to work, reset PC 0000H, the microcontroller from the first - a unit to take co…

应用于cookie

将封装好的cookie函数 使用好cookie JavaScript代码 var aAdocument.getElementsByTagName(a); //使用var indexgetCookie(page_index);if(index){tab(index);}for(var i0; i<aA.length; i){(function(index){aA[i].onclickfunction(){tab(index); //设置一个cookiese…

2022-2028年中国数字电视产业投资分析及前景预测报告(全卷)

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国数字电视行业市场行业相关概述、中国数字电视行业市场行业运行环境、分析了中国数字电视行…

分形之闵可夫斯基(Minkowski)

与上一篇文章分形之正方形折线相似&#xff0c;闵可夫斯基分形也是分形出正方体&#xff0c;不同之处是它分出了两个正方体。 核心代码: static void FractalMinkowski(const Vector3& vStart, const Vector3& vEnd, Vector3* pVertices) {Vector3 vSub vEnd - vStart…

文本框禁用后(readonly=readonly),光标置于文本框中按后退键,页面后退的解决方案...

//处理键盘事件 禁止后退键&#xff08;Backspace&#xff09;密码或单行、多行文本框除外function forbidBackSpace(e){var ev e || window.event;//获取event对象 var obj ev.target || ev.srcElement;//获取事件源 var t obj.type || obj.getAttribute(type);//获取事件源…

最全19000+国外AE模板合集包

最全19000国外AE模板合集包 此套模板 包含整理好的 2015-2021年6月 国外AE模板 19000多个 大小&#xff1a;3500G 模板已编号&#xff0c;含预览视频&#xff0c;方便预览和查找&#xff0c;&#xff08;少数模板无预览&#xff0c;少数模板只含预览图&#xff09; 云桥网络…

北大网络教育计算机作业,北大网络教育(计算机专业)网络基础作业答案.doc

北大网络教育(计算机专业)网络基础作业答案北大网络教育(计算机专业)计算机网络基础作业答案1.从逻辑结构上看&#xff0c;计算机和路由器分别属于资源子网和通信子网。2、 大型广域网常采用的拓扑结构是网络拓扑结构。3.常借用公用传输网络构建的网络类型是广域网。4. 简单地说…

什么是IOC为什么要使用IOC

概念&#xff1a; 作用&#xff1a; 结论&#xff1a;借助于“第三方”实现具有依赖关系的对象之间的解耦 在使用IOC之前的情况 如果有一个齿轮出了问题&#xff0c;就可能会影响到整个齿轮组的正常运 使用IOC之后 对象A获得依赖对象B的过程,由主动行为变为了被动行为&#xff…

垃圾回收之标记算法

前言 作为 Java 开发人员&#xff0c;其实是非常幸福的&#xff0c;因为 JVM 的存在&#xff0c;使得 Java 开发人员不需要像 C 或者 C开发人员那样需要手动申请内存、释放内存&#xff0c;这些资源申请、垃圾回收的操作&#xff0c;JVM 底层直接帮助我们全干了。 这为 Java 开…

将数组转换为字符串

$a1..10000 方法一&#xff1a; $a -join $null 方法二&#xff1a; -join $a 方法三&#xff08;效率次高&#xff09;&#xff1a; [string]::concat($a) 方法四&#xff08;效率最高&#xff0c;但写法麻烦&#xff09;&#xff1a; $sb New-Object System.Text.StringBuil…

【73套】Epic Stock Media配乐音效素材合集包

【73套】Epic Stock Media配乐音效素材合集包 大小&#xff1a;114G丨WAV Epic Stock Media 系列音效合辑 包含了战争电影音效、史诗梦幻音效、日常生活音效、森林环境音效、电影预告等诸多音效&#xff0c;可以满足你的各种制作需求。全部WAV无损格式&#xff0c;每个合辑独立…

自定义html托管,10分钟搞定“傻瓜式”的静态网站搭建托管之旅

原文发布于微信公众号&#xff1a;腾讯云存储(关注有惊喜)静态网站&#xff1a;有别于动态网站&#xff0c;它就是只包含静态内容(如图片、音频、视频、HTML、CSS、JS)的网站&#xff0c;不依赖服务器端动态渲染页面。那么静态网站托管应该如何使用呢&#xff1f;今天就和大家分…

调用bat文件执行java文件

set path./jre7/bin--设置jre路径&#xff0c;可以写jre的全路径java -cp "lib/*;" -Xms256m -Xmx512m com.shentong.Main--测试类入口pause 把所有的jar包都放在lib文件下面 转载于:https://www.cnblogs.com/yuwenfeng/p/4911075.html

2022-2028年中国数码相机行业投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国数码相机行业市场行业相关概述、中国数码相机行业市场行业运行环境、分析了中国数码相机行…

Android安卓游戏引擎大搜罗

2019独角兽企业重金招聘Python工程师标准>>> 1.AndEngine 简介&#xff1a; AndEngine基于libGDX框架开发&#xff0c;使用OpenGL ES进行图形绘制。同时继承了BOX2D物理引擎&#xff0c;因此能实现一些较为复杂的物理效果。在Rokon停止更新以后&#xff0c;AndEngin…

Spring Boot 2.X 对 web 的开发支持(二)

Spring Boot 2.X 对 web 的支持开发 上章节的 Spring Boot 的入门案例&#xff0c;我们感受到 Spring Boot 简单的配置即可运行项目。 今天了解 Spring Boot 对 web 的支持。 Spring Boot 对 Web 开发的支持很全面&#xff0c;包括开发、测试和部署阶段都做了支持。spring-boot…

Blender建筑可视化技能学习视频教程

Blender建筑可视化技能学习视频教程 chocofur–Blender2021的内部可视化秘密 大小&#xff1a;28G 1920X1080 mp4 语言&#xff1a;英语 信息: 云桥网络 平台获取教程&#xff01; 了解Blender中完整的内部可视化工作流程是成为一名成功的3D艺术家的关键。向做了十几年的专…

基于DCMTK的DICOM相关程序编写攻略

2008年09月10日 星期三 15:35 基于DCMTK的DICOM相关程序编写攻略 前言&#xff1a; 由于现在的医学影像设备的图像存储和传输正在逐渐向DICOM标准靠拢&#xff0c;在我们进行医学图像处理的过程中&#xff0c;经常需要自己编写和DICOM格式的图像相关的各种程序模块&#xff0c;…

计算机组成考试题及答案,计算机组成测试题一参考答案

计算机组成测试题一参考答案一、填空题(每空1分&#xff0c;共20分)1. 设二进制数X2&#xff0b;100(—0.10101100)&#xff0c;用15个二进制位来表示它的浮点数&#xff0c;阶码用5位&#xff0c;其中阶符用2位&#xff1b;尾数用10位&#xff0c;其中符号用2位(2100中的100为…

典型的垃圾收集算法

上一编&#xff1a;《垃圾回收之标记算法》 &#xff0c;用以确认那些垃圾判定为可以回收。 在确定了哪些垃圾可以被回收后&#xff0c;垃圾收集器要做的事情就是开始进行垃圾回收&#xff0c;但是这里面涉及到一个问题是&#xff1a;如何高效地进行垃圾回收。由于Java虚拟机规…