Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何在将大型pdf文件拆分为多个小型pdf文件时写入页码_C#_Pdf_Itext - Fatal编程技术网

C#如何在将大型pdf文件拆分为多个小型pdf文件时写入页码

C#如何在将大型pdf文件拆分为多个小型pdf文件时写入页码,c#,pdf,itext,C#,Pdf,Itext,我有很多大的pdf文件,其中有很多页面。我必须把那些大的pdf文件分割成多个小的pdf文件 我有一个代码,我可以使用它将大型pdf拆分为多个小型pdf文件。 下面的代码,我正在使用的分裂 private void SplitAndSaveInterval(string pdfFilePath, string outputPath, int startPage, int interval, string pdfFileName) { using (PdfReader reader =

我有很多大的pdf文件,其中有很多页面。我必须把那些大的pdf文件分割成多个小的pdf文件

我有一个代码,我可以使用它将大型pdf拆分为多个小型pdf文件。 下面的代码,我正在使用的分裂

private void SplitAndSaveInterval(string pdfFilePath, string outputPath, int startPage, int interval, string pdfFileName)  
{
    using (PdfReader reader = new PdfReader(pdfFilePath))  
    {  
        Document document = new Document();  
        PdfCopy copy = new PdfCopy(document, new FileStream(outputPath + "\\" + pdfFileName + ".pdf", FileMode.Create));  
        document.Open();  

        for (int pagenumber = startPage; pagenumber < (startPage + interval); pagenumber++)  
        {  
            if (reader.NumberOfPages >= pagenumber)  
            {  
                copy.AddPage(copy.GetImportedPage(reader, pagenumber));  
            }  
            else  
            {  
                break;  
            }  
        }  

        document.Close();  
    }  
} 
private void SplitAndSaveInterval(字符串pdfFilePath、字符串outputPath、int startPage、int interval、字符串pdfFileName)
{
使用(PdfReader读取器=新PdfReader(pdfFilePath))
{  
文档=新文档();
PdfCopy copy=newpdfcopy(文档,新文件流(outputPath+“\\”+pdfFileName+“.pdf”,FileMode.Create));
document.Open();
对于(int pagenumber=起始页;pagenumber<(起始页+间隔);pagenumber++)
{  
如果(reader.NumberOfPages>=页码)
{  
copy.AddPage(copy.GetImportedPage(阅读器,页码));
}  
其他的
{  
打破
}  
}  
document.Close();
}  
} 
此代码取自

我有一个添加页码的例程。附件:

void AddPageNumber(string fileIn, string fileOut)
{
    byte[] bytes = File.ReadAllBytes(fileIn);
    Font blackFont = FontFactory.GetFont("Arial", 12, Font.NORMAL, BaseColor.BLACK);
    using (MemoryStream stream = new MemoryStream())
    {
        PdfReader reader = new PdfReader(bytes);
        using (PdfStamper stamper = new PdfStamper(reader, stream))
        {
            int pages = reader.NumberOfPages;
            for (int i = 1; i <= pages; i++)
            {
                ColumnText.ShowTextAligned(stamper.GetUnderContent(i), Element.ALIGN_RIGHT, new Phrase(i.ToString(), blackFont), 568f, 15f, 0);
            }
        }
        bytes = stream.ToArray();
    }
    File.WriteAllBytes(fileOut, bytes);
}
void AddPageNumber(字符串文件输入,字符串文件输出)
{
byte[]bytes=File.ReadAllBytes(fileIn);
Font-blackFont=FontFactory.GetFont(“Arial”,12,Font.NORMAL,BaseColor.BLACK);
使用(MemoryStream stream=new MemoryStream())
{
PdfReader reader=新PdfReader(字节);
使用(PdfStamper压模=新PdfStamper(读卡器,流))
{
int pages=reader.NumberOfPages;

对于(int i=1;i看起来您正在使用iTextSharp,您是否从他们的文档中尝试了以下内容:

public void onEndPage(PdfWriter writer, Document document) {
Rectangle rect = writer.getBoxSize("art");
switch(writer.getPageNumber() % 2) {
case 0:
    ColumnText.showTextAligned(writer.getDirectContent(),
        Element.ALIGN_RIGHT, header[0],
        rect.getRight(), rect.getTop(), 0);
    break;
case 1:
    ColumnText.showTextAligned(writer.getDirectContent(),
        Element.ALIGN_LEFT, header[1],
        rect.getLeft(), rect.getTop(), 0);
    break;
}
ColumnText.showTextAligned(writer.getDirectContent(),
    Element.ALIGN_CENTER, new Phrase(String.format("page %d", pagenumber)),
    (rect.getLeft() + rect.getRight()) / 2, rect.getBottom() - 18, 0);
}

您使用的是不再受支持的旧版本的iText。如果升级到,您会注意到,与iText 5相比,使用iText 7要容易得多。您所指的页面是我2009年写的那本书的非法副本。那是9年前的版本。请升级到iText 7或解释为什么这不是一本书选项。op使用itext的
PdfCopy
类从现有pdf创建pdf。页面事件用于普通的
PdfWriter
从头开始创建pdf。我正在使用itextsharp库。现在告诉我,在使用PdfCopy类时,如何附加onEndPage事件?当pdf副本将添加每个页面时,我需要添加每个页面上都没有页面……这是怎么可能的?正如@mkl所解释的,你不能将页面事件与
PdfCopy
组合在一起。请升级到iText 7或解释为什么这不是你的选项。@BrunoLowagie itextsharp在大项目中使用。如果我升级,我可能需要测试大量代码以确保所有代码都正常工作。我依赖我的人经理。他可能不允许升级。我可以在新项目中使用itext7而不是在现有项目中使用。请询问您的经理该项目是否符合AGPL许可证。如果符合,请与iText软件共享更多信息。