Ghostscript.NET-使用DisplayUpdate事件呈现文档的一部分

时间:2018-11-07 23:31:56

标签: ghostscript.net

GhostscriptViewer类在触发事件方面做得很好,使我能够逐渐更新图像,并且用户看到图形正在成形-漂亮。我想将此机制保留在应用程序中。

但是,我无法弄清楚如何将某些PostScript馈送到GhostscriptViewer,以便呈现文档的裁剪部分。这是我可以使用GhostscriptViewerDeviceHandler进行的操作:

    GhostscriptViewerDeviceHandler dev = new GhostscriptViewerDeviceHandler(GhostscriptPngDeviceType.Png16m);
    dev.GraphicsAlphaBits = GhostscriptImageDeviceAlphaBits.V_4;
    dev.TextAlphaBits = GhostscriptImageDeviceAlphaBits.V_4;
    dev.ResolutionXY = new GhostscriptImageDeviceResolution((int)resolutionEdit.Value, (int)resolutionEdit.Value);
    dev.InputFiles.Add(@"C:\work\pdf-tagger\data\bigboat.pdf");
    dev.Pdf.FirstPage = 1;
    dev.Pdf.LastPage = 1;

    if (cbCrop.Checked)
    {
        dev.CustomSwitches.Add("-dDEVICEWIDTHPOINTS=" + ((int)(sizeWidth.Value)).ToString());
        dev.CustomSwitches.Add("-dDEVICEHEIGHTPOINTS=" + ((int)(sizeHeight.Value)).ToString());
        dev.CustomSwitches.Add("-dFIXEDMEDIA");

        // this thing here!
        dev.PostScript = String.Format(@"
        << 
            /PageOffset[{0} {1}] 
        >> setpagedevice", -offsetX.Value, offsetY.Value);
    }

此代码有效,由于仅渲染了裁剪的部分,因此渲染时间有所减少。但是在这种情况下,我无法对渲染进度做出反应并显示部分渲染的图像。 因此,控制偏移量的PostScript-我也尝试通过GhostscriptViewer.CustomSwitches来应用它,如下所示:

    _viewer = new GhostscriptViewer();
    _viewer.ProgressiveUpdateInterval = 100;

    _viewer.Dpi = (int)resolutionEdit.Value; 

    if (cbCrop.Checked)
    {
        _viewer.CustomSwitches.Add("-dDEVICEWIDTHPOINTS=" + ((int)(sizeWidth.Value)).ToString());
        _viewer.CustomSwitches.Add("-dDEVICEHEIGHTPOINTS=" + ((int)(sizeHeight.Value)).ToString());
        _viewer.CustomSwitches.Add("-dFIXEDMEDIA");
        _viewer.CustomSwitches.Add(String.Format(@"-c << 
            /PageOffset[{0} {1}] 
        >> setpagedevice", -offsetX.Value, offsetY.Value));
    }

    _viewer.CustomSwitches.Add("-f");

但它没有任何作用,宽度和高度受到限制,但是偏移不会发生,即我总是渲染左下角。

0 个答案:

没有答案
相关问题