2014-12-01 4 views
0

PDF를 가져올 때 iTextSharp가 페이지 상단에 흰색 덩어리를 추가합니다. 과 C#을 사용하여 작은 문제가 있습니다.

컨텍스트 : PDF를 다운로드하여 하나의 큰 파일로 병합합니다.

문제 : 모든 페이지에서 처음 몇 센티미터는 흰색이며 pd 가져 오기는 흰색 청크 뒤에 시작됩니다.

모든 페이지의 끝은 정확합니다. 겹치거나 누락 된 객체/텍스트가 없습니다. 적은 공간을 다루어야하기 때문에 가정합니다. 나는 그것이 수직으로 뻗을지도 모른다라고 생각한다.

그래서 가져 오기는 정상적으로 작동하지만 항상 모든 페이지 상단에 흰색의 몇 센티미터를 추가합니다. 상단 여백처럼 느껴집니다. 그러나 나는 그것을 고칠 수 없다.

아이디어가 있으십니까?

감사합니다. 고마워.

public void method() 
{ 

    // needed variables for the pdf-merging part 
    fs = new FileStream(Variables.destinationFile, FileMode.Create); 
    writer = PdfWriter.GetInstance(doc, fs); 
    doc.Open(); 
    doc.SetPageSize(PageSize.A4); 
    doc.SetMargins(0f, 0f, 0f, 0f); 
    pdfContent = writer.DirectContent; 

    byte[] result; 
    int numPages; 


    foreach (Tuple<string, string, int> currentTuple in someArray) 

      try 
       { 
        result = client.DownloadData(new Uri(adress + currentTuple.Item1 + ".pdf")); 

        // read and add the pages to the output file 
        reader = new PdfReader(result); 
        numPages = reader.NumberOfPages; 

        for (int i = 1; i < numPages + 1; i++) 
        { 
         doc.NewPage(); 
         page = writer.GetImportedPage(reader, i); 
         pdfContent.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); 
        } 
       catch (Exception e) 
       { 
       } 

     } 

     doc.Close(); 
     writer.Close(); 
     fs.Close(); 
} 

p.s. 왜 항상 내 "안녕하세요"를 삭제합니까? :)

+0

"p.s :"http://meta.stackexchange.com/a/93989/266793 – DatRid

답변

0

문서를 병합하는 데 잘못된 방법을 사용하고 있습니다. 귀하의 방법은 모든 대화 형 기능을 버리고 페이지 크기 (보고하는 문제를 설명 함)를 존중하지 않습니다. 이런 식으로 문서를 병합하는 방법에 대한 영감을 얻은 곳을 말해주십시오. 사용하고있는 예제를 담당 한 사람에게 물어볼 수 있도록 말하십시오.

정확한 연결 방법은 chapter 6 of my book입니다.

당신은 여기에 몇 가지 더 많은 예제를 찾을 수 있습니다

당신이 볼 수 있듯이, 당신의 가야 많은 사람들이 잘못된 방법 (PdfWriterAddTemplate() 사용) 대신에 (PdfCopy을 사용하여) 문서를 병합하는 올바른 방법을 사용하고 있다는 점에서 StackOverflow에서 여러 번 전 해왔습니다.

귀하의 의견에서 AddPage() 메서드는 PdfCopy에 존재하지 않는다고 말합니다. 의 해당 클래스의 최신 버전을 살펴 보자 : PdfCopy.cs

내가 명확하게 볼 : 최신 버전은 또한 AddDocument() 방법이 있는지

/** 
* Add an imported page to our output 
* @param iPage an imported page 
* @throws IOException, BadPdfFormatException 
*/ 
public virtual void AddPage(PdfImportedPage iPage) { 

참고 :이 방법을 사용

virtual public void AddDocument(PdfReader reader) { 

을, 더 이상 모든 페이지를 반복 할 필요가 없지만 한 번에 PdfReader으로 읽는 PDF의 모든 페이지를 추가 할 수 있습니다.이 페이지 만의 선택을 추가하려면

, 당신은 사용할 수 있습니다

virtual public void AddDocument(PdfReader reader, List<int> pagesToKeep) { 

는 비공식 버전을 사용하지 마십시오! 공식 버전은 여기에서 다운로드 할 수 있습니다 : http://sourceforge.net/projects/itextsharp/files/itextsharp/

iText 그룹은 iTextSharp의 이전 버전에 대해 어떠한 책임도지지 않으며 당사의 소프트웨어 포크에 대해 책임을지지 않습니다.

+0

도움을 주셔서 감사합니다! 그들은 모두 PdfCopy.AddPage (page)를 사용하는 것으로 보입니다. 그러나 내 상황에서는 방법이 발견되지 않습니다. 존재하지 않습니다. 내가 어떤 버전을 사용하고 있는지 알 수 없습니다. 그러나 그것은 가장 새로운 것 중 하나입니다. 최대 1 개월. – HideAndSeek

+0

괜찮습니다. 레이어 8 문제. 당신의 도움을 주셔서 감사합니다. 고쳤다. 때 대부분은 PdfWriter 사용하고 google'ing : / – HideAndSeek