1


まず、stackowerflowが過去に多くの問題を解決してくれたことを指摘したいと思います。ありがとうございました。しかし今、私はまだ解決策を見つけられていないという問題に直面し、それが私を夢中にさせています。私は英語を母国語としないので、言語の間違いでごめんなさい。

だからここにあります:

私はitextsharplibrary(ちなみに素晴らしいライブラリ)でpdfを生成しています。私はある種のpdfフォーム/テンプレートから始めており、それに「記入」データを追加しています。私はPdfReaderテンプレートpdfを読むために使用しており、個々のページの校正PdfStamper方法によって取得します。それで私は私のテキスト/データを追加しています(そしてすべてのページで使用されます)。私がメソッドで追加するテキストのほとんど。それで、生成されたpdfには私のテキストが含まれています。問題は、「列化された」テキストを追加する必要があるところから始まります。私は次のコードでそれを行います:GetOverContent(pageNum)PdfContentBytePdfContentByteBeginTextEndTextShowTextAligned

ColumnText ct = new ColumnText(cb);//cb is PdfContentByte
Phrase p = new Phrase(txt, FontFactory.GetFont(DEFAULT_FONT, BaseFont.CP1250, true, font_size));
ct.SetSimpleColumn(p, x, y, x+width, y+height, 10, alignment);
ct.Go();
setDefaultFont();//sets font to PdfContentByte again with setFontAndSize and SetColorFill

列テキストはこのコードOKで追加されますが、これの後に追加されたテキスト(同じページ/同じPdfContentByte)はAcrobatReaderに表示されShowTextAlignedません。

これが「楽しい」部分です-foxitリーダーで開いた同じpdfファイルのテキストは罰金/可視/OKです。

したがって、追加ShowTextAligned後に追加されたテキストColumnTextは、acrobatリーダーでは表示されませんが、foxitリーダーでは問題なく表示されます。この問題は1つのページ内に存在し、新しいページはこの問題をリセットします(PdfContentByte次のページは新しいため)。

ColumnTextそのための私の回避策は、のすべての呼び出しの後にすべてを追加することでしたShowTextAligned。これは今日まで機能し、顧客が生成されたpdfをacrobatリーダーで印刷すると、ドキュメントを印刷した後、pdfにエラーが含まれているため、pdfの作成者に連絡する必要があるというメッセージが表示されました。AdobeReaderのバージョンは10.1.1です。問題は顧客のコンピューターにはありません。同じことが私のコンピューターでも起こります。

Webを調査した後、PDFの分析を目的としたツールPreflightを含むAdobe Acrodat Pro Trialをインストールしました(私が理解している限り)。このツールは、「オペレーターのコンテンツ状態ストリームが無効です」という警告を出力します。そして、ここで私は立ち往生しています。ColumnTextそれらなしで生成されたドキュメントは表示/印刷に問題を引き起こさず、プリフライトは「問題は見つかりませんでした」と述べているため、問題はadded内に存在すると思います。

私はいくつかの事実を見逃している可能性があり、問題は私のコードにあります...

私はアイデアが不足しているので、私を助けてください。この投稿がいつか同じ問題を抱えている他の誰かに役立つことを願っています。機密データが含まれているためサンプルPDFを添付できませんが、他に方法がない場合は、シナリオ/コードを再作成します。

4

1 に答える 1

2

私の質問/問題に答えるには: PdfContentByte を使用して pdf に書き込み、メソッドを使用するShowTextAligned場合は、書き込み前に呼び出すBeginText必要があり、終了後に呼び出す必要がありますEndText。だから私はしました。しかし、他の要素 (ColumnText、Image、その他のものなど) を追加したい場合は、 を呼び出す前にそれを行うことはできませんEndText。その場合、生成された pdf は「問題あり」/破損します。

したがって、疑似コードでは次のように間違っています。

BeginText();
ShowtextAligned();
AddImage();
ShowtextAligned();
EndText();

正しい使い方は次のとおりです。

BeginText();
ShowtextAligned();
EndText();
AddImage();
BeginText();
ShowtextAligned();
EndText();

これがいつかどこかで誰かを助けることを願っています。

于 2011-11-28T19:01:35.173 に答える