2016-11-02 1 views
0

PDF 문서를 병합하기 위해 iTextSharp를 사용하고 있습니다. 내 문제는 북마크가 포함 된 큰 PDF를 병합하려고하는 것입니다. 내 현재 함수는 PdfWriter를 사용하여 문서를 병합합니다. 나는 PdfStamper가 작동합니다,하지만 제대로 작동하려면 함수를 변경하는 방법을 알아낼 수 없습니다 알아요.itextsharp pdfwriter에서 pdfstamper로 변경하여 PDF에 책갈피 보관

아래 예제에서 PdfWriter를 PdfStamper로 변경하면 오류가 발생합니다.

코드 예 :

writer = PdfStamper.GetInstance(pdfDoc, New FileStream(outputPath, FileMode.OpenOrCreate)) 

오류 메시지 :

'하는 GetInstance은'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 

답변

1

PdfWriterPdfStamper으로 변경할 수 없습니다. 당신은 리더 스탬퍼 및 출력 스트림을 생성하는 neex : 당신이 PdfStamper를 사용하는 경우

PdfReader reader = new PdfReader(pathToSrc); 
PdfStamper.GetInstance(reader, New FileStream(outputPath, FileMode.OpenOrCreate)); 
// do stuff 
stamper.Close(); 

당신은 Document 인스턴스를 필요가 없습니다를; 당신은 더 자세히 문서를 읽을 필요가 있습니다.

PdfStamper은 하나의 파일을 조작 할 때 사용할 클래스이기 때문에 위의 내용은 모두 쓸모가 없습니다. 다른 파일을 병합하려면 PdfCopy 또는 PdfSmartCopy을 사용해야합니다.

예를 들어 ConcatenateBookmarks을 살펴보십시오. Java를 이해하지 못한다면 페이지 하단에 C# 예제가 있습니다.

추가 질문이있는 경우 공식 iText 웹 사이트를 방문하십시오.