以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- iTextSharp怎么实现多个pdf的合并呢?并且在合并的pdf右上角输入页码? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=189240) |
||||
-- 作者:cnsjroom -- 发布时间:2023/11/19 2:52:00 -- iTextSharp怎么实现多个pdf的合并呢?并且在合并的pdf右上角输入页码? 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
|
||||
-- 作者:有点蓝 -- 发布时间:2023/11/19 19:43:00 -- 第三方组件请自行研究组件的开发文档。 |
||||
-- 作者:cnsjroom -- 发布时间:2023/11/19 23:21:00 -- 回复:(有点蓝)第三方组件请自行研究组件的开发文档... 当前合并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编辑过]
|