-1

我正在用 c# 编码以将 PDF 文档转换为 MS Word 并根据我的需要格式化 word 文档。

谁能建议我如何

  1. 将光标焦点设置到每个句子的末尾,并在每个句子的末尾按回车键。
  2. 仅选择并格式化每个段落的第一个字母。

这是我正在使用的代码:

for (int i = 0; i < selectedFiles; i++)
{

    inFileName = openFile.SafeFileNames[i];
    outFileName = inFileName;
    pos = inFileName.LastIndexOf('.');
    if (pos > 0)
        outFileName = outFileName.Substring(0, pos);
    outFileName += ".doc";

    //outFileName = savePDFFile.FileName;

    //Convert(openFile.SafeFileNames[i], outFileName);
    Convert(cPath + inFileName, cPath + outFileName);

    Object oMissing = System.Reflection.Missing.Value;
    //OBJECTS OF FALSE AND TRUE
    Object oTrue = true;
    Object oFalse = false;
    //Create word document  


    Word.Application oWord = new Word.Application();
    Word.Document oWordDoc = new Word.Document();
    Object oTemplatePath = cPath + outFileName;

    oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);

    #region Replace Keyword
    this.FindAndReplace(oWord, "   ", " ");
    this.FindAndReplace(oWord, ". ", ".");
    this.FindAndReplace(oWord, " . ", ".");
    this.FindAndReplace(oWord, " .", ".");
    this.FindAndReplace(oWord, "-", " – ");
    this.FindAndReplace(oWord, ",", " ,");
    this.FindAndReplace(oWord, " , ", " ,");
    this.FindAndReplace(oWord, " -", "-");
    this.FindAndReplace(oWord, " - ", "-");
    this.FindAndReplace(oWord, "- ", "-");
    #endregion Replace Keyword
    Word.Range rng = null;
    if (oWordDoc.Sentences.Count > 0)
    {
        object startLocation = oWordDoc.Sentences[1].Start;
        object endLocation = oWordDoc.Sentences[1].End;
        // Supply a Start and End value for the Range. 
        rng = oWordDoc.Range(ref startLocation, ref endLocation);
        // Select the Range.
        rng.Select();
    }
    object missing = Missing.Value;
    object what = Word.WdGoToItem.wdGoToLine;
    object which = Word.WdGoToDirection.wdGoToLast;
    oWordDoc.GoTo(ref what, ref which, ref missing, ref missing);
    for (int j = 0; j < oWordDoc.Sentences.Count; j++)
    {
        //oWordDoc.Sentences[j].Text = oWordDoc.Sentences[j].Text.ToString() + "\n";
    }
    // add header
    foreach (Section section in oWordDoc.Sections)
    {
        Range headerRange = section.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
        headerRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft;
        headerRange.Font.Size = 12;
        headerRange.Font.Name = "Ariel";

        if (rng != null)
            headerRange.Text = rng.Text.Trim();
    }
    rng.Text = "";
    object findStr = "rr"; //sonething to find
    while (oWord.Selection.Find.Execute(ref findStr))  //found...
    {
        //change font and format of matched words
        oWord.Selection.Font.Name = "Tahoma"; //change font to Tahoma
        oWord.Selection.Font.Size = 48;
        oWord.ActiveWindow.Selection.ParagraphFormat.LineSpacingRule = Word.WdLineSpacing.wdLineSpaceSingle;
        //oWord.ActiveWindow.Selection.ParagraphFormat.SpaceAfter = 0.0F;
        oWord.Selection.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdRed;  //change color to red
    }
    oWordDoc.Content.Font.Name = "Franklin Gothic Book";
    oWordDoc.Content.Font.Size = 11.5F;
    oWordDoc.Content.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify;
    //oWordDoc.Content.Start = 0;
    oWordDoc.ShowGrammaticalErrors = false;
    oWordDoc.ShowSpellingErrors = false;
    //oWordDoc.Content.Sections.First
    oWordDoc.SaveAs(cPath + outFileName);
    progressBar1.Value = (((i + 1) * 100) / selectedFiles);
}
4

2 回答 2

1

您可以使用InsertParagraphAfter函数在每个句子后添加新行。

就像是:

       int count = oWordDoc.Sentences.Count;
       for(int i=1; i<=count;i++)
       {
          object startLocation = oWordDoc.Sentences[i].Start;
          object endLocation = oWordDoc.Sentences[i].End;
          // Supply a Start and End value for the Range. 
          rng = oWordDoc.Range(ref startLocation, ref endLocation);
          // Select the Range.
          rng.Select();
          rng.InsertParagraphAfter();
       }
于 2013-03-14T08:26:31.977 回答
1

使用 Range.Move 方法在句首或句尾之间移动光标。

试试下面的代码。

oRange.Move(WdUnits.wdSentence, -1);

如果有帮助,请将答案标记为肯定。

谢谢

于 2020-07-22T13:23:14.880 回答