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
当前合并pdf代码,且可以成功合并
片段1
Dim reader1 As New iTextSharp.text.pdf.PdfReader("d:\12345678.pdf") '获取文件的页数
Dim document As New iTextSharp.text.Document(reader1.GetPageSizeWithRotation(1)) '根据第一页的大小创建一个新的PDF文档;
片段2
'Dim document As New iTextSharp.text.Document() '根据第一页的大小创建一个新的PDF文档;
接上片段1或片段2其中一个
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;
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 n As Integer = reader.NumberOfPages '获取原始PDF文件的总页数;
'往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文件和流,释放资源。
reader.Close()
End If
Next
document.Close()
baos.Close() '关闭PDF文件流,释放资源。
合并pdf且编码:红色部分代码提示如下报错 老师们有没有办法解决呢?
---------------------------
版本:2022.8.18.1
---------------------------
代码执行出错,错误信息:
iTextSharp.text.DocumentException: The original document was reused. Read it again from file.
在 iTextSharp.text.pdf.PdfStamperImp..ctor(PdfReader reader, Stream os, Char pdfVersion, Boolean append)
在 UserCode.Test()
---------------------------
确定
---------------------------
Dim time As String = Format(Date.now, "yyyyMMddHHmmss")
Dim document As New iTextSharp.text.Document()
Dim totalCount As Integer = 0 '初始化计数器变量为0
Dim outpdf As String = "d:\" & time & "123456888.pdf"
Dim baos As New IO.FileStream(outpdf, IO.FileMode.Create, IO.FileAccess.Write)
Dim copy As New iTextSharp.text.pdf.PdfCopy(document, baos)
copy.ViewerPreferences = iTextSharp.text.pdf.PdfWriter.HideToolbar Or iTextSharp.text.pdf.PdfWriter.HideMenubar Or iTextSharp.text.pdf.PdfWriter.HideWindowUI
Dim outpdf1 As String = "d:\" & time & "888.pdf"
For Each file As String In FileSys.GetFiles("C:\Users\Administrator\Desktop")
If file.Contains(".pdf") Then
Dim reader As New iTextSharp.text.pdf.PdfReader(File)
Dim pageCount As Integer = reader.NumberOfPages '获取文件的页数
totalCount += pageCount '将文件的页数累加到计数器中
document.Open()
For i As Integer = 1 To pageCount '遍历每一页
Dim stamper As New iTextSharp.text.pdf.PdfStamper(reader, New IO.FileStream(outpdf1, IO.FileMode.Append)) '创建PdfStamper对象
Dim cb As iTextSharp.text.pdf.PdfContentByte = stamper.GetOverContent(i) '获取当前页的PdfContentByte对象
cb.BeginText() '开始添加标识符
Dim bf As iTextSharp.text.pdf.BaseFont = iTextSharp.text.pdf.BaseFont.CreateFont()
cb.SetFontAndSize(bf, 10)
cb.ShowTextAligned(iTextSharp.text.Element.ALIGN_CENTER, "Page " & (totalCount - pageCount + i), 300, 20, 0)
cb.EndText()
stamper.Close() '关闭PdfStamper对象
Dim page As iTextSharp.text.pdf.PdfImportedPage = copy.GetImportedPage(reader, i)
copy.AddPage(page)
Next
reader.Close()
End If
Next
document.Close()
baos.Close()
[此贴子已经被作者于2023/11/20 0:16:56编辑过]