Aspose.Words 取得的頁數與實際Word檔的頁數不符合

您好,
我透過 Aspose.Words 開啟 Word 檔時,取得的頁碼為 16,但實際 Word 檔的頁數為 14。
odd2.doc.zip (700.7 KB)

程式碼如下,

var doc = new Aspose.Words.Document("odd2.doc");
Console.WriteLine($"pageCount:{doc.PageCount}");
//pageCount:16

透過 Section 取得所在的頁碼時,也不正確,程式碼如下,

var doc = new Aspose.Words.Document(“odd2.doc”);
Console.WriteLine($“pageCount:{doc.PageCount}”);
var layout = new LayoutCollector(doc);
foreach (var node in doc.ChildNodes)
{
if (node.NodeType == NodeType.Section)
{
var section = (Section)node;
var sectionStart = section.PageSetup.SectionStart;
Console.WriteLine($“Section:{sectionStart}”);
Console.WriteLine($“layout.GetStartPageIndex:{layout.GetStartPageIndex(section)}”);
Console.WriteLine($“layout.GetEndPageIndex:{layout.GetEndPageIndex(section)}”);
}
}

輸出結果為,

pageCount:16
Section:NewPage
layout.GetStartPageIndex:1
layout.GetEndPageIndex:1
Section:OddPage
layout.GetStartPageIndex:3
layout.GetEndPageIndex:3
Section:NewPage
layout.GetStartPageIndex:4
layout.GetEndPageIndex:5
Section:OddPage
layout.GetStartPageIndex:7
layout.GetEndPageIndex:8
Section:NewPage
layout.GetStartPageIndex:9
layout.GetEndPageIndex:11
Section:OddPage (Section 6)
layout.GetStartPageIndex:13
layout.GetEndPageIndex:13
Section:NewPage (Section 7)
layout.GetStartPageIndex:14
layout.GetEndPageIndex:16

Section 6 實際在 Word 中是第 11 頁,Section 7 是 第 12 頁,
Aspose 中卻是 第 13 頁,及 14 頁。

@rainmaker_ho

请注意,在将文档呈现为固定页面格式(JPEG,PNG,PDF或XPS)或获取页数时,Aspose.Words需要TrueType字体。 您需要在将文档转换为PDF的计算机上安装文档中使用的字体。 请参考以下文章:

使用TrueType字体
操作和替换TrueType字体

如果仍然遇到问题,请ZIP并在此处附加以下字体进行测试。 我们将对此问题进行调查,并为您提供更多信息。

  • DFKai-SB
  • ‘新細明體’
  • ‘標楷體’

您好,
我將Section中所有Run的字型改成了「新細明體」,然後再另存一個檔案,取出的 PageCount 還是 16,但實際上卻是 14。

var doc = new Aspose.Words.Document(“odd2.doc”);
Console.WriteLine($“pageCount:{doc.PageCount}”);
var layout = new LayoutCollector(doc);
foreach (var node in doc.ChildNodes)
{
  if (node.NodeType == NodeType.Section)
  {
    var section = (Section)node;
    var sectionStart = section.PageSetup.SectionStart;
    var nodes = section.GetChildNodes(NodeType.Run, true);
    foreach(Run r in nodes)
    {
                        Console.WriteLine(r.Font.Name);
                        r.Font.Name = "新細明體";
    }    
  }
}
doc.Save("odd2_2.doc");

doc = new Document(“odd2_2.doc”);
Console.WriteLine($“pageCount:{doc.PageCount}”);

@rainmaker_ho

请在此处共享字体详细信息以进行测试。 页面布局根据字体格式更改。 因此,我们需要字体详细信息以进行进一步测试。

您好,
我在Windows 10 環境透過 VS.NET Aspose 來開啟 doc 檔,取得的頁數是 14,
但在 Mac 環境透過 VS.NET Aspose 來開啟 doc 檔,取得的頁數是 16。
應該是 Mac 環境才有問題。

@rainmaker_ho

如果您无法向我们提供所需的字体,我们将无法测试您的案例并进行记录。

请压缩并在此处附加字体以进行测试。 似乎此问题与字体丢失有关。 我们需要您的文档中使用的字体进行测试。 谢谢你的配合。

您好,
因為新細明體檔案太大,所以附上標楷體
fonts.zip (2.7 MB)

