package com.aspose.words.examples.mail_merge; import com.aspose.words.Document; import com.aspose.words.examples.Utils; import java.io.File; import java.sql.*; import java.text.MessageFormat; import java.util.Hashtable; public class MultipleDocsInMailMerge { public static void main(String[] args) throws Exception { // The path to the documents directory. String dataDir = Utils.getDataDir(MultipleDocsInMailMerge.class); produceMultipleDocuments(dataDir, "TestFile.doc"); } public static void produceMultipleDocuments(String dataDir, String srcDoc) throws Exception { // Open the database connection. ResultSet rs = getData(dataDir, "SELECT * FROM Customers"); // Open the template document. Document doc = new Document(dataDir + srcDoc); // A record of how many documents that have been generated so far. int counter = 1; // Loop though all records in the data source. while(rs.next()) { // Clone the template instead of loading it from disk (for speed). Document dstDoc = (Document)doc.deepClone(true); // Extract the data from the current row of the ResultSet into a Hashtable. Hashtable dataMap = getRowData(rs); // Execute mail merge. dstDoc.getMailMerge().execute(keySetToArray(dataMap), dataMap.values().toArray()); // Save the document. dstDoc.save(MessageFormat.format(dataDir + "TestFile Out {0}.doc", counter++)); } } /** * Creates a Hashtable from the name and value of each column in the current row of the ResultSet. */ public static Hashtable getRowData(ResultSet rs) throws Exception { ResultSetMetaData metaData = rs.getMetaData(); Hashtable values = new Hashtable(); for(int i = 1; i <= metaData.getColumnCount(); i++) { values.put(metaData.getColumnName(i), rs.getObject(i)); } return values; } /** * Utility function that returns the keys of a Hashtable as an array of Strings. */ public static String[] keySetToArray(Hashtable table) { return (String[])table.keySet().toArray(new String[table.size()]); } /** * Utility function that creates a connection to the Database. */ public static ResultSet getData(String dataDir, String query) throws Exception { // Load a DB driver that is used by the demos Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // Compose connection string. String connectionString = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};" + "DBQ=" + new File(dataDir, "Customers.mdb") + ";UID=Admin"; // DSN-less DB connection. Connection connection = DriverManager.getConnection(connectionString); Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); return statement.executeQuery(query); } }