Foxtable(狐表)用户栏目专家坐堂 → iTextSharp怎么实现多个pdf的合并呢?并且在合并的pdf右上角输入页码?


  共有1164人关注过本帖平板打印复制链接

主题:iTextSharp怎么实现多个pdf的合并呢?并且在合并的pdf右上角输入页码?

帅哥哟,离线,有人找我吗?
cnsjroom
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
iTextSharp怎么实现多个pdf的合并呢?并且在合并的pdf右上角输入页码?  发帖心情 Post By:2023/11/19 2:52:00 [只看该作者]

iTextSharp怎么实现多个pdf的合并,生成新的pdf呢?并且在合并的pdf右上角输入页码?
pdf 目录中有多个pdf文件,每个文件都有顺序号,名称格式为:【编号0】 - 名称封面页.pdf,【编号1】 - 名称目录页.pdf,【编号2】 - 名称123.pdf,【编号3】 - 名称123456.pdf……
1、怎么实现获取每个pdf文件的页数,并将所有pdf的页数进行汇总统计。【已实现】
2、怎么实现以pdf文件名称前面的编号012345678……为顺序,依次将多个pdf文件合并成一个名为合并.pdf文件呢?
3、怎么实现在新生成的pdf中从封面页+目录页页数之后开始,假定封面页1页,目录页2页在新的pdf文件右上角指定位置X200Y30从1开始输入页码。



以下内容是专门发给有点蓝浏览


1、怎么实现获取每个pdf文件的页数,并将所有pdf的页数进行汇总统计。【已实现】
获取目录下pdf对应的所有页码总数:
Dim ymsum As Integer = 0
For Each File As String In FileSys.GetFiles("C:\Users\Administrator\Desktop") '遍历指定目录下的文件
    If FileSys.GetName(File).Contains(".pdf") Then '找到名称中含pdf的文件
        Output.Show(File)       
        Dim reader As New iTextSharp.text.pdf.PdfReader(File) '获取文件的页数
        output.Show(reader.NumberOfPages)
        ymsum = ymsum + reader.NumberOfPages '统计总的页数
    End If    
Next
Output.Show(ymsum) '输出指定目录下的pdf文件的所有页码数


2、怎么实现以pdf文件名称前面的编号012345678……为顺序,依次将多个pdf文件合并成一个pdf文件呢?
获取文件名称中的序号数字:
For Each File As String In FileSys.GetFiles("C:\Users\Administrator\Desktop") '遍历指定目录下的文件
    Dim filename As String = FileSys.GetName(File)
    If filename.Contains(".pdf") Then
        If filename.Contains("-名称") Then
            Output.Show(filename)
            Dim Values() As String
            Values = filename.split("-名称")
            For Index As Integer = 0 To Values.Length - 1
                If Values(1).Contains("名称") = True Then
                    Output.Show("名称:" & Values(1).Replace("名称", "")) 
                End If 
                 If Values(0).Contains("编号") = True Then
                    Output.Show("序号:" & Values(0).Replace("【编号", "").Replace("】", "")) 
                End If 
            Next
        End If
    End If  
Next

输出结果为:
【编号0】 - 名称封面页.pdf
名称:封面页.pdf
序号:0
名称:封面页.pdf
序号:0
【编号1】 - 名称目录页.pdf
名称:目录页.pdf
序号:1
名称:目录页.pdf
序号:1
【编号2】 - 名称123.pdf
名称:123.pdf
序号:2
名称:123.pdf
序号:2
【编号3】 - 名称123456.pdf
名称:123456.pdf
序号:3
名称:123456.pdf
序号:3


3、怎么实现在新生成的pdf中从封面页+目录页页数之后开始,假定封面页1页,目录页2页在新的pdf文件右上角指定位置X200Y30从1开始输入页码。

获取封面页+目录页页码总数:
Dim ymsum As Integer = 0
For Each File As String In FileSys.GetFiles("C:\Users\Administrator\Desktop") '遍历指定目录下的文件
    If FileSys.GetName(File).Contains("封面页.pdf") Then '找到名称中含pdf的文件
        Dim reader As New iTextSharp.text.pdf.PdfReader(File) '获取文件的页数
        ymsum = ymsum + reader.NumberOfPages '统计总的页数
        reader.Close()
    End If
    If FileSys.GetName(File).Contains("目录页.pdf") Then '找到名称中含pdf的文件
        Dim reader As New iTextSharp.text.pdf.PdfReader(File) '获取文件的页数
        ymsum = ymsum + reader.NumberOfPages '统计总的页数
        reader.Close()
    End If
Next
Output.Show("封面+目录数:" & ymsum) 

求助部分:怎么实现多个pdf合并,并写入页码
For Each File As String In FileSys.GetFiles("C:\Users\Administrator\Desktop") '遍历指定目录下的文件
    If FileSys.GetName(File).Contains(".pdf") Then '找到名称中含pdf的文件
        Output.Show(File)
        Dim reader As New iTextSharp.text.pdf.PdfReader(File) '获取文件的页数
        Dim document As New iTextSharp.text.Document(reader.GetPageSizeWithRotation(1)) '根据第一页的大小创建一个新的PDF文档;
        Dim n As Integer = ymsum '获取原始PDF文件的总页数;
        Dim baos As New IO.FileStream("d:\123456.pdf", IO.FileMode.Create, IO.FileAccess.Write) '创建一个新的PDF文件流,用于输出修改后的PDF;
        Dim copy As New iTextSharp.text.pdf.PdfCopy(document, baos) '创建一个PdfCopy对象,用于将多个PDF文件合并为一个PDF文件,此处将原始PDF文件的每一页加入到新的PDF文件中;
        copy.ViewerPreferences = iTextSharp.text.pdf.PdfWriter.HideToolbar Or iTextSharp.text.pdf.PdfWriter.HideMenubar Or iTextSharp.text.pdf.PdfWriter.HideWindowUI '设置PDF文件的阅读选项,包括隐藏工具栏、菜单栏和窗口UI;
        '往pdf中写入内容
        document.Open()
        For i As Integer = 1 To n
            Dim page As iTextSharp.text.pdf.PdfImportedPage = copy.GetImportedPage(reader, i)
            copy.AddPage(page) '将新的PDF文件写入到PDF流中;
        Next
        '关闭PDF文件和流,释放资源。
        document.Close()
        reader.Close()
    End If
Next

 回到顶部