Copper PDFは、デフォルト(標準モード)ではCSS 2.1に準拠したレンダリングをしますが、 実用上の問題から一般的なブラウザとの互換モードが用意されています。 output.compatible_mode にmsieを指定することにより、Copper PDFはInternet Explorer 7に近いレイアウトをするように試みます。
ただし、ドキュメントに、次のいずれかのpublic idを持つDOCTYPE宣言がある場合は、 常に通常のモードでレイアウトします。
互換モードはCopper PDFのバージョンアップごとに一般的なブラウザと互換性を持つように改善が試みられますが、 完全な互換性を保証するものではありません。 また、制限事項があり、デフォルトのモードより非効率な処理が行われることがあるため、若干パフォーマンスが劣ります。
標準モードでは数字のクラス名はエラーとなり無視されますが、msieモードでは有効です。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>数字のクラス名</title> <style type="text/css"> .A { color: Red; } .1 { color: Red; } </style> </head> <body> <p class="a">このテキストは赤字です</p> <p class="1">msieモードではここも赤くなります</p> </body> </html>
CSSでプロパティ名と値の区切り文字は':'ですが、msieモードでは'='も使用することができます。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>':'の代わりに'='を使用する</title> <style type="text/css"> .A { color: Red; } .B { color=Red; } </style> </head> <body> <p class="a">このテキストは赤字です</p> <p class="b">msieモードではここも赤くなります</p> </body> </html>
msieモードではRGBコードで色を指定する場合、#を省略できます。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>色指定で#を省略する</title> <style type="text/css"> .A { color: #FF0000; } .B { color: FF0000; } </style> </head> <body> <p class="a">このテキストは赤字です</p> <p class="b">msieモードではここも赤くなります</p> </body> </html>
msieモードでは長さ指定で単位を省略した場合、px単位による指定と認識されます。
msieモードでは、デフォルトでフォーム(form要素)の前後に1.12emのマージンが設定されます。
msieモードでは、段落または見出しが(p, h1~h6要素)の、 ページまたはテーブルセルの先頭にある場合、 前のマージンがなくなります。同様に末尾にある場合は後のマージンがなくなります。
widthまたはheightのパーセント指定は、 標準モードでは外側のボックスの幅に対して、ボックスの内側の幅を指定するため、 境界のあるボックスに対して100%を指定すると、ボックスが外側のボックスの内部からはみ出します。 msieモードでは100%指定された場合にボックスの外側の幅が外側のボックスの内側の幅に一致し、 0%指定された場合にボックスの内側の幅がゼロになるように計算します。
絶対位置指定ボックス、浮動ボックスにoverflow: visible;が指定され、 かつボックスの幅と高さが設定されている場合、 標準モードではボックスのサイズは常に固定で、内容がはみ出した部分はボックスの境界にかかりますが、 msieモードではボックスの内容によってボックスの幅と高さが拡張されます。
幅指定されたボックスに、より大きな幅のボックスが含まれている場合、 標準モードでは内部のボックスは外側のボックスをはみ出しますが、 msieモードでは外側のボックスの幅が、内側のボックスが収まるように拡張されます。
標準モードでは、table-layout: fixed;が指定されているテーブルであっても、 widthがautoであればtable-layout: auto; が指定されたのと同様に扱われます。
msieモードでは、widthがautoの場合は、 テーブルの外側の幅を、外側のボックスの内側の幅に合わせて固定し、固定レイアウトとして処理します。 ただし、全てのカラムに幅が明示されている場合は、テーブルの幅はカラムの指定幅の合計となります。
msieモードではテーブル行に対するmax-heightの設定は無視されます。
ブロックに対してline-heightが指定されている場合、 標準モードではブロック内の行に対して指定した高さが必ず確保されますが、 msieモードでは行内にインライン画像、インラインボックスまたはインラインテーブルだけが含まれ、 かつそれらの高さがline-heightより小さい場合は、 line-heightで指定された高さは確保されません。
msieモードでは、全角スペースが連続している場合、その中での折り返しは発生しません。 また、全角スペースにより外側のボックスが拡張されることはありません。
msieモードでは、input要素で配置されるフォームの高さが1.12emに強制されます。 heightは適用されません。
img, input, applet, object, iframe, tableのalign属性による中央寄せは、 標準モードでは左右のマージンをautoにした状態margin: 0 auto;と同等ですが、 msieモードでは左右のマージンが設定された場合も中央寄せになります。
例えば、標準モードではmargin-left: 100pt;が指定されれば、 中央寄せが設定された要素でも常に左から100ptの位置に配置されますが、 msieモードでは中央寄せから左に100ptの1/2(つまり50pt)ずれた位置に配置されます。
テーブル内で、かつテーブルセルの外にインライン、インラインブロックまたはインラインテーブルが配置された場合、 標準モードでは自動的に上位に匿名のセル要素が挿入されますが、 msieモードでは全てテーブルの前に表示されます。
標準モードではwidthはインラインボックスには適用されませんが、 msieモードではwidthの設定によりインラインボックスの幅が変化します。
また、widthがauto以外に設定されたインラインボックスはインラインボックスと同様に配置されます。 すなわち、display: inline;が指定されている要素であっても、widthがauto以外であれば display: inline-block;が適用されているのと同じことになります。
標準モードではtext-alignはテキストの配置にだけ適用されますが、 msieモードでは内部にある通常のフローのボックスの配置にも適用されます。 これはp要素やdiv要素等のalign属性と同様の挙動をします。
msieモードではテーブルカラムに設定された以下のプロパティがテーブルセルに継承されます。
上記のプロパティがテーブルセルと、テーブル行の両方に設定されている場合は、テーブル行のプロパティの方が継承されます。
標準モードではwhite-space: nowrap;が指定された領域ではテキストの折り返しが行われないため、 widthで幅が指定されたテーブルセルでは、内容が幅をはみ出すことがありますが、 msieモードではwidthで幅が指定されたテーブルセルではwhite-space: nowrap;が適用されず、 内容がはみ出さないようにテキストの折り返しが発生します。
MS明朝、MSゴシックのフォントを使用する場合、一般的なブラウザでは小さなフォントサイズが指定された場合、 一番近いビットマップフォントが使用されるため、指定された文字サイズと実際に使われる文字サイズが異なることがありますが、 Copper PDFでは全てアウトラインフォントを使用するため、指定したとおりの文字サイズとなります。 そのため、文字幅が一般的なブラウザで表示する場合と異なり、文字列の折り返し位置等が異なることがあります。
Internet Explorer独自のCSSプロパティで、以下のものはサポートしていません。
CSS 2.1では自動レイアウトテーブル (デフォルト、あるいはtable-layout: auto;が指定されたテーブル) のレイアウトの調整方法について、明確な仕様が定められていないため、どうしても一般的なブラウザと若干のレイアウトの違いが生じます。 Copper PDF 2.0.7以降では、ほぼ一般的なブラウザに近いレイアウトとなりますが、なるべく以下のいずれかの条件の下で使用してください。