Как выполнить Mail Merge в Word с помощью Java
Слияние писем — это мощная функция Microsoft Word, позволяющая создавать персонализированные документы, такие как письма, конверты или этикетки, путем слияния основного документа с источником данных. Использование функции слияния писем позволяет экономить время и силы при массовой рассылке приглашений, информационных бюллетеней или счетов-фактур, поскольку можно настраивать содержание для каждого получателя, не набирая и не копируя его вручную несколько раз.
В этой статье я покажу, как создать шаблон, содержащий поля слияния писем, и как объединить текстовые значения и изображения в поля слияния, используя Free Spire.Doc for Java.
Установка файла Free Spire.Doc.jar
Если вы создали
Maven-проект, вы можете легко импортировать jar в свое приложение, используя
следующие конфигурации. Для проектов, не использующих Maven, загрузите jar-файл
по этой
ссылке и добавьте его в качестве зависимости в свое приложение.
Рекомендуется создавать шаблон с помощью Microsoft Word, поскольку при ручном проектировании легче корректировать макет и общий вид в режиме реального времени. Однако если вы хотите программно вставить поля почтовой сортировки в документ Word, выполните следующие действия. import com.spire.doc.Document; import com.spire.doc.FieldType; import com.spire.doc.FileFormat; import com.spire.doc.Section; import com.spire.doc.documents.BreakType; import com.spire.doc.documents.Paragraph; public class CreateMailMergeFields { public static void main(String[] args) { //Create a Document object Document document = new Document(); //Add a section Section section = document.addSection(); //Add a paragraph Paragraph paragraph = section.addParagraph(); //Add text and mail merge fields to the paragraph paragraph.appendText("Name: "); paragraph.appendField("Name", FieldType.Field_Merge_Field); paragraph.appendBreak(BreakType.Line_Break); paragraph.appendText("Phone: "); paragraph.appendField("Phone", FieldType.Field_Merge_Field); paragraph.appendBreak(BreakType.Line_Break); paragraph.appendText("Date: "); paragraph.appendField("Date", FieldType.Field_Merge_Field); paragraph.appendBreak(BreakType.Line_Break); paragraph.appendText("Portrait: "); paragraph.appendField("Image:Portrait", FieldType.Field_Merge_Field); //Save the document document.saveToFile("Template.docx", FileFormat.Docx_2013); } } В данном примере кода
загружается шаблон Word, задаются имена и значения полей слияния, выполняется
операция слияния и сохраняется полученный документ в новый файл. Ниже приведены
подробные шаги. import com.spire.doc.Document; import com.spire.doc.FileFormat; import com.spire.doc.reporting.MergeImageFieldEventArgs; import com.spire.doc.reporting.MergeImageFieldEventHandler; import java.text.SimpleDateFormat; import java.util.Date; public class MergeData { public static void main(String[] args) throws Exception { //Create a Document instance Document document = new Document(); //Load the template document.loadFromFile("C:\Users\Administrator\Desktop\Template.docx"); //Specify mail merge fields’ names String[] fieldNames = new String[]{"Name«, «Phone», «Date», «Portrait»}; //Specify text values for the fields Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = formatter.format(currentTime); String[] fieldValues = new String[]{"John Smith«, «+1 (69) 123456», dateString, «C:\Users\Administrator\Desktop\portrait.jpg»}; //Invoke the custom method to load image document.getMailMerge().MergeImageField = new MergeImageFieldEventHandler() { public void invoke(Object sender, MergeImageFieldEventArgs args) { mailMerge_MergeImageField(sender, args); } }; //Merge the specified values into fields document.getMailMerge().execute(fieldNames, fieldValues); //Save the document to file document.saveToFile("MergeData.docx", FileFormat.Docx_2013); } //Create a custom method to load image for mail merge private static void mailMerge_MergeImageField (Object sender, MergeImageFieldEventArgs field) { String filePath = field.getImageFileName(); if (filePath != null && !"".equals(filePath)) { try { field.setImage(filePath); } catch (Exception e) { e.printStackTrace(); } } } }
Создание шаблона, содержащего поля Mail Merge, на Java

Слияние полей с данными
