2011-08-22 31 views
5

私はここで多くの解決策を見ましたが、明確ではない回答はありません。PDFのテキストをC#で置き換える方法は?

ここで私の簡単な質問は、まっすぐ答えを期待しています。

私はこのようなテキスト何か持つ作成されたPDFファイル(テンプレート)があります。

{FIRSTNAME} {LASTNAME} {ADDRESS} {PHONENUMBER}

をこれらのテンプレートを私の選択したテキストに置き換えるC#コードを持つことは可能でしょうか?

フィールドはありません。他の複雑なものはありません。

これを達成するためのオープンソースライブラリはありますか?

+0

私たちと共有できるコードがありますか?もっと簡単になるでしょうか? – diceler

+0

この他の問題は、類似していてもよい:[C#で編集PDF] [1] [1]:http://stackoverflow.com/questions/1781208/is-there-any-api-in-c -or-net-to-edit-pdf-documents – malinois

+0

http://sourceforge.net/projects/itextsharp/を使用することができます。そこには簡単に(ちょっと古い)チュートリアルがあります:http:// asp- net-whidbey.blogspot.com/2006/04/generating-pdf-files-with-itextsharp.html – Andreas

答えて

2

similar threadで述べたように、これは本当に簡単な方法ではありません。簡単な方法として、DocXファイルを取得していて、簡単なワードスワッピングが可能なライブラリDocXを使用してDocXをPDFに変換する(PDF Creatorプリンタなどを使用して)

またはpdf sharp/migradocを使用して新しい文書を作成してください。

+0

私のテンプレートは実際に言葉で作られてPDFに保存されているので、面白いです!だから、私はそれをdocxとして保存し、それをテンプレートとして使うことができます! :-) –

+0

これはうまく動作しますが、もし私が整形されたテキストを持っていれば、フォーマットをデフォルトのものに変更します!それはそこにバグがあると私は彼らがそれを修正することを願っていますが、実際にここにそれを投稿してくれてありがとう:-) –

+0

多分、すでにこのための修正プログラムがあります。私はそこにそれを見て覚えています – MadBoy

2

PDF文書の「問題」は、本質的に編集には適していないということです。特にフィールドのないもの。最も良いことは、一歩前に戻り、プロセスを見て、PDFが生成される前にテキストを置き換える方法があるかどうかを確認することです。明らかに、あなたはいつもこの自由を持っているとは限りません。

テキストを置き換えることができる場合は、置き換えられたテキストに続くテキストの自動再配置が行われないことに注意する必要があります。あなたがそれでうまくいくとすれば、テキストを置き換えることができるソリューションはごくわずかです。

私はあなたがOpenSourceソリューションを探していることを知っていますので、私はあなたに商用ソリューションを提供することを嫌っています。我々は、PDFKit.NETと呼ばれるものを提供しています。これは、ページ上のすべてのコンテンツをいわゆるシェイプ(テキスト、イメージ、カーブなど)として抽出することを可能にします。型参照のPage.CreateShapesメソッドを参照してください。このシェイプの構造をプログラムでナビゲートして編集し、再度PDFに書き戻すことができます。

ここでは、次のとおりです。 http://www.tallcomponents.com/pdfkit3.aspx

開示:私はTallComponentsの創設者です、このコンポーネントのベンダー

+0

オープンソースのソリューションがない場合は、商用のものを探す必要があります:-) –

+0

実際、PDFの大部分はサブセット化されたフォントを使用しています。これは、必要なフォントグリフのみが埋め込まれていることを意味します。たとえば、既存のPDFに文字 'A'が含まれていない場合は、追加できません。もちろん、オリジナルのフォントファイルがあなたのコンピュータ上にまだ存在していない限り。さもなければ、同様の十分なフォントを見つけなければならないかもしれません。 –

3

このスレッドが死んでいる、しかし、私が直面するかもしれない他の失われた魂のための私の解決策を掲示しています将来この問題。残念ながら、私の会社はコードをオンラインで投稿することを許可していないので、解決策を説明します:)。

基本的には、PdfSharpを使用して、sampleを変更してストリーム内のテキストを置き換えることができますが、テキストを多くの括弧に分割することが必要です(ストリームを文字列に変換して形式を確認してください) 。

次に、this sampleと同様のコードで、pdfページでページを横断し、PdfReferenceアイテム内のPdfContentアイテムを検索し、コンテンツのストリーム内のテキストを置き換えることによって現在のページを変更します。

2

単純なテキストの場合は、iTextSharpライブラリを使用してください。 ある文字列を別の文字列に置き換えるコードは次のとおりです。 これは単純なテキストのみを置き換え、すべての場合に機能しないことに注意してください。

//using iTextSharp.text.pdf; 
    void VerySimpleReplaceText(string OrigFile, string ResultFile, string origText, string replaceText) 
    { 
     using (PdfReader reader = new PdfReader(OrigFile)) 
     { 
      for (int i = 1; i <= reader.NumberOfPages; i++) 
      { 
       byte[] contentBytes = reader.GetPageContent(i); 
       string contentString = PdfEncodings.ConvertToString(contentBytes, PdfObject.TEXT_PDFDOCENCODING); 
       contentString = contentString.Replace(origText, replaceText); 
       reader.SetPageContent(i, PdfEncodings.ConvertToBytes(contentString, PdfObject.TEXT_PDFDOCENCODING)); 
      } 
      new PdfStamper(reader, new FileStream(ResultFile, FileMode.Create, FileAccess.Write)).Close(); 
     } 
    } 
+0

残念ながら、このソリューションは非常に単純なPDFであっても機能しません。私は 'contentString'をチェックしましたが、PDFのテキストはまったく含まれていません。あなたは更新されたバージョンを持っているかもしれませんか?私が扱っているPDFは非常にシンプルで、検索されたテキストもユニークです。 –

関連する問題