itextsharp 合并调整大小并取消旋转 pdf
Posted
技术标签:
【中文标题】itextsharp 合并调整大小并取消旋转 pdf【英文标题】:itextsharp merge resizes and unrotates pdf 【发布时间】:2013-04-25 17:29:04 【问题描述】:我正在尝试使用 itextsharp 合并 pdf 文件。 问题是我在合并之前对单个文件应用的任何裁剪或旋转都被忽略了。所有原始文件都被裁剪和旋转为 TIFF,然后转换为 pdf,现在我终于尝试合并它们。 我希望页面大小与添加的内容相匹配,并且我申请的任何旋转都可以通过。'
感谢您的帮助, 科尔宾·德·布鲁因
Public Function MergePDFFiles(FileList As Dictionary(Of String, String), DeleteOldFile As Boolean) As Byte()
' Public Function MergePDFFiles(FileList As Dictionary(Of String, String), DeleteOldFile As Boolean) As MemoryStream()
Dim document As New Document()
Dim output As New MemoryStream()
Try
Dim writer As PdfWriter = PdfWriter.GetInstance(document, output)
writer.PageEvent = New PdfPageEvents()
document.Open()
Dim content As PdfContentByte = writer.DirectContent
' foreach
For Each FilePath As KeyValuePair(Of String, String) In FileList
If File.Exists(FilePath.Value) Then
Dim reader As New PdfReader(FilePath.Value)
Dim numberOfPages As Integer = reader.NumberOfPages
For currentPageIndex As Integer = 1 To numberOfPages
document.SetPageSize(reader.GetPageSizeWithRotation(currentPageIndex))
document.NewPage()
' you can see iTextSharp.tutorial.01 - 0403sample
If currentPageIndex.Equals(1) Then
Dim par As New Paragraph(FilePath.Key)
Debug.Print("FilePath.Key = " & FilePath.Key)
Dim bookmark As New Chapter(par, 0) With .NumberDepth = 0
document.Add(bookmark)
End If
Dim importedPage As PdfImportedPage = writer.GetImportedPage(reader, currentPageIndex)
Dim pageOrientation As Integer = reader.GetPageRotation(currentPageIndex)
If (pageOrientation = 90) OrElse (pageOrientation = 270) Then
content.AddTemplate(importedPage, 0, 1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(currentPageIndex).Height)
Else
content.AddTemplate(importedPage, 1.0F, 0, 0, 1.0F, 0, 0)
End If
Next
End If
Next
Catch exception As Exception
Debug.Print("Failure")
Finally
document.Close()
End Try
If DeleteOldFile Then
'Delete(FileList)
End If
Return output.GetBuffer()
End Function
End Try
If DeleteOldFile Then
'Delete(FileList)
End If
Return output.GetBuffer()
【问题讨论】:
【参考方案1】:这个问题已经在 *** 上得到了一遍又一遍的回答。令人惊讶的是,没有人投票将其作为重复项关闭。
无论如何:正如我之前多次回答的那样,使用PdfWriter
/PdfImportedPage
合并文档是不好的做法。请阅读我写的关于 iText 的书的chapter 6,你会发现无论是谁提供你复制的代码示例都是错误的。您应该使用PdfCopy
来合并文件,而不是PdfWriter
!
例如,阅读以下 *** 答案:
How to keep original rotate page in itextSharp (dll)
How to merge multiple pdf files (generated in run time)?
Itext pdf Merge : Document overflow outside pdf (Text truncated) page and not displaying
等等……
如果你足够快地接受这个答案,你可能会很幸运,不会因为在发布已经回答的问题之前没有搜索档案而被否决。
【讨论】:
我确实搜索了档案,并找到了类似的答案。我承认并道歉,我不愿意偏离我得到的例子。从不知道 itextsharp 是什么,我只花了大约半天的时间就成功地以编程方式合并 pdf。我还是个初学者,所以这对我来说很重要。我会研究你的解决方案。以上是关于itextsharp 合并调整大小并取消旋转 pdf的主要内容,如果未能解决你的问题,请参考以下文章
使用 node sharp 包调整图像大小并上传到 s3 时,它会旋转