如何减少pdf中嵌入的重复字体

时间:2019-02-06 10:47:17

标签: vb.net itext

我写了一个应该可以工作的代码,但是我遇到了一个问题,因为当我打开由该程序制作的文件时,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

1 个答案:

答案 0 :(得分:0)

您在结果文档完成之前抓取字节。

关闭document后,结果PDF完成。在您的情况下,documentEnd 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

删除重复的字体

你说

  

此过程应创建没有重复字体的文件。

您的代码将删除非常具体的重复字体条目。是否从文档中删除所有内容,取决于它们是否都属于该特定类型。