itextsharp 从 pdfwriter 更改为 pdfstamper 以保留 PDF 中的书签
itextsharp change from pdfwriter to pdfstamper to keep bookmarks in PDF
我正在使用 iTextSharp 将 PDF 文档合并在一起。我的问题是我正在尝试合并包含书签的大型 PDF。我当前的功能是使用 PdfWriter 合并文档。我知道 PdfStamper 可以工作,但我不知道如何更改该功能才能正常工作。
当我在下面的示例中将 PdfWriter 更改为 PdfStamper 时,出现错误。
代码示例:
writer = PdfStamper.GetInstance(pdfDoc, New FileStream(outputPath, FileMode.OpenOrCreate))
错误信息:
'GetInstance' is not a member of 'iTextSharp.text.pdf.PdfStamper'
这是整个函数:
Public Shared Function MergePdfFiles(ByVal pdfFiles() As String, ByVal outputPath As String) As Boolean
Dim result As Boolean = False
Dim pdfCount As Integer = 0
Dim f As Integer = 0
Dim fName As String
Dim reader As iTextSharp.text.pdf.PdfReader = Nothing
Dim pageCount As Integer = 0
Dim pdfDoc As iTextSharp.text.Document = Nothing
Dim writer As PdfWriter = Nothing
Dim cb As PdfContentByte = Nothing
Dim page As PdfImportedPage = Nothing
Dim rotation As Integer = 0
Try
pdfCount = pdfFiles.Length
If pdfCount > 1 Then
fName = pdfFiles(f)
reader = New iTextSharp.text.pdf.PdfReader(fName)
pageCount = reader.NumberOfPages
pdfDoc = New iTextSharp.text.Document(reader.GetPageSizeWithRotation(1), 18, 18, 18, 18)
writer = PdfWriter.GetInstance(pdfDoc, New FileStream(outputPath, FileMode.OpenOrCreate))
With pdfDoc
.Open()
End With
cb = writer.DirectContent
While f < pdfCount
Dim i As Integer = 0
While i < pageCount
i += 1
pdfDoc.SetPageSize(reader.GetPageSizeWithRotation(i))
pdfDoc.NewPage()
page = writer.GetImportedPage(reader, i)
rotation = reader.GetPageRotation(i)
If rotation = 90 Then
cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height)
ElseIf rotation = 270 Then
cb.AddTemplate(page, 0, 1.0F, -1.0F, 0, reader.GetPageSizeWithRotation(i).Width + 60, -30)
Else
cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0)
End If
End While
f += 1
If f < pdfCount Then
fName = pdfFiles(f)
reader = New iTextSharp.text.pdf.PdfReader(fName)
pageCount = reader.NumberOfPages
End If
End While
pdfDoc.Close()
result = True
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
Return False
End Try
Return result
End Function
您不能只将 PdfWriter
更改为 PdfStamper
。您需要创建一个带有 reader 和输出流的压模:
PdfReader reader = new PdfReader(pathToSrc);
PdfStamper.GetInstance(reader, New FileStream(outputPath, FileMode.OpenOrCreate));
// do stuff
stamper.Close();
如果您使用 PdfStamper
,则不需要 Document
实例;你只需要更仔细地阅读文档。
上面这些对你都没用,因为PdfStamper
是你操作单个文件时要用的class。如果你想合并不同的文件,你需要使用 PdfCopy
或 PdfSmartCopy
.
请查看 ConcatenateBookmarks 示例。如果您不理解,页面底部有一个 C# 示例 Java。
如果您还有其他问题,请浏览 iText 官方网站。
我正在使用 iTextSharp 将 PDF 文档合并在一起。我的问题是我正在尝试合并包含书签的大型 PDF。我当前的功能是使用 PdfWriter 合并文档。我知道 PdfStamper 可以工作,但我不知道如何更改该功能才能正常工作。
当我在下面的示例中将 PdfWriter 更改为 PdfStamper 时,出现错误。
代码示例:
writer = PdfStamper.GetInstance(pdfDoc, New FileStream(outputPath, FileMode.OpenOrCreate))
错误信息:
'GetInstance' is not a member of 'iTextSharp.text.pdf.PdfStamper'
这是整个函数:
Public Shared Function MergePdfFiles(ByVal pdfFiles() As String, ByVal outputPath As String) As Boolean
Dim result As Boolean = False
Dim pdfCount As Integer = 0
Dim f As Integer = 0
Dim fName As String
Dim reader As iTextSharp.text.pdf.PdfReader = Nothing
Dim pageCount As Integer = 0
Dim pdfDoc As iTextSharp.text.Document = Nothing
Dim writer As PdfWriter = Nothing
Dim cb As PdfContentByte = Nothing
Dim page As PdfImportedPage = Nothing
Dim rotation As Integer = 0
Try
pdfCount = pdfFiles.Length
If pdfCount > 1 Then
fName = pdfFiles(f)
reader = New iTextSharp.text.pdf.PdfReader(fName)
pageCount = reader.NumberOfPages
pdfDoc = New iTextSharp.text.Document(reader.GetPageSizeWithRotation(1), 18, 18, 18, 18)
writer = PdfWriter.GetInstance(pdfDoc, New FileStream(outputPath, FileMode.OpenOrCreate))
With pdfDoc
.Open()
End With
cb = writer.DirectContent
While f < pdfCount
Dim i As Integer = 0
While i < pageCount
i += 1
pdfDoc.SetPageSize(reader.GetPageSizeWithRotation(i))
pdfDoc.NewPage()
page = writer.GetImportedPage(reader, i)
rotation = reader.GetPageRotation(i)
If rotation = 90 Then
cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height)
ElseIf rotation = 270 Then
cb.AddTemplate(page, 0, 1.0F, -1.0F, 0, reader.GetPageSizeWithRotation(i).Width + 60, -30)
Else
cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0)
End If
End While
f += 1
If f < pdfCount Then
fName = pdfFiles(f)
reader = New iTextSharp.text.pdf.PdfReader(fName)
pageCount = reader.NumberOfPages
End If
End While
pdfDoc.Close()
result = True
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
Return False
End Try
Return result
End Function
您不能只将 PdfWriter
更改为 PdfStamper
。您需要创建一个带有 reader 和输出流的压模:
PdfReader reader = new PdfReader(pathToSrc);
PdfStamper.GetInstance(reader, New FileStream(outputPath, FileMode.OpenOrCreate));
// do stuff
stamper.Close();
如果您使用 PdfStamper
,则不需要 Document
实例;你只需要更仔细地阅读文档。
上面这些对你都没用,因为PdfStamper
是你操作单个文件时要用的class。如果你想合并不同的文件,你需要使用 PdfCopy
或 PdfSmartCopy
.
请查看 ConcatenateBookmarks 示例。如果您不理解,页面底部有一个 C# 示例 Java。
如果您还有其他问题,请浏览 iText 官方网站。