2012-07-25 26 views
5

kullanarak yazılmamış bir belgeye ekleyin. Varolan bir disk üstü PDF dosyasından sayfa oluşturulmakta olan bir bellek içi PDF belgesine sayfa (lar) ı doğru şekilde nasıl ekleyebilirim?Dosyadan varolan bir PDF dosyasını, WordextSharp

iTextSharp kullanarak bir PDF belgesi üreten bir sınıfa sahibiz. Bu iyi çalışıyor. Şu anda son sayfada bir resim olarak terimler & Şartları ekleyin:

this.nettPriceListDocument.NewPage(); 
this.currentPage++; 
Image logo = Image.GetInstance("/inetpub/Applications/Trade/Reps/images/TermsAndConditions.gif"); 
logo.SetAbsolutePosition(0, 0); 
logo.ScaleToFit(this.nettPriceListDocument.PageSize.Width, this.nettPriceListDocument.PageSize.Height); 
this.nettPriceListDocument.Add(logo); 

Ben bir PDF belgesi olarak bu imaja sahip ve sonuna ekler tercih ederim. Bunu anlayabilseydim, ürettiğim şeye ihtiyaç duyacağımız diğer PDF belgelerini eklemek mümkün olurdu. Bir sonuçlanır

string tcfile = "/inetpub/Applications/Trade/Reps/images/TermsAndConditions.pdf"; 
PdfReader reader = new PdfReader(tcfile); 
PdfWriter writer = PdfWriter.GetInstance(this.nettPriceListDocument, this.nettPriceListMemoryStream); 
PdfContentByte content = writer.DirectContentUnder; 
for (int pageno = 1; pageno < reader.NumberOfPages + 1; pageno++) 
{ 
    this.nettPriceListDocument.NewPage(); 
    this.currentPage++; 
    PdfImportedPage newpage = writer.GetImportedPage(reader, pageno); 
    content.AddTemplate(newpage, 1f, 1f); 
} 

writer.DirectContentUnder

de istisna "belgesinde açık değil" Ben de denedim:

denedim

bir ekleme sonuçlanır
string tcfile = "/inetpub/Applications/Trade/Reps/images/TermsAndConditions.pdf"; 
PdfReader reader = new PdfReader(tcfile); 
PdfConcatenate concat = new PdfConcatenate(this.nettPriceListMemoryStream); 
concat.AddPages(reader); 

Belgenin her zamanki ilk sayfasında boş, garip boyutlu sayfa. Ben de denedim

:

copier.AddPage(newpage) bir NullReferenceException sonuçlanır
string tcfile = "/inetpub/Applications/Trade/Reps/images/TermsAndConditions.pdf"; 
PdfReader reader = new PdfReader(tcfile); 
PdfCopy copier = new PdfCopy(nettPriceListDocument, nettPriceListMemoryStream); 
for (int pageno = 1; pageno < reader.NumberOfPages + 1; pageno++) 
{ 
    this.currentPage++; 
    PdfImportedPage newpage = copier.GetImportedPage(reader, pageno); 
    copier.AddPage(newpage); 
} 
copier.Close(); 
reader.Close(); 

. Ben de denedim

:

string tcfile = "/inetpub/Applications/Trade/Reps/images/TermsAndConditions.pdf"; 
PdfReader reader = new PdfReader(tcfile); 
PdfCopyFields copier = new PdfCopyFields(nettPriceListMemoryStream); 
copier.AddDocument(reader); 

Bu aynı zamanda copier.AddDocument(reader) bir NullReferenceException ile sonuçlanır.

Bu fikirlerin çoğunu çeşitli StackOverflow soruları ve yanıtlarından aldım. Hiç kimsenin uğraşmayacağı bir şey, mevcut bir PDF dosyasından yeni sayfa (lar) ekleyerek, diski üzerindeki bir PDF dosyasına henüz yazılmamış halihazırda varolan bellek içi belgeye eklenmesidir. Bu belge zaten açılmış ve içine yazılmış veri sayfaları vardı. Bu Koşulları & Koşulları prosedüründen çıkarırsam veya yazdığım bir görüntü (orijinal hali gibi) yazıyorsa, sonuçta oluşan PDF düzgün bir şekilde ortaya çıkar.

Başladığım kadarıyla bitirmek için: Varolan bir disk üstü PDF dosyasından, oluşturulmuş bir bellek içi PDF belgesine sayfa (lar) ı doğru şekilde nasıl ekleyebilirim?

Bu konudaki musevileriniz için şimdiden teşekkür ve takdir. Daha fazla bilgi vermeme izin verin.

cevap

7

PDF dosyalarını tek bir PDF'ye kopyalayan basit birleştirme yöntemi. Pdfs'yi birleştirirken bu yöntemi oldukça sık kullanıyorum. Bunu, farklı büyüklükteki sayfaları, sorun yaşamadan birleştirmek için kullandım. Umarım yardımcı olur.

public MemoryStream MergePdfForms(List<byte[]> files) 
{ 
    if (files.Count > 1) 
    { 
     PdfReader pdfFile; 
     Document doc; 
     PdfWriter pCopy; 
     MemoryStream msOutput = new MemoryStream(); 

     pdfFile = new PdfReader(files[0]); 

     doc = new Document(); 
     pCopy = new PdfSmartCopy(doc, msOutput); 

     doc.Open(); 

     for (int k = 0; k < files.Count; k++) 
     { 
      pdfFile = new PdfReader(files[k]); 
      for (int i = 1; i < pdfFile.NumberOfPages + 1; i++) 
      { 
       ((PdfSmartCopy)pCopy).AddPage(pCopy.GetImportedPage(pdfFile, i)); 
      } 
      pCopy.FreeReader(pdfFile); 
     } 

     pdfFile.Close(); 
     pCopy.Close(); 
     doc.Close(); 

     return msOutput; 
    } 
    else if (files.Count == 1) 
    { 
     return new MemoryStream(files[0]); 
    } 

    return null; 
} 
+0

Teşekkür @Jonathan, ne arayamam eğer 'Document.Open()' Belge açık zaten ve zaten eklenmiş unsurların bir sürü vardı çünkü? – Troy

+0

@Nevyn Belgeyi kapatabilir ve ardından birleştirme işleminde yeniden açabilmelisiniz. Yapmanız gereken tek şey belgeyi kapatmak, ardından belgelerinizin bayt dizilerini yeni birleştirilmiş belgenizin bir memor akışını döndürecek birleştirme yöntemine iletmektir. – Jonathan

İlgili konular