当前位置:网站首页>use Asponse.Words Working with word templates
use Asponse.Words Working with word templates
2020-11-06 01:23:00 【itread01】
One . Customer needs
Recently received a project , After initial communication with customers , The requirements described by customers also sound very simple , At present, customers need to be in Excel Input data , And then copy the data to multiple Word In many places , Except for individual values , You also need to copy forms and pictures , The customer thinks that this operation is easy to make mistakes , Second, the workload of repeated operation is too large . After a preliminary understanding of the user's needs , The core function of knowing the customer's needs is in Word Fill in the source of information , The sources that need to be filled in include text , Tables, pictures, etc , This article takes this as the starting point , It focuses on how to use Word Use in “ Domain ” To fill in external data .
Two . Plug in selection
At the moment Word etc. Office The control element of the document type , Microsoft comes with Com There are too many problems with components , One of the more troublesome problems is part of Com Components need to be registered , And if the client and the development computer use Com Component version inconsistency , There will be all kinds of problems , So I chose Asponse.words Plug in , The software is a charge plug-in , Specific charging standards can be viewed on the official website .
3、 ... and . Template making
utilize Asponse Fill in the data , In fact, the code is not difficult , The core job is to be in Word Set the mark in the template , That is, you need to let the program know where to fill in the data , At present, there are two ways to mark , One is to use bookmarks , One is to use the domain . At present, most cases on the Internet use bookmarks , But in the course of my actual development , I suggest you use “ Domain ”, Instead of using Bookmarks , The reasons are as follows :
1. Bookmarks cannot be added repeatedly , For example, I need to insert the data source in the first blank “ full name ”, Insert... In the last signature “ full name ”, Use this time “ Domain ” You can insert it in both places “ full name ” Domain , But if you use bookmarks , You need to set different bookmark names , When generating data sources, it will increase the workload
2. Bookmarks can't be displayed directly in the file , If you insert more Bookmarks , It's easy to cause confusion
Besides , It should be noted that , Make a bookmark or “ Domain " Be sure to use Word instead of WPS Make , Because one of the problems we've found is , Use WPS Make a bookmark or ” Domain “, A blank line will be added automatically after filling the data , This could be WPS And Word The internal mechanism is different ; There's another trick , Use... In documents Alt+F9, You can view the various domain codes of the template , As shown in the figure below :
Four . Insert bookmark / Domain
1. Insert bookmark
2. Insert field ( Insert -> File parts -> Domain , Choice "MergeField")
5、 ... and . Implementation code
1. Get the file
Aspose.Words.Document doc = new Aspose.Words.Document(filePath); Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);
2. utilize word Template filling information
List<string> filedsValueList = new List<string>(); string[] filedsName =doc.MailMerge.GetFieldNames();// Get all the fields in the file for (int i = 0; i < filedsName.Length; i++) { if (dataTable.Columns.Contains(filedsName[i])) { filedsValueList.Add(dataTable.Rows[0][filedsName[i]].ToString()); } else { filedsValueList.Add(""); } }
// The core code is actually this sentence , All of the above are organization sources
// The arguments are two arrays , The first array is all of the ” Domain “ The name of , The second is the value of the corresponding field doc.MailMerge.Execute(filedsName, filedsValueList.ToArray());
3. Insert a picture
You don't need special code to insert images , It's about the need for Word Make special settings for the fields in the template , The way to set it is :
In the dialog box that pops up , hold ” Domain “ Add... Before the name "Image:", As shown in the figure below :
After setting it up , Just set the value of this field to the path of the image , The picture can be displayed in the document , If you need to control the size of the image in your code , Call back events that need to be processed for file binding images , The code is as follows :
doc.MailMerge.FieldMergingCallback = new HandleMerFieldInsert();
4. Set the image size
stay Asponse In the methods provided directly , There is no way to change the size of the picture , But it can be rewritten Asponse Of IFieldMergingCallback Class , Used to set the image size
class HandleMerFieldInsert : IFieldMergingCallback { // Word processing void IFieldMergingCallback.FieldMerging(FieldMergingArgs e) { } // Image processing void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs args) { Document doc = args.Document; DocumentBuilder builder = new DocumentBuilder(doc); builder.MoveToMergeField(args.FieldName); Shape shapeImage = builder.InsertImage(args.FieldValue.ToString()); // Set x,y Coordinates and height and width . shapeImage .Left = 0; shapeImage .Top = 0; shapeImage .Width = 50; shapeImage .Height = 25; } }
5. Fill in the form
Fill in the form information , You need to set the starting position of the table binding data in the template , Then set the column name in the data source in each column , The specific steps are shown in the figure below :
The starting mark of the table data source is ”TableStart“, The end is marked with "TableEnd", After setting the start and end tags of the table data source , In each column, you can set the column name that needs to be bound in each column , The set data source is shown in the figure below :
Through Alt+F9 You can see the code of various fields set up , As shown in the figure below :
After setting the fields of the table , Fill in the data source with the following code :
dt.TableName = "UserInfo";// The table name here must be the same as the start and end source names of the table in the template
doc.MailMerge.ExecuteWithRegions(dt);
6. Delete the table and its corresponding place holder
Use Asponse The operation of deleting is relatively complicated , The existing business needs to delete a table in the template , But the problem is , After deleting the form , The place holder on the page where the form is located is still , Will result in a blank page in the generated file , So delete similar tables , When pictures are such elements , You also need to delete the corresponding paragraph placeholder
NodeCollection nodeCollection = doc.GetChildNodes(NodeType.Table, true);// Get all the forms foreach (Table table in nodeCollection) { if (table.GetText().Contains("AAAAAA") && table.GetText().Contains("BBBBBB"))//To Do: Here we can determine whether it is a deleted form by getting the contents of the table , There should be a better way { Paragraph paragraph = (Paragraph)table.PreviousSibling; paragraph.Remove();// Delete the paragraph table.Remove();// Delete the table } }
7. Store the password PDF
Aspose.Words.Saving.PdfSaveOptions saveOption = new Aspose.Words.Saving.PdfSaveOptions(); saveOption.SaveFormat = Aspose.Words.SaveFormat.Pdf; PdfEncryptionDetails encryptionDetails = new PdfEncryptionDetails(pdfPwd, string.Empty, PdfEncryptionAlgorithm.RC4_128); encryptionDetails.Permissions = PdfPermissions.AllowAll; saveOption.EncryptionDetails = encryptionDetails; doc.Save(fullfilepath + ".pdf", saveOption);
8. Delete unassigned “ Domain ”
doc.MailMerge.DeleteFields();
At the end
thus ,Asponse The general methods of using templates to process data are summarized , For direct use Asponse Methods , stay Word In the form of hard coding, it is recommended that you do not use it as a last resort , Because adding a table requires controlling the style of the table itself , You also need to control the style of cells , And for complex documents , Positioning tables can also make it more difficult .
版权声明
本文为[itread01]所创,转载请带上原文链接,感谢
边栏推荐
- 2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
- Filecoin的经济模型与未来价值是如何支撑FIL币价格破千的
- Use of vuepress
- Working principle of gradient descent algorithm in machine learning
- Want to do read-write separation, give you some small experience
- Don't go! Here is a note: picture and text to explain AQS, let's have a look at the source code of AQS (long text)
- 关于Kubernetes 与 OAM 构建统一、标准化的应用管理平台知识!(附网盘链接)
- Grouping operation aligned with specified datum
- How to use parameters in ES6
- 5.5 controlleradvice notes - SSM in depth analysis and project practice
猜你喜欢
Face to face Manual Chapter 16: explanation and implementation of fair lock of code peasant association lock and reentrantlock
I've been rejected by the product manager. Why don't you know
带你学习ES5中新增的方法
IPFS/Filecoin合法性:保护个人隐私不被泄露
中小微企业选择共享办公室怎么样?
CCR炒币机器人:“比特币”数字货币的大佬,你不得不了解的知识
多机器人行情共享解决方案
Word segmentation, naming subject recognition, part of speech and grammatical analysis in natural language processing
数据产品不就是报表吗?大错特错!这分类里有大学问
ES6学习笔记(二):教你玩转类的继承和类的对象
随机推荐
6.3 handlerexceptionresolver exception handling (in-depth analysis of SSM and project practice)
助力金融科技创新发展,ATFX走在行业最前列
Just now, I popularized two unique skills of login to Xuemei
From zero learning artificial intelligence, open the road of career planning!
Let the front-end siege division develop independently from the back-end: Mock.js
Python3 e-learning case 4: writing web proxy
Filecoin最新动态 完成重大升级 已实现四大项目进展!
嘗試從零開始構建我的商城 (二) :使用JWT保護我們的資訊保安,完善Swagger配置
教你轻松搞懂vue-codemirror的基本用法:主要实现代码编辑、验证提示、代码格式化
What is the side effect free method? How to name it? - Mario
vue-codemirror基本用法:实现搜索功能、代码折叠功能、获取编辑器值及时验证
6.4 viewresolver view parser (in-depth analysis of SSM and project practice)
NLP model Bert: from introduction to mastery (1)
快快使用ModelArts,零基础小白也能玩转AI!
Multi classification of unbalanced text using AWS sagemaker blazingtext
Classical dynamic programming: complete knapsack problem
Keyboard entry lottery random draw
Polkadot series (2) -- detailed explanation of mixed consensus
How do the general bottom buried points do?
OPTIMIZER_ Trace details