2016-04-29 28 views
0

私はPDFファイルを1つにマージする必要があります。私は一度にすべてのPDFファイルを持っている場合、これは問題ではありません。しかし、PDFファイルは段階的に導入され、ワー​​クフローのために、それらが到着したときにそれらをマージする必要があります。ITEXTSharpはPDFファイルをディスク上の既存のファイルに追加します

だから、ワークフローは次のようになります。

1:なしPDFファイルは、1つを作成し、近くに新しいPDFファイルにページの最初のセットをマージ存在しない場合。

2:PDFが既に存在する場合は、それを開き、新しいページをターゲットPDFファイルにマージします。閉じる。

3:繰り返し。

以下はコードですが、以前に挿入されたページを上書きするだけで、私の質問はPDFSmartCopyを使用して既存のPDFファイルにPDFファイルを挿入する方法です。

私はフォントを最適化する必要があるので、PDFSmartCopyを使用する必要があります。 私はStackOverflowにこの良い文書を見つけましたが、どのように追加するかを示していますが、PDFSmartCopy以外のさまざまなテクニックを使用しています。

注:ターゲットPDFページを保持し、ターゲットPDFを削除して中間PDFをターゲットPDFとして保存するために中間PDFファイルを作成する必要があるかどうかはわかりません。しかし、私がそれをやる前に、私は中間ステップなしでそれを行う方法があるのだろうと思っていました。

using (FileStream stream = new FileStream(targetFile, FileMode.OpenOrCreate)) 
{ 
    Document pdfDoc = new Document(PageSize.LETTER); 
    PdfSmartCopy pdf = new PdfSmartCopy(pdfDoc, stream); 
    pdfDoc.Open(); 
    foreach (string file in files) 
    { 
    PdfReader reader = new PdfReader(file); 
    pdf.AddDocument(reader); 
    pdf.FreeReader(reader) ; 
    reader.Close(); 
    } 

} 
+0

私は、これはあなたが[iTextSharp PdfSmartCopyクラスの編集DirectContent](http://stackoverflow.com/a/12741148/1851377)探しているものだと思います。そうでなければ、これはあなたが行く必要がある方向にあなたを得るでしょう。私は 'PdfSmartCopy'を使用していません。それが役に立てば幸い。 – Eric

+0

こんにちはエリック、ありがとうございますが、私は同じ問題に終わるでしょう。ファイルは新しいデータで上書きされ、古いデータは失われます。 .. – Mike

+0

私はpdfsを一緒にマージすると私はオリジナルとすべてをマージするファイルを持つサブフォルダを作成します。私はパン粉を作るので、何かが間違っている場合、私はまだ最初からすべてを持っています。 – Eric

答えて

1

ここで私はPpdfを一緒にマージするためのコードです。上記のように、ソースコードでは、PdfCopyPdfSmartCopyに置き換えることができます。また、コメントに基づいてPdfSmartCopyを使用すると、リソースへの参照を保存できるようになります。それはPdfCopyクラスを継承しているので、PdfCopyPdfSmartCopyに置き換えるだけで動作するはずです。

これが正しい方向に向かうことを願っています。また、ここでは、あなたが見たいと思っているソースコードへのリンクです。 https://github.com/itext/itextsharp

var document = new Document(); 
var writer = new PdfCopy(document, new FileStream(outFile, FileMode.Create)); 
document.Open(); 
    foreach (var fileName in groupfiles) 
    { 
     var reader = new PdfReader(Path.Combine(config.WorkingDirectory, fileName)); 
     for (var i = 1; i <= reader.NumberOfPages; i++) 
     { 
      var page = writer.GetImportedPage(reader, i); 
      writer.AddPage(page); 
     } 
     reader.Close(); 
    } 
writer.Close(); 
document.Close(); 
+0

上記のコードを使用していただきありがとうございますが、私はすべてのPDFファイルを持っていればPDFファイルをマージすることができますが、私のワークフローでは5分後に30分後に別の10番を得ることができます。彼らが来るようにPDFをマージする必要があります。問題があります。私たちはPDFファイルをマージします。それは私のように見えるPdfCopy等は、既存の文書ではない新しい文書でのみ動作するように設計されている...それは挑戦だが、大変助けてくれてありがとう。 – Mike

+0

@Mike - あなたは大歓迎です。あなたの問題で幸運を祈る:D – Eric

+0

@エリック - この問題の解決策を見つけられましたか? – STLDeveloper

関連する問題