当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- Vue 3 responsive Foundation
- Existence judgment in structured data
- PHP应用对接Justswap专用开发包【JustSwap.PHP】
- High availability cluster deployment of jumpserver: (6) deployment of SSH agent module Koko and implementation of system service management
- The road of C + + Learning: from introduction to mastery
- Did you blog today?
- 基於MVC的RESTFul風格API實戰
- Every day we say we need to do performance optimization. What are we optimizing?
- 6.2 handleradapter adapter processor (in-depth analysis of SSM and project practice)
- Want to do read-write separation, give you some small experience
猜你喜欢

Swagger 3.0 天天刷屏,真的香嗎?

Not long after graduation, he earned 20000 yuan from private work!

一篇文章带你了解CSS3圆角知识

带你学习ES5中新增的方法

一篇文章带你了解CSS对齐方式

一篇文章带你了解CSS3图片边框

Calculation script for time series data

The difference between Es5 class and ES6 class

This article will introduce you to jest unit test

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)
随机推荐
ipfs正舵者Filecoin落地正当时 FIL币价格破千来了
Can't be asked again! Reentrantlock source code, drawing a look together!
What problems can clean architecture solve? - jbogard
数据产品不就是报表吗?大错特错!这分类里有大学问
ES6 essence:
华为云“四个可靠”的方法论
6.6.1 localeresolver internationalization parser (1) (in-depth analysis of SSM and project practice)
Nodejs crawler captures ancient books and records, a total of 16000 pages, experience summary and project sharing
嘗試從零開始構建我的商城 (二) :使用JWT保護我們的資訊保安,完善Swagger配置
“颜值经济”的野望:华熙生物净利率六连降,收购案遭上交所问询
Python + appium automatic operation wechat is enough
It's so embarrassing, fans broke ten thousand, used for a year!
After reading this article, I understand a lot of webpack scaffolding
Real time data synchronization scheme based on Flink SQL CDC
Wechat applet: prevent multiple click jump (function throttling)
采购供应商系统是什么?采购供应商管理平台解决方案
Swagger 3.0 天天刷屏,真的香嗎?
数字城市响应相关国家政策大力发展数字孪生平台的建设
一篇文章带你了解CSS对齐方式
带你学习ES5中新增的方法