如何实现pdf和word文档的按x页拆分功能

请问word和pdf的按x页拆分功能官方有提供内置API来实现吗?比如我有一个文档,我不希望逐页拆分,我希望按照每2/3/5/10页拆分,我尝试写过,但是都有点问题,代码我已经没有了。

希望可以解答下我的疑惑。

@jidesheng

为了分割PDF文件,您可以使用以下代码片段:

using Aspose.Pdf;
using System;
using System.Collections.Generic;

public class PdfSplitter
{
    public static void SplitPdf(string inputPdfPath, int[] pageCounts)
    {
        Document pdfDocument = new Document(inputPdfPath);

        string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(inputPdfPath);
        string fileExtension = System.IO.Path.GetExtension(inputPdfPath);

        int startPage = 1;
        int endPage = 0;

        foreach (int pageCount in pageCounts)
        {
            endPage += pageCount;

            if (endPage > pdfDocument.Pages.Count)
            {
                endPage = pdfDocument.Pages.Count;
            }

            string outputPdfPath = $"{fileNameWithoutExtension}_Pages_{startPage}_{endPage}{fileExtension}";

            Document newPdfDocument = new Document();
            for (int i = startPage; i <= endPage; i++)
            {
                newPdfDocument.Pages.Add(pdfDocument.Pages[i]);
            }

            newPdfDocument.Save(outputPdfPath);

            Console.WriteLine($"PDF file {outputPdfPath} created with pages {startPage} to {endPage}");

            startPage = endPage + 1;
        }
    }

    public static void Main(string[] args)
    {
        // Specify the input PDF file path
        string inputPdfPath = "your_input_pdf_file.pdf";

        // Specify the page counts for splitting
        int[] pageCounts = { 2, 3, 5, 10 };

        // Call the SplitPdf method
        SplitPdf(inputPdfPath, pageCounts);
    }
}

将“your_input_pdf_file.pdf”替换为实际 PDF 文件的路径。 pageCounts 数组确定每个分割 PDF 文件将有多少页。

此示例假设您已安装 Aspose.PDF for .NET。根据您的项目结构和要求调整代码。我们将尽快就 Aspose.Words 与您联系。

其实我的意思是按照每X页拆分,就是Aspose文档默认给的是逐页拆分,我想实现每隔X页拆分,比如一份10页的文档,我想每隔两页拆成一个文件,或者是每隔三页拆成一个文件,您发我的代码实现的是同一个功能吗,我看起来感觉像是按照页面范围拆分了?

谢谢,我用这段代码可以了

 int OutPageCount = 0;
                int TotalPages = TempLoadDocument.Pages.Count;
                for(int PageIndex = 1; PageIndex <= TotalPages; PageIndex += SplitPageCount)
                {
                    OutPageCount++;
                    int SplitEndPage = PageIndex + SplitPageCount - 1;
                    if(SplitEndPage>TotalPages)
                    {
                        SplitEndPage = TotalPages;
                    }

                    Aspose.Pdf.Document PerDocument = new Aspose.Pdf.Document();
                    for(int j= PageIndex; j<=SplitEndPage;j++)
                    {
                        PerDocument.Pages.Add(TempLoadDocument.Pages[j]);
                    }
                    string ExportPerPdfFileName = $"{Path.Combine(SavedPath,Path.GetFileNameWithoutExtension(DocumentFileName))}_第{OutPageCount}页.pdf";
                    PerDocument.Save(ExportPerPdfFileName);
                }

@jidesheng

很高兴知道您能够使用此代码片段来实现您的要求。我们很快就会让您了解 Aspose.Words。

谢谢,不过我也已经弄出来了,是这段代码:

 int OutPageCount = 0;
                int TotalPages = TempDocument.PageCount;
                for (int pageIndex = 0; pageIndex < TempDocument.PageCount; pageIndex+= SplitPerCount)
                {
                    OutPageCount++;

                    int LeftPage = TotalPages - pageIndex;
                    int PageExtra = Math.Min(SplitPerCount,LeftPage);
                    if (PageExtra>0)
                    {
                        string SavedFileName = $"{Path.Combine(SavedPath, Path.GetFileNameWithoutExtension(DocumentFileName))}_第{OutPageCount}页.docx";
                        Aspose.Words.Document TempSplitDocument = TempDocument.ExtractPages(pageIndex, PageExtra);
                        TempSplitDocument.CompatibilityOptions.OptimizeFor(Aspose.Words.Settings.MsWordVersion.Word2010);
                        TempSplitDocument.CompatibilityOptions.BalanceSingleByteDoubleByteWidth = true;
                        TempSplitDocument.Save(SavedFileName, TempSaveOption);
                    }
                }

可以关闭issue了。

@jidesheng

很高兴知道您能够自己找到解决方案。请随时创建一个新主题,您是否需要进一步帮助。