C++ PDF文档相关操作

C++——入门基础(上) ①定义命名空间,需要用到namespace关键字,后面跟着命名空间的名字,然后用一对{}连接,{}中为命名空间的成员。命名空间可以定义变量/函数/类型等。与结构体的区别是:{}后面没有分号;//变量//函数//类型int val;②namespace本质是定义出一个域,这个域跟全局域各自独立。③不同的域可以定义同名变量,因此下面的两个rand不会冲突。int val;int main()//这里默认访问的是全局的rand函数指针(即头文件stdlib.h中的) 阅读详情

    人生总是在赶着一个又一个的期限,直到最后的大限。

    近来基本没更新过博客,实在是准备雅思看英语加上调节老看英语后的烦躁心情闹的。本来以为考完研就与大考再也不见了,这种想法实在是 Too young,Too naive。之前做过一个项目,是关于在Windows平台下用C++实现PDF文档制作的相关操作的,今天有点心情拿来总结下。

    关于PDF的库其实有不少,本人因为一开始用神器搜到的是PDFlib,就用这个库做了。这就是所谓的缘分吧。

    PDFlib并非是开源库,要使用需要付费,否则会有一个让人不要不要的水印在页面的后头。当然,我大天朝从来无需理会这些,有压迫的地方就总会有雷锋站出来搞个破解版,该库也不例外,有需要可以到这位雷锋的博客地点去下载。如果实在是懒也可以下载本人的DEMO工程,里面已经配置好了该库,不过由于本人本着折腾到死的心态做程序员,该工程的环境是最新的VS2015,如果你的版本不是最新的,下载了请自己默哀,十分我是不会还回去的哈哈。

    PDFlib是一个标准的动态链接库,跟其他的动态链接库的配置方法一样,把pdflib.lib、pdflib.dll和pdflib.h放到工程目录下并放入pdflib.lib这个附加依赖项,在工程中包含pdflib.h这个现有项就算完成配置了。接下来就是如何去用这个库了,一开始在文件中包含pdflib.h头文件这事应该都是了然的。

    具体的使用,网上有一些现成的例子,然而没有见过能解决好中英文交杂在一起的问题的。因为网上百分之八九十都是建议用PDFlib自带的字库,而很遗憾的是这些字库对中文支持的都不怎么好且字体也就那么几种,在一般情况下能分开去调用中英文也就算了,然而在一些中英文同时出现的情况下单单是排版的间隙问题就给跪了,要写程序去遍历里面的字符再区分出来对待,劳民伤财,要死要活。这个工作本人是做了的,后来无意间发现某些博客偶然提及的可以调用本地字库,于是决心尝试一番。真是不试不知道,一试一口老血差点吐出来,本地字库完美支持中英文不说,字体也是要什么有什么。。。有时一些博客真是误导死人。。。所以本人在此强烈建议要用这个库的程序猿直接去C:\Windows\Fonts这个路径下找到你喜欢的字体弄出来,然后放到你的工程目录下拿来调用,什么自带字体完全是坑爹的!!!下面直接上代码,输出一个页面上是《将进酒》的PDF文件。(建一个win32控制台空白工程并配置好环境后把下面这串代码拷进去理论上来说你也是可以运行的。)

#include "pdflib.h"
#include <afx.h> 

void String2text(PDF *p, int &TextFlow, CString &mPagenameAndDate, int fontsize)
{
	char characteristic_cn[100];
	int mPagenameAndDateSize = mPagenameAndDate.GetLength();//字符串长度
	PDF_set_parameter(p, "FontOutline", "a=./font/STXINGKA.TTF");//这里的“./font/STXINGKA.TTF”为字体文件的存放路径,也就是说需要将字库文件放到相应的位置,不然会造成错误
	sprintf_s(characteristic_cn, "fontname=a:0 fontsize = %d encoding = unicode textlen = %d", fontsize, mPagenameAndDateSize * 2);//中文字符
	PDF_add_textflow(p, TextFlow, (char *)(mPagenameAndDate).AllocSysString(), mPagenameAndDateSize * 2, characteristic_cn);//添加字符段内容
}

