Вы перехватываете байты до того, как документ результата будет завершен.
PDF результата будет завершен после закрытия document
.В вашем случае 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
Удаление дублирующихся шрифтов
Вы говорите
Эта процедура должна создать файл без дублированного шрифта.
Ваш код удаляет очень специфичные дубликаты записей шрифтов.Удаляет ли он все из вашего документа, зависит от того, относятся ли они к этому конкретному типу.