2016-10-31 7 views
1

2つのpdfファイルをマージする必要があります。レターヘッド(source.pdf)とpdfページ(overlay.pdf)で生成されたコードです。レターヘッドはスキャンまたはデジタルコピーにすることができます。私はここで見つけたコードを使用した:https://social.msdn.microsoft.com/Forums/vstudio/en-US/e78ccbbf-3d00-4612-b342-269eb0075982/make-a-pdf-as-a-background-of-another-pdf?forum=csharpgeneral 。私の問題は、レターヘッドがスキャンされている場合、レターヘッドがデジタルコピーなどである場合、overlay.pdfからのテキストが表示されないことです。しかし、テキストはそこにあります。私はそれを選択することができます。 output.pdf with invisible text 誰もが考えてくれることを願っています。ありがとうございます。C#itextsharpレターヘッドで作業する

+1

ええと...あなたは完全には正しくない例を使用しています。 'overlay.pdf'で' PdfStamper'を使用し、バックグラウンドで 'source.pdf'を追加してください。 'PdfWriter'を使う理由はありません。あなたは公式文書を見ましたか?具体的には:http://developers.itextpdf.com/question/how-superimpose-pages-existing-documents-another-document –

+0

あなたの答えは「答えではありません」と書いてあります。これは、あなたの答え(実際にはコメント)がおそらくすぐに消えることを意味します。 –

答えて

1

私はJavaの開発者ですので、C#の詳細について詳しくは分かりません。それにもかかわらず、私はC#を書くつもりです。そのコードがすぐに機能しない場合は、疑似コードのように扱います。原則は正しい。構文にエラーが含まれる可能性があります。

// Actual content 
PdfReader overlay = new PdfReader("overlay.pdf"); 
int n = overlay.NumberOfPages; 
PdfStamper stamper = new PdfStamper(overlay, 
    new FileStream("result.pdf", FileMode.Create); 
// Company stationery (letter head) 
PdfReader stationery = new PdfReader("source.pdf"); 
PdfImportedPage page = stamper.GetImportedPage(stationery, 1); 
// Add stationery page to each page of real content 
PdfContentByte background; 
for (int i = 1; i <= n; i++) { 
    background = stamper.GetUnderContent(i); 
    background.AddTemplate(page, 0, 0); 
} 
// Close the stamper 
stamper.Close(); 

私のコメントで説明したように、PdfWriterを使用する必要はありません。実際の内容で既存のPDFを取り、レターヘッド付きの単一ページのPDFを追加し、それをバックグラウンドに追加します。

更新

あなたoverlay.pdfが不透明である場合は、その内容がカバーされるように、あなたがsource.pdfを見ていないということだけで正常です。その場合、透明度の使用を検討することがあります。

// Actual content 
PdfReader overlay = new PdfReader("overlay.pdf"); 
int n = overlay.NumberOfPages; 
PdfStamper stamper = new PdfStamper(overlay, 
    new FileStream("result.pdf", FileMode.Create); 
// Company stationery (letter head) 
PdfReader stationery = new PdfReader("source.pdf"); 
PdfImportedPage page = stamper.GetImportedPage(stationery, 1); 
// Add stationery page to each page of real content 
PdfContentByte foreground; 
PdfGState state = new PdfGState(); 
state.FillOpacity = 0.6f; 
for (int i = 1; i <= n; i++) { 
    foreground = stamper.GetOverContent(i); 
    foreground..SaveState(); 
    foreground.SetGState(state); 
    foreground.AddTemplate(page, 0, 0); 
    foreground.RestoreState(); 
} 
// Close the stamper 
stamper.Close(); 

これは最適な結果ではない可能性があります。 0.6の塗りつぶしの不透明度を変更することはできますが、奇妙な人があなたに不透明なレターヘッドのPDFを渡すと得られる最良の結果です(は行われていません。;これを行う人はまったくプロフェッショナルではありません)。

+0

透明の代わりに、opはブレンドモード** Darken **を試みることもできます。多くの場合、これにより出力が向上します。 (オーバーレイされたコンテンツにもよりますが、出力には望ましくないアーティファクトも含まれる可能性があります。したがって、プレックスは実際に運用前にテストしてください)。 – mkl

関連する問題