Alex Rivera | Logout

Merging docx files together including headers, footers and pictures

Asked 2010-10-10T11:27:22.753
10

I've to merge multiple DOCX files (created with DocX Package) into one big file. I've managed to merge multiple files already but I fail to merge Headers and Footers (they differ between files, pages). I've tried both DocX package and MS Office COM Interop and it simply doesn't want to merge the headers / footers. They are skipped.

Does anyone can provide solution that would work? Can be anything really (including conversion to PDF using PDFCreator COM, or Interop or DocX).

I've also tried PDFCreator Sample in C# and it converts nicely one document to PDF but I don't know how to provide multiple documents to it so it would create one big PDF. So if anyone can provide a good (free) way it will be appreciated.

This is what i use:

internal static class DocumentsMerging {
    private static object missing = Type.Missing;
    private static ApplicationClass wordApplication { get; set; }
    private static void addDocument(object path, Document doc, bool firstDocument) {
        object subDocPath = path;
        var subDoc = wordApplication.Documents.Open(ref subDocPath, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
        try {
            if (!firstDocument) {
                insertPageBreak(doc);
            }
            object docStart = doc.Content.End - 1;
            object docEnd = doc.Content.End;
            object start = subDoc.Content.Start;
            object end = subDoc.Content.End;
            Range rng = doc.Range(ref docStart, ref docEnd);
            rng.FormattedText = subDoc.Range(ref start, ref end);
            //if (!lastDocument) {
            //}
        } finally {
            subDoc
Edit
Report

1 Answer

6

Check this out http://devpinoy.org/blogs/keithrull/archive/2007/05/23/how-to-merge-multiple-microsoft-word-documents-in-c.aspx

Change this line:

object pageBreak = Word.WdBreakType.wdPageBreak;

to this

object pageBreak = Word.WdBreakType.wdSectionBreakNextPage;

To get the heading and footer from the second document.

Adding in the entire method and how to call it in case the source changes.

The Class:

using System;
using Word = Microsoft.Office.Interop.Word;
using System.Configuration;

namespace KeithRull.Utilities.OfficeInterop
{
  public class MsWord
  {
    /// <summary>
    /// This is the default Word Document Template file. I suggest that you point this to the location
    /// of your Ms Office Normal.dot file which is usually located in your Ms Office Templates folder.
    /// If it does not exist, what you could do is create an empty word document and save it as Normal.dot.
    /// </summary>
    private static string defaultWordDocumentTemplate = @"Normal.dot";

    /// <summary>
    /// A function that merges Microsoft Word Documents that uses the default template
    /// </summary>
    /// <param name="filesToMerge">An array of files that we want to merge</param>
    /// <param name="outputFilename">The filename of the merged document</param>
    /// <param name="insertPageBreaks">Set to true if you want to have page breaks inserted after each document</param>
    public static void Merge(string[] filesToMerge, string outputFilename, bool insertPageBreaks)
    {
        Merge(filesToMerge, outputFilename, insertPageBreaks, defaultWordDocumentTemplate);
    }

    /// <summary>
    /// A function that merges Microsoft Word Documents that uses a
answered 2010-10-14T03:11:48.963

Your Answer