2010-11-19 9 views
5

私はC#からPDF出力ファイルを作成することができるソリューションを探しています。これは、別個の静的PDFファイルをバックグラウンド透かしとしても併合します。C#から別のPDFファイルをバックグラウンド透かしとして作成する必要があります

私は、ユーザーが請求書のPDF版を作成できるようにするシステムを開発中です。 C#内のすべての請求書機能を再作成するのではなく、空白の請求書(Adobe Illustratorから作成)のPDF版をバックグラウンドの透かしとして使用し、ダイナミックインボイスの詳細を上に重ねるだけです。

私はデータ・ダイナミクスからのアクティブ・レポートを見ていましたが、既存のPDFファイルにレポートをオーバーレイまたはマージする能力はありません。

この機能を持つ他の.NET PDFレポート製品はありますか?

ありがとう

答えて

13

ありがとうbhavinp。 iTextは、私が望んでいたように、トリックを行い、正確に働くようです。

PDFファイルにマージしてオーバーレイしようとする人は、iTextPDFライブラリを使用した次のサンプルコードを参考にしてください。

結果ファイルは、オリジナルの組み合わせと背景

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using iTextSharp.text; 
using iTextSharp.text.pdf; 


namespace iTextTest 
{ 
    class Program 
    { 
         /** The original PDF file. */ 
     const String Original = @"C:\Jobs\InvoiceSource.pdf"; 
     const String Background = @"C:\Jobs\InvoiceTemplate.pdf"; 
     const String Result = @"C:\Jobs\InvoiceOutput.pdf"; 

     static void Main(string[] args) 
     { 
      ManipulatePdf(Original, Background, Result); 
     } 

     static void ManipulatePdf(String src, String stationery, String dest) 
     { 
      // Create readers 
      PdfReader reader = new PdfReader(src); 
      PdfReader sReader = new PdfReader(stationery); 
      // Create the stamper 
      PdfStamper stamper = new PdfStamper(reader, new FileStream(dest, FileMode.Create)); 
      // Add the stationery to each page 
      PdfImportedPage page = stamper.GetImportedPage(sReader, 1); 
      int n = reader.NumberOfPages; 
      PdfContentByte background; 
      for (int i = 1; i <= n; i++) 
      { 
       background = stamper.GetUnderContent(i); 
       background.AddTemplate(page, 0, 0); 
      } 
      // CLose the stamper 
      stamper.Close(); 
     } 


    } 
} 
+0

+1ご自身の質問でフォローアップしてください。 –

+0

ありがとう、偉大な働きました – Ello

0

私はこの質問に出くわしたとによる無料版のライセンスにiTextSharpライブラリを使用することができなかったです

iTextのAGPLライセンスは、AGPLの「コピーレフト(copyleft)」という用語の下で、オープンソースコミュニティとアプリケーションソースコード全体をフリーソフトウェアとして共有したい開発者を対象としています。

しかし、私はPDFSharpが以下のコードを使用して動作することを発見しました。

using System; 
using System.Collections.Generic; 
using System.Drawing; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using PdfSharp.Drawing; 
using PdfSharp.Pdf; 
using PdfSharp.Pdf.IO; 

namespace PDFTest 
{ 
    class Program 
    { 
     static Stream Main(string[] args) 
     { 
      using (PdfDocument originalDocument= PdfReader.Open("C:\\MainDocument.pdf", PdfDocumentOpenMode.Import)) 
      using (PdfDocument outputPdf = new PdfDocument()) 
      { 
       foreach (PdfPage page in originalDocument.Pages) 
       { 
        outPutPdf.AddPage(page); 
       } 
       var background = XImage.FromFile("C:\\Watermark.pdf"); 
       foreach (PdfPage page in outputPdf.Pages) 
       { 
        XGraphics graphics = XGraphics.FromPdfPage(page); 
        graphics.DrawImage(background , Point.Empty); 

       } 
       MemoryStream stream = new MemoryStream(); 
       outputPdf.Save("C:\\OutputFile.pdf"); 
      } 
     } 
    } 
} 
関連する問題