我正在尝试使用iTextSharp循环浏览PDF文档并删除所有空白页。我有代码检查每个页面是否为空,并将其写入新的PDF,但在关闭新文档时,我收到错误“文档没有页面”。但是,在文件夹中创建的文件确实具有我所期望的文件大小。
这是我目前的代码:
Dim reader As PdfReader = New PdfReader(strSourceFile)
Dim raf As RandomAccessFileOrArray = New RandomAccessFileOrArray(strSourceFile)
Dim document As Document = New Document(reader.GetPageSizeWithRotation(1))
Dim writer As PdfWriter = PdfWriter.GetInstance(document, New FileStream(saver.FileName, FileMode.Create))
document.Open()
Dim page As PdfImportedPage = Nothing
Dim cb As Byte()
For i As Integer = 1 To reader.NumberOfPages()
cb = reader.GetPageContent(i, raf)
If cb.Length > 150 Then
page = writer.GetImportedPage(reader, i)
End If
Next
document.Close() 'This is where the error occurs.
writer.Close()
raf.Close()
reader.Close()
问题在于@usr2564301在一条评论中提到:您将页面导入到新文档中(作为表单XObject),但没有将该XObject放入新文档的任何页面。
为此,只需扩展if
子句,如下所示:
If cb.Length > 150 Then
page = writer.GetImportedPage(reader, i)
writer.DirectContentUnder.AddTemplate(page, 0, 0)
document.NewPage()
End If
但是,这种解决方案有一些缺点:页面作为表单Xobject导入,Xobject粘贴到目标文档中的当前页面上。但是如果页面尺寸不同(这里是A4,那里是字母,或者这里是肖像,那里是风景),页面的部分可能会丢失。此外,将页面作为XObject导入到PdfWriter
中只会复制常规页面内容,而不会复制注释(如表单字段)和类似的额外内容。
相反,您应该为此使用PdfCopy
:
Dim reader As PdfReader = New PdfReader(strSourceFile)
Dim raf As RandomAccessFileOrArray = New RandomAccessFileOrArray(strSourceFile)
Dim document As Document = New Document(reader.GetPageSizeWithRotation(1))
Dim copy As PdfCopy = New PdfCopy(document, New FileStream(strDestFile, FileMode.Create))
document.Open()
Dim page As PdfImportedPage = Nothing
Dim cb As Byte()
For i As Integer = 1 To reader.NumberOfPages()
cb = reader.GetPageContent(i, raf)
If cb.Length > 150 Then
page = copy.GetImportedPage(reader, i)
copy.AddPage(page)
End If
Next
document.Close()
raf.Close()
reader.Close()
这将按原样复制完整的页面。
我有一个22*17的PDF文件,我需要它来适应11*8.5的页面内容。 基本上减小了现有的页面大小。我正在使用断章。 我该怎么做?
读取文件已支持 windows 系统,版本号大于等于 1.3.4.1; 扩展版本大于等于 1.2.7; PECL 安装时将会提示是否开启读取功能,请键入 yes; 测试数据准备 $config = ['path' => './tests']; $excel = new \Vtiful\Kernel\Excel($config); // 写入测试数据 $filePath = $excel->f
问题内容: 我正在尝试将类路径中的文件复制到另一个临时位置。 这是它的代码: readMeFile有2页,在tempFilesOutputPath文件夹中复制的文件也有2页,但没有任何内容。 如果我犯了一些错误,或者必须以其他方式进行处理,请告诉我。 干杯,马杜 问题答案: 问题完全无关。我正在使用Maven复制资源来复制src / main / resources /下的资源 这是我的行家资源:
问题内容: HTML / CSS中是否有任何内容可以告诉浏览器完全忽略空格? 如此多次,当您想要将两个图像彼此并排放置时-拼命尝试使HTML可读,但是浏览器在它们之间放置了一个空格。 因此,而不是像这样: 你最终得到这个 真是太恐怖了! 问题答案: 哦,您只需一行CSS就可以轻松实现: 劣势,你问?尚无 浏览器实现此 极其有用的功能(通常考虑内联块)。 我有时会做些什么,尽管黑夜很丑,但还是要使用
读取文件已支持 windows 系统,版本号大于等于 1.3.4.1; 扩展版本大于等于 1.2.7; PECL 安装时将会提示是否开启读取功能,请键入 yes; 测试数据准备 $config = ['path' => './tests']; $excel = new \Vtiful\Kernel\Excel($config); // 写入测试数据 $filePath = $excel->f
我试过以下方法。它似乎使每个页面后面的空白页的方向和大小是源PDF页面的方向和大小,但源PDF页面的方向和大小似乎是前一个空白页的方向和大小: