0

ASP .net アプリケーション内で iTextSharp を使用して PDF ドキュメントを生成しています。

ユーザーは iPad で PDF を開き、署名 [図] を追加してから、署名済みの文書を電子メールで送信しています。

署名は iPad では正しく表示されますが、電子メールで送信すると、署名が反時計回りに 90 度回転します。代わりに Acrobat オンラインに保存すると、問題は発生しません。

ローテーションされた署名

編集: 元の PDF には法的および財務情報が含まれているため、共有できません。同じ問題が発生した別のテスト PDF を共有できます。これは itext によって生成されたものではありませんが、それを作成したアプリケーションではなく、Adobe iOS アプリに問題があることを示しているようです。

メールで送られてきたPDF(図面を回転させたもの)

Acrobat.com からアップロードされた PDF (意図したとおりに動作)

その他の情報:

Apple iPad 2 MC773LL/A タブレット (16GB、Wifi + AT&T 3G、ブラック) 第 2 世代 iOS バージョン: 6.0.1 (10A523) Adob​​e Reader バージョン 11.0.0

4

2 に答える 2

1

手短に

電子メールで送信されるPDF は、アップロードされた PDFに基づいています。変更点は、元のドキュメント (アップロードされた PDF) に 2 つの注釈が含まれていることです。変更されたドキュメント (電子メールで送信された PDF) ではフラット化されています。つまり、代わりにページ コンテンツに格納されています。

残念ながら、そのフラット化を行うソフトウェアは、既存のページ コンテンツで変換マトリックスが変更 (回転) されているという事実を無視して、ページ コンテンツに注釈の外観を表示するためのコマンドを追加するだけでした。したがって、折丁もフォームの平坦化後に回転されます。

したがって、このフォームの平坦化を行うソフトウェアを修復する必要があります (変換行列が実際に変更された可能性があることを考慮せずにコンテンツに単純に追加することはできません!)。

ただし、短期的な解決策として (平坦化を行うソフトウェアを簡単に置き換えることができない場合)、横長の PDF を作成するために回転を使用しない基本 PDF の使用を検討することをお勧めします。

iText(Sharp) で作成されたドキュメント (質問で言及) の場合、これは使用を意味する可能性があります

new Document(new Rectangle(792, 612));

(iText(Sharp) サンプルHelloWorldLandscape2.java / HelloWorldLandscape2.csを参照)

それ以外の

new Document(PageSize.LETTER.Rotate()));

(cf. iText(Sharp) サンプルHelloWorldLandscape1.java / HelloWorldLandscape1.cs )

iText in Action — 第 2 版 で説明されているように、

PDF を操作する場合に問題となる内部的な微妙な違いがあります。

詳細に

元の PDF では、ページ ディクショナリは注釈によって署名を参照します。

3 0 obj
<<
  /Type/Page
  /Parent 2 0 R
  /MediaBox[ 0 0 612 792]
  /Rotate 270
  /Contents 5 0 R
  /Resources<</Font<</F1 4 0 R>>/ProcSet[/PDF/Text]>>
  /Annots 11 0 R
>>
endobj 
11 0 obj
[ 12 0 R 15 0 R 16 0 R 19 0 R]
endobj 

オブジェクト12および16は、それぞれオブジェクト14および18内の外観ストリームを参照するインク注釈である。

オブジェクト 5 セットのコンテンツ ストリーム

0.0000 -1.0000 1.0000 0.0000 0.0000 0.0000 cm

ご覧のように、ページが回転され ( /Rotate 270 )、コンテンツ ストリームが反対方向に回転され ( 0 -1 1 0 0 0 cm )、正立印刷が可能になります。ただし、注釈の外観ストリームは、この逆回転の影響を受けないため、内部でそれを行います。

フラット化されたページでは、次のようになります

3 0 obj
<<
  /Type/Page
  /Parent 2 0 R
  /MediaBox[ 0 0 612 792]
  /Rotate 270
  /Resources
  <<
    /Font<</F1 4 0 R>>
    /ProcSet[/PDF/Text]
    /XObject<</CprRpt2 14 0 R/CprRpt3 18 0 R>>
  >>
  /Annots 11 0 R
  /Contents[ 5 0 R 20 0 R]>>
endobj 
11 0 obj
[]
endobj 

オブジェクト 20 のコンテンツ ストリームには、

q 1 0 0 1 223.453 24.0703  cm /CprRpt2 Do Q 
q 1 0 0 1 410.246 59.9062  cm /CprRpt3 Do Q 

そのため、注釈は削除されますが (オブジェクト 11 の空の配列)、代わりにインク注釈の外観ストリームがコンテンツ ストリーム自体に直接含まれるようになりました ( /CprRpt2 Doおよび/CprRpt3 Doは、 Resources内のオブジェクト 14 および 18 を参照するように定義されています) 。 .

したがって、ストリーム 20 はコンテンツ ストリーム配列[ 5 0 R 20 0 R]のストリーム 5 の後にあるため、これらの外観ストリームは、オブジェクト 5 ( 0 -1 1 0 0 0 cm )からの回転変換行列の対象になります。ただし、それらは(上記を参照)ページの回転自体を打ち消します. したがって、本質的に、それらの回転は 2 回打ち消され、反対方向に回転されます。

于 2013-08-28T08:50:32.633 に答える