Объединение файлов docx вместе, включая заголовки, нижние колонтитулы и изображения

Мне нужно объединить несколько файлов DOCX (созданных с помощью пакета DocX ]) в один большой файл. Мне уже удалось объединить несколько файлов, но я не могу объединить верхние и нижние колонтитулы (они различаются между файлами и страницами). Я пробовал пакет DocX и MS Office COM Interop, и он просто не хочет объединять верхние и нижние колонтитулы. Они пропускаются.

Кто-нибудь может предоставить решение, которое подойдет? На самом деле может быть что угодно (включая преобразование в PDF с помощью PDFCreator COM, или Interop, или DocX ).

Я также пробовал PDFCreator Sample на C #, и он прекрасно конвертирует один документ в PDF, но я не знаю, как предоставить ему несколько документов, чтобы получился один большой PDF. Так что, если кто-то может предоставить хороший (бесплатный) способ, он будет оценен.

Вот что я использую:

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.Close(ref missing, ref missing, ref missing);
        }
    }
    public static bool deleteFile(string fileName) {
        if (File.Exists(fileName)) {
            try {
                File.Delete(fileName);
                if (File.Exists(fileName)) {
                    return false;
                }
                return true;
            } catch (IOException) {
                DialogResult result = MessageBox.Show(new Form {TopMost = true}, "Plik " + fileName + " jest w użyciu lub nie masz uprawnień do zapisania raportu w tym miejscu. Czy chcesz spróbować ponownie?", "Błąd zapisu (000002)", MessageBoxButtons.YesNo, MessageBoxIcon.Stop);
                if (result == DialogResult.No) {
                    return false;
                }
                if (deleteFile(fileName)) {
                    return true;
                }
            } catch (Exception e) {
                MessageBox.Show(new Form {TopMost = true}, "Plik " + fileName + " nie może zostać skasowany. Błąd " + Environment.NewLine + Environment.NewLine + e, "Błąd zapisu (000003)", MessageBoxButtons.YesNo, MessageBoxIcon.Stop);
                return false;
            }
        } else {
            return true;
        }
        return false;
    }
    public static void documentsMerge(object fileName, List arrayList) {
        // object fileName = Path.Combine(Environment.CurrentDirectory, @"NewDocument.doc");
        bool varTest = deleteFile(fileName.ToString());
        if (varTest) {
            try {
                wordApplication = new ApplicationClass();
                var doc = wordApplication.Documents.Add(ref missing, ref missing, ref missing, ref missing);
                try {
                    doc.Activate();
                    int count = 0;
                    foreach (var alItem in arrayList) {
                        addDocument(alItem, doc, count == 0);
                        count++;
                    }
                    // addDocument(@"D:\Projects\WordTests\ConsoleApplication1\Documents\Doc1.doc", doc ) ; //, false);
                    // addDocument(@"D:\Projects\WordTests\ConsoleApplication1\Documents\Doc2.doc", doc ) ; //, true);
                    doc.SaveAs(ref fileName, 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);
                } finally {
                    doc.Close(ref missing, ref missing, ref missing);
                }
            } finally {
                wordApplication.Quit(ref missing, ref missing, ref missing);
            }
        } else {
            return;
        }
    }
    private static void insertPageBreak(Document doc) {
        object docStart = doc.Content.End - 1;
        object docEnd = doc.Content.End;
        Range rng = doc.Range(ref docStart, ref docEnd);
       // object pageBreak = WdBreakType.wdPageBreak;
        object pageBreak = WdBreakType.wdSectionBreakNextPage;

        rng.InsertBreak(ref pageBreak);
    }
}

9
задан MadBoy 15 October 2010 в 11:25
поделиться