gpt4 book ai didi

c# - ITextSharp PdfCopy 使用实例

转载 作者:太空狗 更新时间:2023-10-29 18:30:10 25 4
gpt4 key购买 nike

我正在尝试使用 ItextSharp 中的 PdfSmartCopy,但我在 C# 中找不到任何相关示例。

我的想法是我有一个包含表单字段的 pdf,并且这些字段将 700kb 添加到 pdf 文档的大小。没有表单字段的原始文档是 100kb。欢迎提出任何其他建议,尤其是始终如一地减小 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();

最佳答案

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

注意:您必须在项目中引用 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

关于c# - ITextSharp PdfCopy 使用实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4276019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com