2016-04-13 14 views
1

Bir PDF'e damga eklemek istiyorum, burada damga için dosyanın kendisi bir PDF'dir. İşte benim kod:iTextSharp kullanarak bir PDF damgası eklemeye çalışıyorum, "Bayt dizisi tanınmış bir resim biçiminde değil"

The byte array is not a recognized imageformat. 

Güncelleme: the source code for GetInstance() bakarak, ben GIF, TIFF, JPEG, PNG ile çalıştığını görmek GetInstance() çağrısına üzerinde

void addImage(string inputPath,string imagePath,string outputPath,int pageNumber) 
{ 
    Stream inputImageStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read, FileShare.Read); 
    PdfReader pdfReader = new PdfReader(inputPath); 
    PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create)); 
    PdfContentByte pdfContentByte = pdfStamper.GetOverContent(pageNumber); 
    iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(inputImageStream); 
    image.SetAbsolutePosition(100, 100); 
    pdfContentByte.AddImage(image); 
} 

void addImageTest() 
{ 
    string sourceFile = @"C:\somefolder\source.pdf"; 
    string stampFile = @"C:\somefolder\stamp.pdf"; 
    string destFile = @"C:\somefolder\destination.pdf"; 
    addImage(sourceFile, stampFile, destFile, 1); 
    return; 
} 

, bu istisna olsun , WMF ve BMP, ancak değil PDF. Bu yüzden bir görüntüyü PDF olarak kullanmanın başka bir yolunu bulmalıyım, sanırım. Herhangi bir fikir?

+1

Siz * değil * resmi bir iTextSharp kaynağına bakıyordum. Resmi kaynak http://github.com/itext/itextsharp adresinde bulunabilir. Ayrıca, birkaç yaşında bir versiyon kullanıyorsunuz. –

cevap

2

PDF, belge formatı değil, resim formatıdır, dolayısıyla Image.GetInstance(), PDF baytlarını kabul etmez. Bu, geçici bir çözüm olmadığı anlamına gelmez.

bir PDF belgesi

PdfReader nesnesi tarafından okunabilir: Yukarıdaki satırda

PdfImportedPage page = writer.GetImportedPage(reader, 1); 

:

PdfReader reader = new PdfReader(src); 

Sen PdfImportedPage nesneyi kullanarak okunduğunu PDF sayfaları yeniden kullanabilirsiniz , writer, oluşturduğunuz belgenin PdfWriter örneğidir. GetImportedPage yöntemi, page için gereken kaynakları yeni dosyaya kopyalar. Kaynaklar yazı tipleri, resimler olabilir ... PdfTemplate , Form XObject için kullanılan sınıftır. Raster görüntüleri, Image XObjects olarak adlandırılan harici nesneler olarak saklanır. Vektör verileri (ör. WMF, içe aktarılan bir PDF sayfası, bir PDF sözdizimi akışı) Form XObjects olarak saklanır.

Artık belgeye page adlı PdfTemplate (veya PdfImportedPage) eklemek için iki farklı seçeneğiniz var. writer.DirectContent.AddTemplate(page, x, y);

  • bir Image nesnenin içindeki PdfTemplate sarabilirsiniz:

    1. Eğer AddTemplate() yöntemi kullanabilirsiniz iTextSharp.text.Image Img = iTextSharp.text.Image.GetInstance(page);, seçtiğiniz hangisi seçeneği, PDF bir dönüştürülebilir asla Not olduğunu

    Raster görüntü. Vektör verileri olarak eklenecektir.

    Güncelleme: Senin durumunda

    , böyle writer değiştirmek zorunda:

  • Benim örnekler

    • pdfStamper.GetImportedPage(reader, 1);
    • pdfStamper.GetOverContent(pageNumber).AddTemplate(page, x, y); Oluşturmak durumunda yapılmıştır sıfırdan bir PDF.

    +0

    Bu, PDF eklememi sağlıyor, ancak onu normal bir damga olarak eklemeyi tercih ediyorum; böylece seçilebilir, sayfaya sürüklenebilir ve silinebilir. 'AddTemplate()' ın bu kullanımı statik içerik olarak eklenmiş gibi görünüyor - bir şey özlüyor muyum? – sigil

    +1

    Şablonu, bir damga notunun görünümü olarak kullanabilirsiniz. Bu senin için işe yaramadıysa haber ver. Http://developers.itextpdf.com/question/how-add-printable-or-non-printable-bitmap-stamp-pdf –

    +0

    adresine bakın. Itextpdf.com örneğini takip ediyorum ancak "app.AddImage (stampImg)" istisna atıyor: "Görüntü mutlak konumlandırmaya sahip olmalıdır." – sigil

    İlgili konular