我發現這個問題跟作業系統有關係,只有在 Mac 的作業系統下,透過 Aspose.Words 的 Document 開啟 doc 檔案,才會有 頁數與實際頁數不同的問題。 在 Windows 10 的作業系統中,是正常的。

@rainmaker_ho

我们测试了sceanrio,发现缺少“新细明体”字体。 请共享此字体,以便我们可以测试此问题。

请使用最新版本的Aspose.Words for .NET 20.7,然后在MAC系统上将文档转换为PDF。 请ZIP并在此处附加PDF文件以进行测试。

您好,
字型如下,
https://1drv.ms/u/s!Amctqf6I8YYKishpIebhAe_f6-MhQQ?e=1MdWLY

@rainmaker_ho

感谢您共享字体。 我们已经使用最新版本的 .NET 20.10的Aspose.Words测试了该方案,但没有发现此问题。 Document.PageCount属性返回14。

您好,
我使用以下的檔案,
Word開起來顯示是6頁,但用 Aspose.Word 來開啟,
他的 PageCount 為 5。
sdo_old.zip (36.6 KB)

@rainmaker_ho

我们已经在MS Word 2016中打开了此文档,它显示5页。 请检查所附图像以获取详细信息。ms word 2016.png (44.1 KB)

您好,
請參考附件,我打開是顯示 6 頁,第二頁是空白頁。
sdo.jpg (153.4 KB)
Mac 繁體中文
Thanks

@rainmaker_ho

请注意,页面布局引擎模仿了MS Word 2019的行为。如果您在MS Word 2019中打开文档,并且系统上安装了所有字体,则将获得5页。

您好,
這文件本就是在 Windows 繁體中文作業系統中產生的。
請問可以透過什麼程式碼來列出沒有安裝的字型以方便我來驗證嗎? 謝謝您。

@rainmaker_ho

下面的代码示例演示如何将文档转换为PDF并打印缺少的字体名称。

Document document = new Document(MyDir + "input.docx");
document.WarningCallback = new HandleDocumentWarnings();
document.Save(MyDir + "output.pdf");

public class HandleDocumentWarnings : IWarningCallback
{
    /// <summary>
    /// Our callback only needs to implement the "Warning" method. This method is called whenever there is a
    /// potential issue during document procssing. The callback can be set to listen for warnings generated during document
    /// load and/or document save.
    /// </summary>
    public void Warning(WarningInfo info)
    {
        // We are only interested in fonts being substituted.
        if (info.WarningType == WarningType.FontSubstitution)
        {
            Console.WriteLine(info.WarningType + " :: " + info.Description.ToString());
        }
    }
}

errorPage.doc.zip (37.0 KB)
您好,
我使用上面的檔案,
然後用下面的程式來顯示頁數,顯示的 PageNumber 是 5,但用 Word 來開卻是 6 頁。
而 Warning 的 function 完全沒有被執行到哦! 是不是表示沒有缺字型呢? 謝謝您。

public class HandleDocumentWarnings : Aspose.Words.IWarningCallback
{
	/// <summary>
	/// Our callback only needs to implement the "Warning" method. This method is called whenever there is a
	/// potential issue during document procssing. The callback can be set to listen for warnings generated during document
	/// load and/or document save.
	/// </summary>
	public void Warning(Aspose.Words.WarningInfo info)
	{
		// We are only interested in fonts being substituted.
		if (info.WarningType == Aspose.Words.WarningType.FontSubstitution)
		{
			Console.WriteLine(info.WarningType + " :: " + info.Description.ToString());
		}
	}
}


var wordFile = @"C:\page.doc";
var doc = new Aspose.Words.Document(wordFile);
doc.WarningCallback = new HandleDocumentWarnings();
Console.WriteLine($"pageCount:{doc.PageCount}");
doc.Save(@"C:\page2.doc");

@rainmaker_ho

是的,如果您没有收到任何丢失的字体通知,则将安装文档中使用的所有字体。

关于页码问题,请注意Aspose.Words模仿MS Word的行为。 请检查由MS Word生成的附件输出PDF文件。ms word.pdf (110.9 KB)

您好,
開啟 word ,另存成 pdf 的結果如下,
errorPage.pdf (183.8 KB)
結果有6頁哦!

@rainmaker_ho

Word文档由Word for MAC转换。 请注意,Aspose.Words模仿MS Word 2019的行为,而Aspose.Words生成相同的输出。 希望这可以清除查询的详细信息。