美文网首页
程序自动创建word自动目录TOC

程序自动创建word自动目录TOC

作者: 天堂岗 | 来源:发表于2019-11-25 23:00 被阅读0次

    table of content:

    1 手动创建自动目录: 引用->目录->自动目录

    2 自动生成文件中带自动创建目录解决方案:

    1. 在模版文件中包含toc块.
    2. 填充所有内容.
    3. 用sharepoint打开文件另存,将更新所有动态域,关键代码:
      job.Settings.UpdateFields = true;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.SharePoint;
    using Microsoft.Office.Word.Server.Conversions;
    
    class Program
    {
        static void Main(string[] args)
        {
            string siteUrl = "http://localhost";
            // If you manually installed Word automation services, then replace the name
            // in the following line with the name that you assigned to the service when
            // you installed it.
            string wordAutomationServiceName = "Word Automation Services";
            using (SPSite spSite = new SPSite(siteUrl))
            {
                ConversionJob job = new ConversionJob(wordAutomationServiceName);
                job.UserToken = spSite.UserToken;
                job.Settings.UpdateFields = true;
                job.Settings.OutputFormat = SaveFormat.PDF;
                job.AddFile(siteUrl + "/Shared%20Documents/Test.docx",
                    siteUrl + "/Shared%20Documents/Test.pdf");
                job.Start();
            }
        }
    }
    

    更新toc例子

    Console.WriteLine("Querying for Test.docx");
    SPList list = spSite.RootWeb.Lists["Shared Documents"];
    SPQuery query = new SPQuery();
    query.ViewFields = @"<FieldRef Name='FileLeafRef' />";
    query.Query =
      @"<Where>
          <Eq>
            <FieldRef Name='FileLeafRef' />
            <Value Type='Text'>Test.docx</Value>
          </Eq>
        </Where>";
    SPListItemCollection collection = list.GetItems(query);
    if (collection.Count != 1)
    {
        Console.WriteLine("Test.docx not found");
        Environment.Exit(0);
    }
    Console.WriteLine("Opening");
    SPFile file = collection[0].File;
    byte[] byteArray = file.OpenBinary();
    using (MemoryStream memStr = new MemoryStream())
    {
        memStr.Write(byteArray, 0, byteArray.Length);
        using (WordprocessingDocument wordDoc =
            WordprocessingDocument.Open(memStr, true))
        {
            Document document = wordDoc.MainDocumentPart.Document;
            Paragraph firstParagraph = document.Body.Elements<Paragraph>()
                .FirstOrDefault();
            if (firstParagraph != null)
            {
                Paragraph newParagraph = new Paragraph(
                    new ParagraphProperties(
                        new ParagraphStyleId() { Val = "Heading1" }),
                    new Run(
                        new Text("About the Author")));
                Paragraph aboutAuthorParagraph = new Paragraph(
                    new Run(
                        new Text("Eric White")));
                firstParagraph.Parent.InsertBefore(newParagraph, firstParagraph);
                firstParagraph.Parent.InsertBefore(aboutAuthorParagraph,
                    firstParagraph);
            }
        }
        Console.WriteLine("Saving");
        string linkFileName = file.Item["LinkFilename"] as string;
        file.ParentFolder.Files.Add(linkFileName, memStr, true);
    }
    Console.WriteLine("Starting conversion job");
    ConversionJob job = new ConversionJob(wordAutomationServiceName);
    job.UserToken = spSite.UserToken;
    job.Settings.UpdateFields = true;
    job.Settings.OutputFormat = SaveFormat.Document;
    job.AddFile(siteUrl + "/Shared%20Documents/Test.docx",
        siteUrl + "/Shared%20Documents/TestWithNewToc.docx");
    job.Start();
    Console.WriteLine("After starting conversion job");
    while (true)
    {
        Thread.Sleep(5000);
        Console.WriteLine("Polling...");
        ConversionJobStatus status = new ConversionJobStatus(
            wordAutomationServiceName, job.JobId, null);
        if (status.Count == status.Succeeded + status.Failed)
        {
            Console.WriteLine("Completed, Successful: {0}, Failed: {1}",
                status.Succeeded, status.Failed);
            break;
        }
    }
    

    参考:
    https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/ff742315(v=office.14)?redirectedfrom=MSDN#woas_integrating

    相关文章

      网友评论

          本文标题:程序自动创建word自动目录TOC

          本文链接:https://www.haomeiwen.com/subject/lnsswctx.html