5

300ppi TIFFとしてレンダリングする必要があるレポートのレンダリングパラメーターを変更するために、考えられるすべてのことを試しました。

これは、URLアプローチを使用したいくつかの試みの1つです。96ppiから300ppiに移行すると、8.5 x 11の画像のサイズは劇的に増加しますが、解像度は96ppiのままです。

//s0550284/ReportServer?/ERecordingReports/Report1&rs:Format=IMAGE&rc:DpiX=300&rc:DpiY=300&rc:PageHeight=11in&rc:PageWidth=8.5in&rs:Command=Render

SSRS構成ファイルを変更して、デフォルトを96ppiから300ppiに変更しようとしましたが、変更は無視されます。

オーバーライドできない場所で96ppiをハードコーディングした人のように見え始めています。

SQL Server2008R2を実行しています。

この問題を乗り越える方法についての考えは非常にありがたいです。

-トム

4

6 に答える 6

8

ここや他のフォーラムの回答者の助けを借りて、私は自分の問題を解決しているように見える簡単なハックを見つけました。SSRSとの戦いをあきらめた後、それは私に来ました。SSRSがさまざまな解像度パラメータを処理する理由については、完全に正当な理由がたくさんあると確信しています。率直に言って、私は愚痴を言うことはありません。指定したサイズと解像度でドキュメントを生成する必要があります。

関連するコードは次のとおりです(簡潔にするためにエラー処理は削除されています)。Webサービスインターフェイスを介してSSRSを呼び出し、レポートを生成して、300 x300TIFFとしてレンダリングします。結果は一時的に保存されます。96ppi TIFFとして生成され、スケールアップされます。次に、それをBitMapに読み込み、解像度を300 x 300に変更して、再度書き戻します。終わり。

string deviceInfo = "<DeviceInfo> <OutputFormat>TIFF</OutputFormat> <DpiX>300</DpiX> <DpiY>300</DpiY> <PrintDpiX>300</PrintDpiX> <PrintDpiY>300</PrintDpiY> </DeviceInfo>";
string format = "IMAGE";
Byte[] results;
string mimeType = "image/tiff";

// Generate the report as a TIF
ExecutionInfo ei = new ExecutionInfo();
ei = rsExec.LoadReport(_reportName, historyID);
results = rsExec.Render(format, deviceInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);

string TempFileRSGeneratedTIFF = TempPath + "RSGeneratedTIFF.TIF";

// Save tiff file returned by RS
using (FileStream stream = File.OpenWrite(TempFileRSGeneratedTIFF))
{
    stream.Write(results, 0, results.Length);
}

// Read tif file into bitmap
Bitmap image = new Bitmap(TempFileRSGeneratedTIFF);

// Change the resolution to what it was supposed to be in the first place..
image.SetResolution(300, 300);

// Save the final version of the file
image.Save(DestFileName, System.Drawing.Imaging.ImageFormat.Tiff);

image.Dispose();
于 2010-08-27T15:16:19.993 に答える
5

SSRS 2008 R2では、rsreportserver.configファイルを編集することでこれを簡単に行うことができました。

      <Extension Name="IMAGE" Type="Microsoft.ReportingServices.Rendering.ImageRenderer.ImageRenderer,Microsoft.ReportingServices.ImageRendering" />
  <Extension Name="TIFF 200 DPI" Type="Microsoft.ReportingServices.Rendering.ImageRenderer.ImageRenderer,Microsoft.ReportingServices.ImageRendering">
    <OverrideNames>
      <Name Language="en-US">TIFF 200 DPI</Name>
    </OverrideNames>
    <Configuration>
      <DeviceInfo>
        <ColorDepth>32</ColorDepth>
        <DpiX>200</DpiX>
        <DpiY>200</DpiY>
        <OutputFormat>TIFF</OutputFormat>
      </DeviceInfo>
    </Configuration>
  </Extension>
  <Extension Name="TIFF 300 DPI" Type="Microsoft.ReportingServices.Rendering.ImageRenderer.ImageRenderer,Microsoft.ReportingServices.ImageRendering">
    <OverrideNames>
      <Name Language="en-US">TIFF 300 DPI</Name>
    </OverrideNames>
    <Configuration>
      <DeviceInfo>
        <ColorDepth>32</ColorDepth>
        <DpiX>300</DpiX>
        <DpiY>300</DpiY>
        <OutputFormat>TIFF</OutputFormat>
      </DeviceInfo>
    </Configuration>
  </Extension>

