ITextSharp PdfCopy使用示例

Dra*_*lut 8 c# asp.net pdf-generation itextsharp

我正在尝试使用ItextSharp中PdfSmartCopy,但我在c#中找不到任何相关的例子.

我的意思是我有一个包含表单字段的pdf,并且这些字段增加了700kb到pdf文档的大小.没有表单字段的原始文档是100kb.欢迎任何其他sugestions,尤其是o一致地减少pdf大小.

(我使用adobe acrobat优化了生成的PDF,并将其减少到44kb.因此必须在某处出现故障.)有没有办法减少PDF大小?

编辑:FormFlatenning没有帮助.pdf模板文件仅包含文本,行和表,没有图像.

这是我的代码片段

        PdfReader reader = new PdfReader(GetTemplateBytes());
        pst = new PdfStamper(reader, Response.OutputStream);
        var acroFields = pst.AcroFields;

        pst.FormFlattening = true;
        pst.FreeTextFlattening = true;

        SetFieldsInternal(acroFields);

        pst.Close();
Run Code Online (Sandbox Code Playgroud)

小智 8

这是使用ITextSharp PDFCopy将多个PDF文件复制到1个多页PDF文件中的2008 VB.Net示例.这将复制除底层链接之外的所有内容 它似乎完全复制所有注释,至少我找不到它没有复制.

注意:您必须在项目中引用ITextSharp.

输入参数:

fileArray - 一个pdf文件数组.

outPutPDF - 输出多页PDF文档的完整路径和名称.

Private Sub BuildMultiPagePDF(ByVal fileArray As String(), ByVal outPutPDF As String)
    Try

        Dim reader As iTextSharp.text.pdf.PdfReader = Nothing
        Dim pageCount As Integer = 0
        Dim currentPage As Integer = 0
        Dim pdfDoc As iTextSharp.text.Document = Nothing
        Dim writer As iTextSharp.text.pdf.PdfCopy = Nothing
        Dim page As iTextSharp.text.pdf.PdfImportedPage = Nothing
        Dim currentPDF As Integer = 0 

        If fileArray.Length > 0 Then

            reader = New iTextSharp.text.pdf.PdfReader(fileArray(currentPDF))
            pdfDoc = New iTextSharp.text.Document(reader.GetPageSizeWithRotation(1))
            writer = New iTextSharp.text.pdf.PdfCopy(pdfDoc, _
                                                  New IO.FileStream(outPutPDF, _
                                                  IO.FileMode.OpenOrCreate, _
                                                  IO.FileAccess.Write))

            pageCount = reader.NumberOfPages

            While currentPDF < fileArray.Length
                pdfDoc.Open()

                While currentPage < pageCount
                    currentPage += 1
                    pdfDoc.SetPageSize(reader.GetPageSizeWithRotation(currentPage))
                    pdfDoc.NewPage()
                    page = writer.GetImportedPage(reader, currentPage)
                    writer.AddPage(page)
                End While

                currentPDF += 1
                If currentPDF < fileArray.Length Then
                    reader = New iTextSharp.text.pdf.PdfReader(fileArray(currentPDF))
                    pageCount = reader.NumberOfPages
                    currentPage = 0
                End If
            End While

            pdfDoc.Close()
        Else
            MessageBox.Show("The input file array is empty.  Processing terminated.", _
                            "INVALID FILE LIST", _
                            MessageBoxButtons.OK, MessageBoxIcon.Error)

        End If

    Catch ex As Exception
        MessageBox.Show(ex.message)
    End Try
End Sub
Run Code Online (Sandbox Code Playgroud)