彩票黑网站是怎么做的,深圳网页设计推广渠道,汕头seo排名收费,设计上海兼职网站建设在Excel催化剂刚推出的pdf相关功能中#xff0c;反馈很热烈#xff0c;不止是用户层面好多人喜欢#xff0c;也听到在.NET开发群里有询问pdf在winform上展现的功能诉求#xff0c;一段时间没写开源篇#xff0c;生怕大家以为Excel催化剂太小气了#xff0c;不再开发了反馈很热烈不止是用户层面好多人喜欢也听到在.NET开发群里有询问pdf在winform上展现的功能诉求一段时间没写开源篇生怕大家以为Excel催化剂太小气了不再开发了赶紧趁着还有余温补上一篇pdf相关的技术要点和好用轮子简介pdf转图片pdf转图片的功能找了好久百度肯定是没答案的了或者找到的都是一堆堆的软文指向云csdn下载破解版dll这种事情在我大中华出现多了也不足为怪了。在google上也找了好大一圈好多的方案还是不好用或者没看懂其中一个方案是要求以COM的方式云调用Adobe的pdf软件这肯定没有吸引力的虽然我大中国是很有办法找Adobe的破解版软件但听说Adobe咬起人来比狼还要狠动不动罚你个天价不为奇程序员就不要往这里靠了。最后在github上一个很无名的小项目上抄到了代码不敢独占也献上了一个宝贵星星。github上的示例调用的是PdfiumViewer轮子。这个轮子又依赖于PDFium轮子PDFium好像分86和64两个版本。源代码节录直接在nuget上搜PDFium会有多个版本用PdfiumViewer搜索好像可以搜索到不分86和64的版本现在用着是它没测试过32位机器是否不会出问题。PdfiumViewer关键词下好像有一个86和64合成版PdfiumViewer更多的用途可以在winform上显示pdf文档这里只是借用了人家直接pdf转图片的小部分功能。pdf抽取表格内容同样最后在github上找到了寻找过程也是很曲折不展开了。大家用到时不妨多多给原作者打个星星。github上的轮子这个类库的调用有点奇怪他拿到Table后不能很方便地取到Table上的内容结果只能用Table.ToString()拿到文本再自己云拆解。里面提供的Table的行、列坐标貌似测试了好久不能用来在itextSharp上提取到数据。pdf提取内容这个用的是itextSharp但听说这个是开源有限制的5.0高版本的不能用在商业软件上。有大牛可以用最后的开源无限制版本写一下提取文本的代码给我下就最好现在暂时还是用着人家5.0的版本在中国应该问题不大吧还好Excel催化剂是免费的应该不算是商业用途吧。求专业人士指导下。网络上的代码都是基于5.0写出来的实在抄不到4.x版本的代码。代码很简单随便一搜就有包括百度可能文章长度有限制就不帖代码了。pdf提取图片这个也是用的itextSharp厚道点这里直接给大家贴代码不用花时间找了。 public static Dictionarystring, System.Drawing.Image ExtractImages(string filename) { var images new Dictionarystring, System.Drawing.Image(); using (var reader new PdfReader(filename)) { var parser new PdfReaderContentParser(reader); ImageRenderListener listener null; for (var i 1; i reader.NumberOfPages; i) { parser.ProcessContent(i, (listener new ImageRenderListener())); var index 1; if (listener.Images.Count 0) { foreach (var pair in listener.Images) { images.Add(string.Format({0}_Page_{1}_{2}{3}, System.IO.Path.GetFileNameWithoutExtension(filename), i.ToString(D3), index.ToString(D3), pair.Value), pair.Key); index; } } } return images; } } } internal class ImageRenderListener : IRenderListener { DictionarySystem.Drawing.Image, string images new DictionarySystem.Drawing.Image, string(); public DictionarySystem.Drawing.Image, string Images { get { return images; } } public void BeginTextBlock() { } public void EndTextBlock() { } public void RenderImage(ImageRenderInfo renderInfo) { try { PdfImageObject image renderInfo.GetImage(); PdfName filter (PdfName)image.Get(PdfName.FILTER); if (filter ! null) { System.Drawing.Image drawingImage image.GetDrawingImage(); string extension .; if (filter PdfName.DCTDECODE) { extension PdfImageObject.ImageBytesType.JPG.FileExtension; } else if (filter PdfName.JPXDECODE) { extension PdfImageObject.ImageBytesType.JP2.FileExtension; } else if (filter PdfName.FLATEDECODE) { extension PdfImageObject.ImageBytesType.PNG.FileExtension; } else if (filter PdfName.LZWDECODE) { extension PdfImageObject.ImageBytesType.CCITT.FileExtension; } this.Images.Add(drawingImage, extension); } } catch (Exception) { } } public void RenderText(TextRenderInfo renderInfo) { } }图片转pdf这个也是用的itextSharp因为想做到按图片大小来调整当前页的尺寸测试了好久还是厚道着给大家献上劳动成果吧。 private static void InsertPicToPdf(string saveFilePath, List(string FilePath, float Width, float Height, byte[] ImageData) listImageInfo) { var firstImage listImageInfo.FirstOrDefault(); var rec new Rectangle(firstImage.Width, firstImage.Height); Document doc new Document(rec, 0, 0, 0, 0); PdfWriter.GetInstance(doc, new FileStream(saveFilePath, FileMode.Create)); doc.Open(); var firstImagePage iTextSharp.text.Image.GetInstance(firstImage.ImageData); firstImagePage.ScalePercent(24F); doc.Add(firstImagePage); int ipage 0; foreach (var item in listImageInfo.Skip(1)) { ipage; if (ipage 1) { doc.NewPage(); } var rectangle new Rectangle(item.Width, item.Height); doc.SetPageSize(rectangle); doc.SetMargins(0, 0, 0, 0); var inertImage iTextSharp.text.Image.GetInstance(item.ImageData); inertImage.ScalePercent(24F); doc.Add(inertImage); } doc.Close(); } private static List(string FilePath, float width, float Height, byte[] ImageData) GetImageInfos(Liststring filePaths) { List(string FilePath, float width, float Height, byte[] ImageData) listImageInfo new List(string FilePath, float width, float Height, byte[] ImageData)(); foreach (var picPath in filePaths) { string ext Path.GetExtension(picPath).ToLower(); ImageFormat imageFormat ext .png ? ImageFormat.Png : ext .bmp ? ImageFormat.Bmp : ext .gif ? ImageFormat.Gif : ImageFormat.Jpeg; System.Drawing.Image image System.Drawing.Image.FromFile(picPath); float height image.Height * 0.24F; float width image.Width * 0.24F; MemoryStream mstream new MemoryStream(); image.Save(mstream, imageFormat); byte[] byData new Byte[mstream.Length]; mstream.Position 0; mstream.Read(byData, 0, byData.Length); mstream.Close(); listImageInfo.Add((picPath, width, height, byData)); } return listImageInfo; }搞了好久老是错位最终才测试出第2页时不要NewPage才行。 if (ipage 1) { doc.NewPage(); }代码出处的作者大概意思是pdf的分辨率是72pi不是打印机的300pi所以要缩小为原大小的24%打印效果才比较好。 System.Drawing.Image image System.Drawing.Image.FromFile(picPath); float height image.Height * 0.24F; float width image.Width * 0.24F;结语Excel催化剂不是什么造轮子大户只会到处找轮子水平也有限但还是尽上微博之力给一些水平也是一般的后来者带去一点点的便利希望大家喜欢也期待整个分享的社区文化越来越好。我助人人人人助我。技术交流QQ群QQ群名Excel催化剂开源讨论群 QQ群号788145319Excel催化剂开源讨论群二维码关于Excel催化剂Excel催化剂先是一微信公众号的名称后来顺其名称正式推出了Excel插件插件将持续性地更新更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用Excel催化剂插件使用最新的布署技术实现一次安装日后所有更新自动更新完成无需重复关注更新动态手动下载安装包重新安装只需一次安装即可随时保持最新版本Excel催化剂插件下载链接https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q联系作者公众号取名催化剂因Excel本身的强大并非所有人能够立马享受到大部分人还是在被Excel软件所虐的阶段就是头脑里很清晰想达到的效果而且高手们也已经实现出来就是自己怎么弄都弄不出来或者更糟的是还不知道Excel能够做什么而停留在不断地重复、机械、手工地在做着数据耗费着无数的青春年华岁月。所以催生了是否可以作为一种媒介让广大的Excel用户们可以瞬间点燃Excel的爆点无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑最终走向了从入门到放弃的道路。最后Excel功能强大其实还需树立一个观点不是所有事情都要交给Excel去完成也不是所有事情Excel都是十分胜任的外面的世界仍然是一个广阔的世界Excel只是其中一枚耀眼的明星还有其他更多同样精彩强大的技术、工具等。*Excel催化剂也将借力这些其他技术让Excel能够发挥更强大的爆发关于Excel催化剂作者姓名李伟坚从事数据分析工作多年BI方向一名同样在路上的学习者。服务过行业零售特别是鞋服类的零售行业电商淘宝、天猫、京东、唯品会技术路线从一名普通用户通过Excel软件的学习从此走向数据世界非科班IT专业人士。历经重重难关终于在数据的道路上达到技术平原期学习众多的知识不再太吃力同时也形成了自己的一套数据解决方案数据采集、数据加工清洗、数据多维建模、数据报表展示等。擅长技术领域Excel等Office家族软件、VBAVSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。2018年开始职业生涯作了重大调整从原来的正职工作转为自由职业者暂无固定收入暂对前面道路不太明朗苦重新回到正职工作对Excel催化剂的运营和开发必定受到很大的影响正职工作时间内不可能维护也不可能随便把工作时间内的成果公布于外工作外的时间也十分有限因已而立之年家庭责任重大。和广大拥护者一同期盼Excel催化剂一直能运行下去我所惠及的群体们能够给予支持多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐让我的技术可以在贵司发挥价值实现双赢初步设想可以数据顾问的方式或一些小型项目开发的方式合作。