作成日: 2015/05/12 最終更新日: 2015/06/15
文書種別
不具合
状況
回避方法あり
詳細
C1PrintDocumentのブロックフローに、Graphics.DrawImageメソッドなどを用いて、Metafile形式の画像の一部を描画します。
このC1PrintDocumentをC1PrintPreviewControlでプレビューし、その印刷ボタンまたはファイル保存機能を用いてPDFとして保存すると、指定した部分の画像だけでなく、全体が表示されてしまいます。
<再現手順の概要>
1. Graphicsオブジェクトに、DrawStringメソッドで以下のような文字列を描画します。
【例】「あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも」
2. これをMetafile形式の画像としてメモリストリームに保存します。
3. 矩形サイズを指定してこの画像の一部を切り取り、C1PrintDocumentのブロックフローに描画します。
【例】「あいうえおかきく」を含む矩形
4. このC1PrintDocumentをC1PrintPreviewControlでプレビューします。
【結果】ステップ3で指定した矩形サイズに対応した画像が表示されます(正しい)。
5. C1PrintPreviewControlの「ファイルの保存」ボタンをクリックし、PDFファイルとして保存します。
【結果】「あいうえおかきくけこさしすせそたちつて」のように、行全体に文字列が描画されます(本現象)。
※上記は水平方向に注目した場合の再現手順ですが、垂直方向に関しても同様な問題が存在します。
※本件は、以前に以下のタイトルで投稿されていたものです。より分かりやすくなるよう追記・修正し、タイトルもそれに合わせて変更いたしました。
[Reports for WinForms] RenderGraphicsオブジェクトを用いたレポートをC1PrintPreviewControlでプレビューし、PDFファイルに出力すると、レイアウトがプレビューとは異なる
このC1PrintDocumentをC1PrintPreviewControlでプレビューし、その印刷ボタンまたはファイル保存機能を用いてPDFとして保存すると、指定した部分の画像だけでなく、全体が表示されてしまいます。
<再現手順の概要>
1. Graphicsオブジェクトに、DrawStringメソッドで以下のような文字列を描画します。
【例】「あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも」
2. これをMetafile形式の画像としてメモリストリームに保存します。
3. 矩形サイズを指定してこの画像の一部を切り取り、C1PrintDocumentのブロックフローに描画します。
【例】「あいうえおかきく」を含む矩形
4. このC1PrintDocumentをC1PrintPreviewControlでプレビューします。
【結果】ステップ3で指定した矩形サイズに対応した画像が表示されます(正しい)。
5. C1PrintPreviewControlの「ファイルの保存」ボタンをクリックし、PDFファイルとして保存します。
【結果】「あいうえおかきくけこさしすせそたちつて」のように、行全体に文字列が描画されます(本現象)。
※上記は水平方向に注目した場合の再現手順ですが、垂直方向に関しても同様な問題が存在します。
※本件は、以前に以下のタイトルで投稿されていたものです。より分かりやすくなるよう追記・修正し、タイトルもそれに合わせて変更いたしました。
[Reports for WinForms] RenderGraphicsオブジェクトを用いたレポートをC1PrintPreviewControlでプレビューし、PDFファイルに出力すると、レイアウトがプレビューとは異なる
回避方法
Metafile形式ではなく、Bitmap形式で画像を作成し、その一部をブロックフローに描画します。
◎画像作成部分のサンプルコード(VB)
(変更前)
(変更後)
◎画像作成部分のサンプルコード(C#)
(変更前)
(変更後)
※上記サンプルでは、ブラシやフォント、ms、hdcなどの設定は省略しています。
◎画像作成部分のサンプルコード(VB)
(変更前)
Dim image As Image
image = New Metafile(ms, hdc, EmfType.EmfPlusOnly) ' msはMemoryStreamオブジェクト、hdcはデバイスコンテキストのハンドル
Dim printGraphics As Graphics = Graphics.FromImage(image)
printGraphics.DrawString("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも", font, brush, New Point(0, 0))
image = New Metafile(ms, hdc, EmfType.EmfPlusOnly) ' msはMemoryStreamオブジェクト、hdcはデバイスコンテキストのハンドル
Dim printGraphics As Graphics = Graphics.FromImage(image)
printGraphics.DrawString("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも", font, brush, New Point(0, 0))
(変更後)
Image image;
Dim image As Image
image = New Bitmap(1000, 200)
Dim bmpGraphics As Graphics = Graphics.FromImage(image)
bmpGraphics.DrawString("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも", font, brush, New Point(0, 0))
Dim image As Image
image = New Bitmap(1000, 200)
Dim bmpGraphics As Graphics = Graphics.FromImage(image)
bmpGraphics.DrawString("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも", font, brush, New Point(0, 0))
◎画像作成部分のサンプルコード(C#)
(変更前)
Image image;
image = new Metafile(ms, hdc, EmfType.EmfPlusOnly); // msはMemoryStreamオブジェクト、hdcはデバイスコンテキストのハンドル
Graphics printGraphics = Graphics.FromImage(image);
printGraphics.DrawString("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも", font, brush, new Point(0, 0));
image = new Metafile(ms, hdc, EmfType.EmfPlusOnly); // msはMemoryStreamオブジェクト、hdcはデバイスコンテキストのハンドル
Graphics printGraphics = Graphics.FromImage(image);
printGraphics.DrawString("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも", font, brush, new Point(0, 0));
(変更後)
Image image;
image = new Bitmap(1000, 200);
Graphics bmpGraphics = Graphics.FromImage(image);
bmpGraphics.DrawString("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも", font, brush, new Point(0, 0));
image = new Bitmap(1000, 200);
Graphics bmpGraphics = Graphics.FromImage(image);
bmpGraphics.DrawString("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも", font, brush, new Point(0, 0));
※上記サンプルでは、ブラシやフォント、ms、hdcなどの設定は省略しています。
旧文書番号
81275