void OutputStringToPDF(PDF *p, CString &mPagenameAndDate, int Left, int &Top, int Right, int Reduction, int fontsize)//数据输出
{
	//该函数输出数据到PDF中,需要注意的是在输出到页未的时候会自行进行换页
	if (Top<130)
	{
		Top = 740;
		PDF_end_page_ext(p, ""); // 关闭页面并开启新的页面
		PDF_begin_page_ext(p, a4_width, a4_height, "");
	}
	int TextFlow = PDF_create_textflow(p, "", 0, "");//创建字符段
	String2text(p, TextFlow, mPagenameAndDate, fontsize);
	while (true)
	{
		const char *returnstring = PDF_fit_textflow(p, TextFlow, Left, Top, Right, Top - Reduction, "");
		Top -= Reduction;
		if (strcmp(returnstring, "_boxfull") != 0)//对象满了
		{
			break;
		}
		if (Top<130)
		{
			Top = 740;
			PDF_end_page_ext(p, ""); // 关闭页面并开启新的页面
			PDF_begin_page_ext(p, a4_width, a4_height, "");
		}
	}
	PDF_delete_textflow(p, TextFlow);//释放字符串对象
}

void main()
{
	PDF *p = NULL;
	int Left = 85, Top = 740, Right = a4_width - 85;
	//pdf对象创建
	if ((p = PDF_new()) == (PDF *)0)
	{
		printf("Couldn't create PDFlib object (out of memory)!n");
	}
	PDF_TRY(p)
	{
		//先创建PDF文档,名为outout.pdf
		if (PDF_begin_document(p, "output.pdf", 0, "") == -1)
		{
			printf("Error: %sn", PDF_get_errmsg(p));
		}
		//再创建PDF文档里面的页面,并填入页面的内容,这里本人将其封装成了两个函数
		PDF_begin_page_ext(p, a4_width, a4_height, "");
		CString mPagenameAndDate = L"君不见黄河之水天上来  奔流到海不复回\n";
		mPagenameAndDate += L"君不见高堂明镜悲白发  朝如青丝暮成雪\n";
		mPagenameAndDate += L"人生得意须尽欢  莫使金樽空对月\n";
		mPagenameAndDate += L"天生我材必有用  千金散尽还复来\n";
		mPagenameAndDate += L"烹羊宰牛且为乐  会须一饮三百杯\n";
		mPagenameAndDate += L"岑夫子  丹丘生  将进酒  杯莫停\n";
		mPagenameAndDate += L"与君歌一曲  请君为我倾耳听\n";
		mPagenameAndDate += L"钟鼓馔玉不足贵  但愿长醉不复醒\n";
		mPagenameAndDate += L"古来圣贤皆寂寞  惟有饮者留其名\n";
		mPagenameAndDate += L"陈王昔时宴平乐  斗酒十千恣欢谑\n";
		mPagenameAndDate += L"主人何为言少钱  径须沽取对君酌\n";
		mPagenameAndDate += L"五花马  千金裘\n";
		mPagenameAndDate += L"呼儿将出换美酒  与尔同销万古愁\n";
		//将文字输出到PDF,第三个参数为输出的左边距,第四个参数为输出的高度,第五个参数为输出的右边距,第六个参数为行距,第七个则是字体的大小
		OutputStringToPDF(p, mPagenameAndDate, Left, Top, Right, 45, 24);
		//页结束
		PDF_end_page_ext(p, "");
		//文档结束
		PDF_end_document(p, "");
	}
	PDF_CATCH(p)//错误信息输出
	{
		printf("[%d] %s: %sn",PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
		PDF_delete(p);
	}
	PDF_delete(p);
	//打开pdf
	system("output.pdf");
}
    效果如下:
    由于本人做工程只用到了输出PDF文件的那个部分,所以关于读取PDF文件的部分是没有写的,以后如果有做到则会放上来。至于更多的细节,则可以参考PDFlib的手册,这个手册我也会跟我的demo一起打包起来,这是demo地址。

C/C++中文参考手册离线最新版 C/C++中文参考手册(C++23标准) 离线chm最新版”是一份非常优秀的C/C++参考手册,它涵盖了C/C++语言的所有重要概念和语法,并包含了最新的C++23标准,让开发者能够使用最新的功能和特性。此外,该手册还涵盖了STL和Boost库的内容,让开发者能够更好地使用这些库。该手册采用离线的chm格式,可以在Windows操作系统上使用,易于使用。如果您是一名C/C++开发者,不妨下载并使用该手册,它将为您的编程工作提供有力的帮助和支持。 阅读详情

相关推荐

十、Qt 操作PDF文件

Qt使用Poppler库,打开PDF文件

3517

C语言大纲

数据类型 运算符,表达式和语句 循环 分支与跳转 函数 数组 结构体,联合体 指针 宏定义 1-数据类型

weixin_64499720的博客 888

C++:操作PDFlib库实例(附完整源码)

C++:操作PDFlib库实例(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1148

C++11

左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以获取它的地址+可以对它赋值左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名。综合而言,左值就是可以取地址的对象。这个b也认定成左值,它很特殊,因为一般的左值都是可以取地址和赋值的,这个b只能取地址不能赋值。右值也是一个表示数据的表达式,如:字面常量、表达式返回值,传值返回函数的返回值(这个不能是左值引用返回)等等,

cls的博客 3600

C#与PDFsharp库实现PDF打印操作指南

PDFsharp 是一个用于处理PDF文件的库,它为.NET开发者提供了强大的API来创建、修改、渲染以及打印PDF文件。PDFsharp 功能全面,可操作性高,支持直接在PDF文档中添加文本、图像、形状以及复杂的图形,同时也可以编辑现有PDF内容。特点如下:跨平台支持:能够在Windows、Linux和macOS上运行,提供了一个统一的API来处理PDF文件。C#和VB.NET支持:库原生支持C#和VB.NET两种.NET主流语言,易于学习和使用。DOM操作。

weixin_42527589的博客 2886

利用 C++ PDFlib 库创建无水印 PDF 文件

PDFlib是一款功能强大的库,用于在应用程序中创建、修改、抽取、转换和渲染PDF文档。它支持所有PDF标准特性,并允许开发者以编程方式与PDF文档交互,无需依赖第三方应用程序或复杂的图形用户界面(GUI)操作。PDFlib库提供了丰富的API组件,它们共同工作以生成和处理PDF文件。核心组件包括:Pdflib:创建PDFlib对象的类,用于管理PDFlib库的实例。:代表一个PDF文档,用于添加页面、内容和注释。PDFPage:表示一个单独的PDF页面,包含页面内容和属性。

weixin_35871529的博客 1201

C++ - PDF mark

 ideaOS^(BOOL coding) 1185

深入解析PDF文件结构的C++实践

PDF(Portable Document Format)是由Adobe Systems于1993年开发的文件格式,旨在呈现和交换电子文档,保持其格式和内容的不变性。PDF格式广泛应用于文件共享、电子书籍、政府文档、技术手册等,因其跨平台兼容性和不易篡改的特点,成为重要的数字化文档标准。在开始编码之前,了解PDF解析的理论基础是至关重要的。PDF文件由一系列的文本和二进制数据组成,遵循特定的格式规范。PDF文件的主要组成部分包括:文件头:包含标识PDF文件的关键信息和版本信息。

weixin_35390379的博客 1485

mfc word转pdf

1、使用word自带的api Word转PDF源码-C++开发_c++word转pdf,vcword转pdf-C++文档类资源-优快云下载 ​​​​​​C++操作Word转pdf_Anything_gy的博客-优快云博客_c++ word转pdf

tajon1226的专栏 533

风控要略-互联网业务反欺诈之路(一)

当前中国互联网安全产业答题可以分为基础安全和业务安全两个领域。从互联网诞生至2014年,互联网安全行业关注的热点基本都聚焦在网络安全、系统安全和应用安全这个三大基础安全领域上,“DDOS“(分布式拒绝服务攻击)1、“漏洞“、“拖库“2和“挂马“3等大家耳熟能详的术语也是从这些领域中衍生出来的。2014年前后,随着互联网业务的爆炸式发展,黑产团伙开始从“攻击渗透系统“的传统套路进化到“利用业务风控确实进行大规模牟利“的模式,并且逐渐形成规模庞大、分工明确的黑色产业链。

Despacito1006的博客 1015

Netron显示自定义属性,按属性设置不同节点的颜色

本文介绍了一种让Netron显示自定义颜色的方法,可根据某些属性,调整节点的颜色 需求背景: 在分析AI模型精度误差时,用不同等级的红色,表示误差的大小.可以直观地看到误差的传递关系

Hi20240217的博客 1514

python-poppler - PDF文档处理Python绑定库

一、关于 python-poppler 1、项目概览 二、相关链接资源 三、安装与使用 1、安装方式 2、基础示例 四、开发贡献

AI工程化、开源分享、文档翻译、代码笔记 543

LTspice仿真实战:共模电感差模/共模插入损耗测试全流程(附WE 744821201参数)

本文以Würth Elektronik 744821201型号共模电感为例,详细介绍了在LTspice中搭建差模与共模插入损耗测试电路的全流程。通过从规格书提取关键参数、构建SPICE模型,到执行仿真并与官方数据对比,旨在帮助硬件工程师在PCB设计前期精准预测EMC性能,弥合器件选型与系统设计之间的鸿沟。

info6的博客 761

VS2008操作Word2007 2010保存为PDF

在使用pdflib这个pdf二次开发库的时候,需要将word添加到pdf中,可是pdflib库支持图片和pdf文件的导入,不支持word文件的导入。想到word2007及以上的版本可以直接另存为pdf,所以动了使用word的转换为pdf的念头。 这里写了个测试小程序,下面说介绍下步骤:     1、创建MFC应用程序,默认unicode,无需修改工程类型     2、右键解决方案,添加类,M

好学近乎知,知耻近乎勇 4100

保姆级教程:用U盘给浪潮服务器装系统(含RAID驱动加载技巧)

本文提供了一份详细的浪潮服务器U盘安装系统指南,重点介绍了RAID驱动加载技巧与实战步骤。从准备工作到系统安装全流程,涵盖RAID配置、驱动加载方法及常见问题排查,帮助用户高效完成服务器系统部署。特别强调RAID驱动与服务器型号的匹配性,确保安装过程顺利。

uuu88的博客 737

NVIDIA DGX Spark 开发环境深度配置与优化指南

定期系统维护每月执行一次完整的系统更新监控存储空间使用情况,及时清理临时文件定期检查硬件健康状况开发习惯优化使用tmux或screen管理长时间运行的任务配置自动化测试和代码质量检查建立完善的项目文档体系性能调优周期每月重新评估和调整系统参数根据工作负载特点优化容器配置持续监控和记录性能指标DGX Spark作为一个强大的AI开发平台,其真正的价值需要通过精细的环境配置和优化才能充分发挥。本文提供的配置方案和建议均基于实际生产环境经验,旨在帮助开发者构建稳定、高效、可维护的开发环境。

time_days的博客 3688

C++实现PDF文件分页打印等功能

C++实现PDF文件分页打印等功能 去发现同类优质开源项目:https://gitcode.com/ 此仓库提供了一份C++资源文件,能够通过Adobe打印API实现对PDF文件进行分页打印和全部打印的功能。具体实现细节和API使用方法,请参考OCX中的相关方法。 该资源文件基于C++语言,通过调用Adobe PDF打印的相关接口,开发者可以在应用程序中轻松实现PDF文件的分页打印和全部打印功能。...

gitblog_06770的博客 380

从养虾到退坑:OpenClaw 卸载不留残留,一步到位

文章摘要: 本文提供OpenClaw软件的完整卸载指南,适用于Windows、macOS和Linux系统。内容包含卸载前的数据备份步骤(配置文件、日志、插件列表),以及详细的卸载脚本。Windows版通过批处理文件删除程序文件、注册表项和环境变量;macOS/Linux版则提供shell脚本,涵盖服务停止、软件包卸载、配置清理等步骤。特别强调要删除所有用户数据(包括多用户环境),确保系统无残留。文末建议重启计算机以使更改生效,实现"一步到位"的彻底卸载。

一键难忘的博客 298

学生成绩管理系统

资源内容:源程序(.cpp)+说明文档(PDF)

weixin_46006376的博客 92

【ARMv9 DSU-120 系列 1 -- DSU-120 DynamIQ 概述】

ARMv9架构中的DynamIQ™ Shared Unit-120(简称DSU-120)为一组基于Cortex-A类架构的核心提供了共享的L3内存系统、窥探控制(snoop control)和 过滤(filtering) 以及其他支持集群运作的控制逻辑。这个集群被称为DSU-120 DynamIQ™集群。此外,所有连接到片上系统(SoC)的外部接口也都是通过DSU-120提供的。一个DSU-120 DynamIQ™集群可以包含1到14个核心,且同一集群中可包含多达三种不同类型的核心。

CodingCos的博客 1188

scp 出现Permission denied错误 解决方法

第一种说辞(来源于网络),说是scp涉及root远程登录,默认是没有打开的,只需要把配置文件中的permit打开即可。最后scp的时候发现还不行,只需要将其scp的服务器用户名 修改为root即可。第二种解决方案,将scp 传输的服务器用户名改为root即可。(这是最基本的,一开始我忽视了这个问题,导致一直scp不了)window系统下,向ubuntu操作系统 scp传输文件。

码农研究僧的博客 6729

C++使用PoDoFo库处理PDF文件

PoDoFo 是一个用 C++ 编写的自由开源库,专用于 读取、写入和操作 PDF 文件。它适用于需要程序化处理 PDF 文件的应用程序,比如批量生成、修改、合并、提取元数据、绘图等。

old_power的博客 2585

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Poppler - 高性能的PDF文档处理库

Poppler - 高性能的PDF文档处理库 项目地址:https://gitcode.com/gh_mirrors/po/poppler 是一个用于 PDF 文档处理的强大开源库。它提供了一系列高级功能,包括页面提取、文本提取、注释和书签处理等。 Poppler 可以用来做什么? 文本和图像提取:从 PDF 文件中提取文本和图像,进行进一步处理或保存为其他格式。 PDF 转换:将 PDF 文件...

gitblog_00001的博客 4517

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

2 款 .NET 开源、简洁、高效的 PDF 文档操作库

今天大姚给大家分享 2 款 .NET 开源、简洁、高效的 PDF 文档操作库,希望可以帮助大家高效处理 PDF 文档的相关需求。

专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享。这里聚焦了大量的C#/.NET/.NET Core优质文章、开源项目、实用工具和学习、工作、面试心得。 956

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

.NET 使用 DocNET 库快速高效的操作 PDF 文档

当然这里不仅仅只有C#/.NET/.NET Core还有前端、云原生(Docker,K8s)、分布式,微服务、实用工具、学习书籍、AIGC、AI赋能、求职和招聘资讯、热点资讯等多个领域,我们致力于构建一个积极向上、和谐友善的.NET技术交流、学习平台。该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。PDF 文档,作为日常工作中不可或缺的文档格式,广泛应用于各类场景。

dotNET跨平台 183

PoDoFo:终极C++ PDF处理开源库完整指南

在当今数字化时代,**PDF文档处理**已成为企业和个人日常工作中不可或缺的一部分。PoDoFo作为一个功能强大的**C++ PDF处理开源库**,为开发者提供了完整的PDF文档创建、解析和编辑解决方案。无论是构建PDF生成工具、实现文档自动化处理,还是开发高级PDF分析应用,PoDoFo都能提供专业级的支持。 ## 🚀 为什么选择PoDoFo库? PoDoFo是一个基于**C++17标准*

gitblog_01093的博客 985
上一篇: C++ 嵌入汇编程序提高计算效率
下一篇: MFC RS232串口通信
_寒潭雁影
博客等级 码龄14年 2809粉丝 343原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值