我写了一个应该可以工作的代码,但是我遇到了一个问题,因为当我打开由该程序制作的文件时,Adobe说我错了。
此过程应创建没有重复字体的文件。
Using msDoc As MemoryStream = New MemoryStream()
Using document As iTextSharp.text.Document = New iTextSharp.text.Document()
Using copy As iTextSharp.text.pdf.PdfSmartCopy = New iTextSharp.text.pdf.PdfSmartCopy(document, msDoc)
document.Open()
Dim pdfReader As New iTextSharp.text.pdf.PdfReader("C:\Users\pier\Desktop\prova.pdf")
For i As Integer = 1 To pdfReader.NumberOfPages
copy.AddPage(copy.GetImportedPage(pdfReader, i))
Next
msDoc.Position = 0
System.IO.File.WriteAllBytes("C:\Users\pier\Desktop\file213.pdf", msDoc.ToArray())
End Using
End Using
End Using
答案 0 :(得分:0)
关闭document
后,结果PDF完成。在您的情况下,document
在End Using
中隐式关闭,您在此之前检索了流字节。此外,在msDoc.Position = 0
关闭之前,您要在流位置(document
)旁玩,因此,还会导致PDF的末尾部分覆盖其开始...
此外,请勿将PdfSmartCopy
实例放入Using
行中;当document
关闭时,此实例隐式关闭,但是您尝试先关闭它。
因此,改为:
Using msDoc As MemoryStream = New MemoryStream()
Using document As iTextSharp.text.Document = New iTextSharp.text.Document()
Dim copy As New iTextSharp.text.pdf.PdfSmartCopy(document, msDoc)
document.Open()
Dim pdfReader As New iTextSharp.text.pdf.PdfReader("C:\Users\pier\Desktop\prova.pdf")
For i As Integer = 1 To pdfReader.NumberOfPages
copy.AddPage(copy.GetImportedPage(pdfReader, i))
Next
End Using
System.IO.File.WriteAllBytes("C:\Users\pier\Desktop\file213.pdf", msDoc.ToArray())
End Using
你说
此过程应创建没有重复字体的文件。
您的代码将删除非常具体的重复字体条目。是否从文档中删除所有内容,取决于它们是否都属于该特定类型。