元のIMAGE拡張機能をそのまま残し(必要はありませんでしたが)、その拡張機能への参照をさらに2つ追加したことに注意してください。1つは200 DPI、もう1つは300DPIです。これで、3つすべてがレポートマネージャーのエクスポートドロップダウンリストに表示され、正しく機能します。SSRSはそれを無視しますが、(Micorsoftの例に従って)ColorDepth属性を含めたことに注意してください。また、Name属性でLanguageパラメーターを使用したことにも注意してください。私が見ていた記事には、Languageパラメーターが含まれていない場合(テストしなかった場合)、オーバーライド構成は無視されると書かれています。

于 2013-08-01T21:17:07.980 に答える
2

@Chuck Brevittの方法を試しましたが、WebAPIのReportingServicesがPDF設定のDPI設定を尊重していないようです。私は実験とMicrosoftNotesのいくつかのヒントによって、これが機能したことを発見しました。

画像のより良いPDFレンダリングを取得するには、次のようにデバイス情報を渡します。

http://serverName/ReportServer?/pathtoReport/ReportName&InvoiceIdOrOtherParameter=24013&rs:Command=Render&rs:Format=PDF&rs:DeviceInfo=<DpiX>300<%2FDpiX><DpiY>300<%2FDpiY>
于 2017-05-19T11:53:48.810 に答える
1

構成ファイルに変更を加えた後、ReportServerを再起動してみてください。以下のリンクをたどってください。

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/2b1379e1-cbc5-4764-8f39-f043b334244d/rendering-a-report-in-tiff-at-300ppi?forum=sqlreportingservices

画像をエクスポートした後、解像度を変更しようとするかどうかはよくわかりません。

于 2014-02-03T16:54:19.733 に答える
0

レポート内に埋め込まれるのではなく、外部(レポートサーバー上のリンク)またはデータベース内に画像オブジェクトを設定します。

于 2015-08-19T16:37:44.630 に答える
0

私はSSRS2012のためにすべてを太陽の下で試しました、そして私はすべてを意味します。しかし、結局私もそれをあきらめました。トムの同じ線とたくさんのグーグルに沿って、私はhttp://csharphelper.com/blog/2017/09/change-image-resolution-c/を見つけました

これは作業モデルです:

public static string BumpUpResolution(string filename, float dpiX, float dpiY, string processID)
    {
        int oldWidth = 0, oldHeight = 0;

        Bitmap image = new Bitmap(filename);
        oldWidth = image.Width;
        oldHeight = image.Height;

        using (Bitmap bm = new Bitmap(oldWidth, oldHeight))
        {
            Point[] points = {
                             new Point(0,0),
                             new Point(oldWidth, 0),
                             new Point(0, oldHeight),
                         };

            using (Graphics gr = Graphics.FromImage(bm))
            {
                gr.DrawImage(image, points);
            }

            bm.SetResolution(dpiX, dpiY);

            bm.Save(Path.Combine(Path.GetDirectoryName(filename), string.Format("{0}{1}", processID, Path.GetExtension(filename))), System.Drawing.Imaging.ImageFormat.Tiff);
        }

        image.Dispose();
        return Path.Combine(Path.GetDirectoryName(filename), string.Format("{0}{1}", processID, Path.GetExtension(filename)));
    }
于 2017-11-10T22:32:31.450 に答える